【发布时间】:2015-04-22 19:26:35
【问题描述】:
我正在学习 C++,在阅读和测试了很多关于多重继承、虚拟继承/方法和菱形设计之后,我仍然有一些问题要理解它直到最后。
我在菱形设计模式中,B类和C类继承virtual public A,D类继承public B, public C:
A
/ \
B C
\ /
D
所有类都实现了一个私有变量std::string _message,我使用以下字符串对其进行初始化。
"class-name instance"
只有Class A 也实现了virtual public display(void) const 方法。
void display(void) const{
std::cout << this->_message << std::endl;
}
主要是:
D foo;
foo.display();
输出是:
A instance
但是,当我使用 Xcode 逐步“检查”元素调试时,我看到在 D 实例中,我可以正确地找到一个 B、一个 C 和 A 对象(只有一个由 B 和 C 共享)以及所有不同的 @ 987654331@ 正确分配。
我做错了什么?我需要覆盖 D 类中的display() 方法吗?但是如果是这样,如果我必须在派生类中重新实现相同的方法,那么多重继承的真正意义是什么?
【问题讨论】:
-
我听说过“钻石问题”、“可怕的钻石”和“死亡钻石”。我不认为我以前见过有人称它为“钻石设计模式”......
标签: c++ inheritance virtual diamond-problem