我有一个关于c ++中虚拟继承的问题:
class A {
};
class B: virtual public A {
};
class C: virtual public A {
};
class D: public B,public C, virtual public A {
};
Run Code Online (Sandbox Code Playgroud)
如果D继承B和C虚拟继承可以确保D中只包含一个A副本,那么D再次使用虚拟公共A继承A,就像上面的代码一样?
那么A类子对象的数量是1还是2?
好的,谢谢你的答案,我理解.但我仍然把一些表达与虚拟继承混淆.例如:
#include <iostream>
using namespace std;
class A {
public:
A() {std::cout<<"A ";}
};
class B: A {
public:
B() {std::cout<<"B ";}
};
class AToo: virtual A {
public:
AToo() {
std::cout<<"AToo ";
}
};
class ATooB: virtual AToo, virtual B {
public:
ATooB() {
std::cout<<"ATooB ";
}
};
Run Code Online (Sandbox Code Playgroud)
虚拟可以确保ATooB中只有一个A副本吗?如果AToo虚拟继承A,但B没有,会发生什么?在ATooB中有两个副本?所以这意味着B和AToo应该虚拟继承A,以便只在ATooB中保留一个副本?
Ale*_*ler 11
一个 - 这是virtual
继承的预期用途.只有一个副本A
.
你可以轻松地验证这一点.给A
一个成员并使用D
实例修改它.如果有多个副本A
,编译器会说访问不明确.
编辑在编辑的问题,会出现A的两个副本每次A
被继承定期(不virtual
),A的新副本.如果你想要一份,virtual
每次都要申报.
归档时间: |
|
查看次数: |
2138 次 |
最近记录: |