Ниже приводится код:В C++ почему адрес изменяется при преобразовании указателя?
#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
отличается в зависимости от результата. Я думал, что это может быть связано с типом кастинга, но я не уверен, как это работает.
У кого-нибудь есть идеи об этом?
[Это] (http://www.phpcompiler.org/articles/virtualinheritance.html) помог мне многое в прошлом. –
Это вырожденный пример. – curiousguy