Kezdőoldal » Számítástechnika » Programozás » Agyf*szt kapok, minek a...

Agyf*szt kapok, minek a destruktora (és miért) hívódik a B objektum példányosításakor? (c++)

Figyelt kérdés

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);

}


2011. máj. 14. 17:14
 1/3 anonim ***** válasza:

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

2011. máj. 14. 20:29
Hasznos számodra ez a válasz?
 2/3 anonim ***** válasza:

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);

}

2011. máj. 14. 20:37
Hasznos számodra ez a válasz?
 3/3 A kérdező kommentje:

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

2011. máj. 14. 21:44

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!