父类的指针是可以指向子类类型的,父类对象也是可以引用子类对象的
通过这个可以让父类使用子类的方法,这个就是多态
这个和继承的内存构建有关
class A {...};
class B : public A {...};
如果生成一个B的对象b,是先构建A再构建B,b的内存空间结构就是A在上B在下
通过这个可以让父类使用子类的方法,这个就是多态
这个和继承的内存构建有关
class A {...};
class B : public A {...};
如果生成一个B的对象b,是先构建A再构建B,b的内存空间结构就是A在上B在下
所以A的指针是可以指向b的
(子类)的指针不能指向A(父类)的对象
子类的内存空间通常大于父类,如果子类的指针指向父类,就意味着它可以操作大于父类地址范围之外的空间,非常危险,所以被禁止。
如果子类指针指向夫类对象,那么如果访问子类特有的成员时会出问题。 |
class A {
public:
int a;
};
class B : public A {
public:
int b;
};
main()
{
B* obj = (B*)(new A);
obj->b = 0;//由于A类对象没有成员b,这样就会出错。
}