C++ virtuális többszörös öröklődé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; }
};
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.
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!