基类对象可以定义一个指针指向派生类,但是派生类不可以定义指针指向基类。

因为:基类如果定义的指针,指针中存放的数据都是基类中存在的,而派生类继承了这些subobject;但是如果派生类定义指针,这个指针所指向的对象不仅仅有基类的subobject,还有自己的一部分定义的数据,用这个指针去访问基类就可能会访问到一些根本不存在的成员。引用也是同理!

subobject就是基类中有的成员,派生类继承的部分。

基类和派生类之间的引用和指针关系

class concrete1 {
public:
	int val;
	char bit1;
};
class concrete2 :public concrete1 {
public:
 
	char bit2;
};

void main() {
	concrete1 base  ;
	concrete2 derived  ;

	concrete1 *base_ptr = &derived; //正确:允许定义基类指针指向派生类
	concrete2 *derived = &base;     //错误:派生类不能指向基类
}

 

相关文章: