以下是代码示例:
输出结果为:
#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
的值是不同的。我认为这可能与类型转换有关,但我不确定它是如何工作的。
有人对此有想法吗?