a是基类,b是派生类
基类指针指向派生类对象,只能调用基类中的原始项,而不能调用派生类中的项
如在pa=b中可以看到的,这里的获取量为b的首地址,pa的长度由数据类型的内存所占大小确定
pb=a时将报告错误。 由于pb的长度已经超出了a的内存范围,多余的部分会使手指混乱,无法插入安全性缺失
当然pb-showA ()也报告错误。 是同样的理由。
因此,请参阅派生类指针不能指向基类对象
构造函数可以定义为虚函数吗?
不,虚函数必须用对应的vtable虚指针调用。 虚指针只能出现在对象已创建完毕的后中,但构造函数是在在对象创建时中调用的,因为在这两者之间不能同时满足请求,所以构造函数
如果用基类的指针指向对象,则在语法分析时会出现问题。 派生类的对象在语法分析时为先释放派生类,再释放基类,而用基类的指针指向派生类的对象时,在语法分析时为只析构基类,因此派生类的部分被释放
因此,要用基类指针指向派生类对象,请使用virtual析构函数来确定基类指针是否位于僵尸内存或称内存泄漏中(virtual角色:根据对象的实际类型) ,可以在手动释放内存delete时调用派生类的析构函数,并自动调用基类的析构函数。