C++ 基类指针指向派生类的问题

来源:百度知道 编辑:UC知道 时间:2024/07/16 04:21:36
基类指针可以指向私有继承的派生类对象么?
我写了一个Person类,然后
class Student:virtual private Person...
Person里有一个友元函数
friend bool Compare(CPerson &p1, CPerson &p2);
接下来
Student sss(2345,1989,3,5,1532,"XXX");
CPerson& p2=sss;(或者CPerson* p2=&sss;)

就会报错:rror C2243: 'type cast' : conversion from 'class CStudent *' to 'class CPerson &' exists, but is inaccessible

但是用Compare的时候,写成Compare(lwk,(CPerson)sss)就可以,但有如下警告:warning C4243: type cast conversion from 'class CStudent *' to 'class CPerson *' exists, but is inaccessible
请问这是怎么回事?
可是我写CPerson* p2=&sss;还是会报错……

CPerson* p2=&sss;是对的.
CPerson& p2=sss; 是错的.

CPerson* p2=&sss;是对的.
但CPerson& p2=sss; 是错的,因为CPerson& p2表示另外一个CPerson实例对象的别名(即同一个对象,只是名称改了下而已),而且必须在声明的时候初始化。如下声明就不会有错:
CPerson tt(); // 调用构造函数,构造一个实例
CPerson &p2 = tt; // p2和tt是同一个对象