sono incappato in questo esempio di codice:virtuale ereditarietà multipla
#include <iostream>
using namespace std;
class A {
int x;
public:
A() { x = 1; cout << "A"; }
};
class B : virtual public A {
int y;
public:
B() { y = 2; cout << "B"; }
};
class C : virtual public B, virtual public A {
int z;
public:
C() { z = 3; cout <<"C"; }
};
class D : public A, public B, public C {
int t;
public:
D() { t = 4; cout << "D"; }
};
int main()
{
D d;
return 0;
}
This code prints ABABCD
e non ho idea del perché. Ho pensato che avrebbe stampato A
per D : public A
, quindi AB
per D : public B
, quindi ABC
per D : public C
e quindi D
, ma sembra che lo A
venga stampato solo due volte. Come funziona?
cosa succede se si cambia 'pubblico A, pubblico B , pubblico C' a 'pubblico virtuale A, pubblico B, pubblico C'? – cmh
@cmh 'ABBCD' ... –
Forse è istruttivo .. – cmh