【发布时间】:2016-04-17 02:57:43
【问题描述】:
以下是代码:
#include <iostream>
using namespace std;
class B1 {
public:
virtual void f1() {
cout << "B1\n";
}
};
class B2 {
public:
virtual void f1() {
cout << "B2\n";
}
};
class D : public B1, public B2 {
public:
void f1() {
cout << "OK\n" ;
}
};
int main () {
D dd;
B1 *b1d = ⅆ
B2 *b2d = ⅆ
D *ddd = ⅆ
cout << b1d << endl;
cout << b2d << endl;
cout << ddd << endl;
b1d -> f1();
b2d -> f1();
ddd -> f1();
}
输出是:
0x79ffdf842ee0
0x79ffdf842ee8
0x79ffdf842ee0
OK
OK
OK
这看起来让我很困惑,因为我预计 b1d 和 b2d 将与它们都指向 dd 相同。但是,b1d 和b2d 的值根据结果不同。我认为这可能与类型转换有关,但我不确定它是如何工作的。
有人对此有想法吗?
【问题讨论】:
-
This 过去帮了我很多忙。
-
这是一个退化的例子。
标签: c++ oop pointers multiple-inheritance virtual-functions