1. 派生类指针 —> 基类指针
派生类指针转化为基类
这一部分参考类型兼容规则
2. 基类指针 —> 派生类指针
先来看一段代码,里面到底有什么问题:
#include<iostream>
#include <iomanip>
using namespace std;
struct Base1{
int x;
};
struct Base2{
float y;
};
struct Derived: Base1, Base2{
};
int main()
{
Derived *pd = new Derived;
pd->x = 1;
pd->y = 2.0f;
void *pv = pd;
Base2 *pb = static_cast<Base2*>(pv);
pb = static_cast<Base2*>(pd);
cout<<pd->y<<"/"<<pb->y<<endl;
delete pb;
return 0;
}
问:上述代码中的打印结果 pd->y 以及pb->y的值是什么?
答案:(在cfree5上得出)
不应该是 2/2 吗
问题出现在哪里?下面是更改后和注释过后的代码: