Struktury C++

0

Analizuję kod pewnego programu, chciałbym zapytać jaki jest sens "punkt3D(){};" w pierwszej strukturze, "pomocniczy(){}" i "pomocniczy(punkt3D &p):punkt(p),next(NULL){}" w drugiej?

struct punkt3D 
{ 
	int x,y,z;
	
	punkt3D(){};
};

struct pomocniczy 
{
	punkt3D punkt;	
	pomocniczy* next;	

	pomocniczy(){}
	pomocniczy(punkt3D &p):punkt(p),next(NULL){}
};
1

To są konstruktory.

punkt3D() {};

to konstruktor klasy/struktury punkt3D, który jest bezparametrowy i ma puste ciało. W tym konkretnym przypadku pisanie tego jest zbędne, ale to już inna sprawa.

pomocniczy(punkt3D& p):punkt(p),next(NULL) {}

Konstruktor klasy pomocniczy, który przyjmuje 1 argument typu punkt3D&. Kopiuje wartość tego argumentu do pola punkt, a pole next ustawia na null.

0
twonek napisał(a):

To są konstruktory.

punkt3D() {};

to konstruktor klasy/struktury punkt3D, który jest bezparametrowy i ma puste ciało. W tym konkretnym przypadku pisanie tego jest zbędne, ale to już inna sprawa.

pomocniczy(punkt3D& p):punkt(p),next(NULL) {}

Konstruktor klasy pomocniczy, który przyjmuje 1 argument typu punkt3D&. Kopiuje wartość tego argumentu do pola punkt, a pole next ustawia na null.

W tym drugim przypadku "pomocniczy(){}" jest tak samo zbędne i niebezpieczne jak w pierwszym?

0

To może mieć właśnie na celu nałożenie pewnego ograniczenia, żeby wartości dało się inicjować tylko w sposób:

punkt3D p;
p.x = 1; 
0
amadeusz1 napisał(a):

W tym drugim przypadku "pomocniczy(){}" jest tak samo zbędne i niebezpieczne jak w pierwszym?

Gdyby nie było tego konstruktora, to wtedy nie można wywołać konstruktora bezargumentowego, czyli takie coś nie przejdzie

pomocniczy p;

Wynika to z faktu, że ta klasa ma zdefiniowany inny konstruktor pomocniczy(punkt3D &p)

W przypadku punkt3D jest inaczej, bo tam nie ma żadnego innego konstruktora zdefiniowanego, więc w przypadku braku bezargumentowego kompilator jest w stanie samodzielnie taki wygenerować.

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