tôi stumbled khi mã ví dụ này:đa kế thừa ảo
#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
và tôi không có ý tưởng tại sao. Tôi nghĩ rằng nó sẽ in A
cho D : public A
, sau đó AB
cho D : public B
, sau đó ABC
cho D : public C
và sau đó D
, nhưng có vẻ như A
chỉ được in hai lần. Cái này hoạt động ra sao?
điều gì sẽ xảy ra nếu bạn thay đổi 'công khai A, công khai B , public C' to 'virtual public A, public B, public C'? – cmh
@cmh 'ABBCD' ... –
Có lẽ đó là hướng dẫn .. – cmh