先简单介绍一下前提情况,有继承关系,才称为基类派生类
类B继承类A,A是基类,B是派生类
A类指针可以找到A类中的成员,B类指针可以找到B类中的成员,但是B类继承A类,B类中先有A类的成员,其次是自己的成员(前提A类没有涉及到虚)
通过解析代码来发现问题:
class A
{
public: int a;
};
class B : public A
{
public : int b;
};//B继承A,各有一个简单变量
问题1:基类指针强转为派生类会出什么问题
A *pa = new A;
pa->a = 2;
( ( B* ) pa)->b = 3;//A类中没有成员b,强转A类指针找b赋值-----会发生什么情况
编译器没有报错,内存上确实修改了
基类指针强转为派生类指向派生类成员,不会报错,但不合法,修改了他人的内存
问题2:派生类指针强转为基类指针会出什么问题
B *pb = new B;
( ( A* ) pb)->a = 2;//