父类指针强转为子类指针
经常看到一个函数的参数包含一个父类指针 例如void fun(Base*msg) 然后函数体内把msg强转为 子类的指针:Child*pchildMsg =(Child*)msg 然后对pchildMsg一通操作包括成员函数和成员变量。
问题是pchildMsg不是不能访问子类成员变量吗?
不能访问到pchildMsg的成员变量,是因为该成员变量没有被初始化,内存里面是垃圾数据,但是可以对其进行赋值操作。是不是这样?
class Base
{
public:
virtual void B_VF(){}
void D_f(){}
int m_i;
};
class Derive :public Base
{
public:
void B_VF(){}
int D_f(){
printf("Derive Derive and m_i = %d\n",m_i2);
return 0;
}
int m_i2;//m_i2放在string后面定义会如何?
std::string name;
};
int main()
{
Base*pB11 = new Base;
Derive *pd = (Derive*)pB11;//父类指针转成子类
printf("pd->m_i2=%d\n",pd->m_i2);//结果是乱码
pd->m_i2 = 100;
printf("pd->m_i2=%d\n",pd->m_i2);//结果是100
}
父类指针强转为子类指针后
原来总认为不能访问子类的成员变量,现在竟然可以赋值