实现多态,必须通过指针或者引用去操作对象,如果直接操作对象,它的类型就已经为编译器所知,也就无法实现多态了。

父类的指针是可以指向子类类型的,父类对象也是可以引用子类对象的
通过这个可以让父类使用子类的方法,这个就是多态

这个和继承的内存构建有关
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->= 0;//由于A类对象没有成员b,这样就会出错。
}



猜你喜欢

转载自blog.csdn.net/qq_35826851/article/details/80513216