Agyf*szt kapok, minek a destruktora (és miért) hívódik a B objektum példányosításakor? (c++)
class A {
const char *s;
public:
A(const char *s = "A") :s(s) { cout << s << 'k'; }
virtual ~A() { cout << 'd'; }
};
class B {
A a;
public:
B(const char *s ="C++") :a(s) { cout << 'K'; }
B(const A) { cout << 'M'; }
};
int main() {
A ab4("ABCDEF"); cout << endl;
B b3(ab4); cout << endl;
return(0);
}
A ab4("ABCDEF");// Meghívódik A(const char *s = "A") konstruktor "ABCDEF" paraméterrel a képernyőre "ABCDEFk"-t nyomtatva
cout << endl; //új sor
B b3(ab4); // B(const A ) konstruktor hívása történik úgy, hogy hívás előtt ab4 objektum klónozása történik amely során ab4 objektum A(const char *s = "A") konstruktora hívása történik nincs paraméter átadva ezért const char *s = "A" paraméterátadás helyettesítődik be. A képernyőre kinyomtatja "Ak" szöveget. A klónozott objektumpéldány elkészülése után, meghívódik B(const A ) konstrukotor mely kinyomtat "M"-et a képernyőre. A B(const A ) konstruktor lefutása után a klónozott ab4 A-beli objektum megszűnik, meghívódik a destruktora amely kinyomtat egy "d"-t.
cout << endl; új sor
ab4 statikusan létrehozott objektum megszűnik létezni, meghívódik a destruktora. Mellékhatásként kinyomtat egy "d"-t
b3 statikusan létrehozott objektum megszűnik létezni, meghívódik a destruktora, ez nincs írva ezért a default destruktor hívódik meg. b3 objektum tartalmaz A a; objektumot ennek destruktora meghívódik, kiír egy d-t
return(0);// terminál a program 0-ás kóddal
A képernyőn ez lesz:
ABCDEFk
AkMd
dd
Megkérdezhetem, hogy mióta programozol, milyen programozási nyelveket ismersz? A c++ egy elég agy ... hmmm szexuáló nyelv ... Elég elfajzott dolgok vannak benne, ez még nem is az ... Kezdőnek nem ajánlanám.
Az objektumokat paraméterbe referencia szerint szokás átadni, különben egy leklónozott példánya adódik át.
Átírtam, hogy referenciaként adódjon át. Brekaktam a char c; cin >> c; sorokat hogy ne termináljon a program egyből. Így nem hívódnak meg a destruktorok egyből ...
class A {
const char *s;
public:
A(const char *s = "A") :s(s) { cout << s << 'k'; }
virtual ~A() { cout << 'd'; }
};
class B {
A a;
public:
B(const char *s ="C++") :a(s) { cout << 'K'; }
B(const A &a) { cout << 'M'; }
};
int main() {
A ab4("ABCDEF"); cout << endl;
B b3(ab4); cout << endl;
char c;
cin >> c;
return(0);
}
vááá, tényleg! ezt nagyon csúnyán benéztem most.
egyébként zh példa egy része volt
kösz a válaszokat
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!