Kezdőoldal » Számítástechnika » Programozás » C++ virtuális többszörös...

C++ virtuális többszörös öröklődés?

Figyelt kérdés

Sziasztok!

Az lenne a kérdésem, hogy pontosan miért is jó ez az egész?

Ha nem virtuális öröklődik a B1, és a B2 A-tól, akkor a C konstruktoránál (ahol meghívódik maga az A), ott nem fog a B1-ben, és B2-ben meghívódni az A, mert virtuálisan öröklődött.

Most ez azért van, mert C-ben meghívtuk az A konstruktorát, és ezért a B-kben a virtuális öröklődés miatt már nem fognak? És csak azért jobb ez az egész, mert nem végez feleslegesen több munkát, vagy van valami más is?

Előre is köszi.


Pastebint nem engedi, ezért bemásolom ide:


class A

{

protected:

int a;

public:

A(int i) :a(i) { cout << "A" << endl; }

};

class B1: virtual public A

{

protected:

int b;

public:

B1(int i,int y) :A(i),b(y) { cout << "B1" << endl; }

};

class B2: virtual public A

{

protected:

int b;

public:

B2(int i,int y) :A(i),b(y) { cout << "B2" << endl; }

};

class C: public B1, public B2

{

public:

C(int i,int y) :A(i),B1(0,y),B2(0,y) { cout << "C" << endl; }

};


2015. máj. 2. 11:21
 1/2 anonim ***** válasza:

A közös rész újraörökléséről van szó. A B1 és B2 példányában is lenne egy A példány ami nem egyértelmű feloldás szempontjából, a virtuális öröklés ezt kezeli. Nincs két A példányod a C-ben, ez a lényege.


[link]

2015. máj. 2. 15:35
Hasznos számodra ez a válasz?
 2/2 anonim ***** válasza:
Pontosan, nem arról van szó, hogy nem csináljon plusz munkát, hanem hogy miként tudja a program feloldani a többszörös öröklődés problémáját.
2015. máj. 2. 20:44
Hasznos számodra ez a válasz?

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!