Dlaczego wstawia się drugi raz konstruktor i przypisuje się im nowe nazwy w programowaniu obiektowym w C++?

0

Nie wiem czy to mnie ominęło czy coś, ale koleś na youtube ma taki kod
przyjaciele.cpp

#include <iostream>
#include "przyjaciele.h"
using namespace std;

Punkt::Punkt(string n, float xx, float yy)
{
    nazwa=n;
    x=xx;
    y=yy;
}

void Punkt::wczytaj()
{
    cout<<"Podaj x: "; cin>>x;
    cout<<"Podaj y: "; cin>>y;
    cout<<"Nazwa punktu: "; cin>>nazwa;
}

Prostokat::Prostokat(string n, float xx,float yy, float s, float w)
{
    nazwa = n;
    x=xx;
    y=yy;
    szerokosc=s;
    wysokosc=w;
}

void Prostokat::wczytaj()
{
    cout<<"Podaj x lewego dolnego naroznika: "; cin>>x;
    cout<<"Podaj y lewego dolnego naroznika: "; cin>>y;
    cout<<"Podaj szerokosc: "; cin>>szerokosc;
    cout<<"Podaj wysokosc: "; cin>>wysokosc;
    cout<<"Podaj nazwe prostokata: "; cin>>nazwa;
}

przyjaciele.h

#include <iostream>
#include "przyjaciele.h"
using namespace std;

Punkt::Punkt(string n, float xx, float yy)
{
    nazwa=n;
    x=xx;
    y=yy;
}

void Punkt::wczytaj()
{
    cout<<"Podaj x: "; cin>>x;
    cout<<"Podaj y: "; cin>>y;
    cout<<"Nazwa punktu: "; cin>>nazwa;
}

Prostokat::Prostokat(string n, float xx,float yy, float s, float w)
{
    nazwa = n;
    x=xx;
    y=yy;
    szerokosc=s;
    wysokosc=w;
}

void Prostokat::wczytaj()
{
    cout<<"Podaj x lewego dolnego naroznika: "; cin>>x;
    cout<<"Podaj y lewego dolnego naroznika: "; cin>>y;
    cout<<"Podaj szerokosc: "; cin>>szerokosc;
    cout<<"Podaj wysokosc: "; cin>>wysokosc;
    cout<<"Podaj nazwe prostokata: "; cin>>nazwa;
}

main.cpp

#include <iostream>
#include "przyjaciele.h"
using namespace std;

void sedzia(Punkt pkt, Prostokat p)
{
    if((pkt.x>=p.x)&&(pkt.x<=p.x+p.szerokosc)&&(pkt.y>=p.y)&&(pkt.y<=p.y+p.wysokosc))
        
    cout<<endl<<"Punkt "<<pkt.nazwa<<" nalezy do prostokata: "<<p.nazwa;
    
    else
        
    cout<<endl<<"Punkt "<<pkt.nazwa<<" lezy POZA prostokatem: "<<p.nazwa;
}

int main()
{
    Punkt pkt1("A",3,1);
    
    Prostokat p1("Prostokat",0,0,6,4);
    
    sedzia(pkt1,p1);
    return 0;
}

Zastanawia mnie np. ten fragment kodu

Punkt::Punkt(string n, float xx, float yy)
{
    nazwa=n;
    x=xx;
    y=yy;
}

Dlaczego przypisuje się nowe wartości? Pewnie chodz coś o to, że te wartości są private i wtedy tworzone jakoś są kopie czy coś

2

Szczerze? Nie wiem o czym Piszesz. A ta metoda to konstruktor klasy Punkt, której nie widzimy, więc ciężko cokolwiek powiedzieć.

Edycja: Rozumiesz programowanie obiektowe? Klasy, pola, metody, konstruktory? W deklaracji konstruktora parametry formalne mają wartości domyślne, ale już definicjia, w przyjaciele.h pozwala na stworzenie dowolnego punktu, tak jak powinno być (a nie tylko domyślnego = środek ukłądu współrzędnych).

0

przyjaciele.h to prawidłowy plik, niew wiem czemu mi się źle przekleił

#include <iostream>

using namespace std;

class Prostokat;

class Punkt
{
    string nazwa;
    float x,y;
public:
    Punkt(string="A", float=0, float=0);
    void wczytaj();
    
    friend void sedzia (Punkt pkt, Prostokat p);
};

class Prostokat
{
    string nazwa;
    float x, y,szerokosc,wysokosc;
    
public:
    Prostokat(string="brak",float=0,float=0,float=1,float=1);
    void wczytaj();
    
    friend void sedzia (Punkt pkt, Prostokat p);
};
1
Morgotheron napisał(a):

Nie wiem czy to mnie ominęło czy coś, ale koleś na youtube ma taki kod

Zdecydowanie złe źródło do nauki. Internet jest pełen śmieci.
Tu jest połowa rzeczy na "nie"

2

Już wielokrotnie krytykowaliśmy tego autora (ostatni przykład). Czegoś tam uczy, ale popełnia dużo błędów, w tym poważne, oraz namawia do złych praktyk programowania.
Na razie nie mam ochoty sprawdzać podanego filmu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1