//student.h和undergraduate.h略
//main.cpp
#include
#include "undergraduate.h"
using namespace std;
int main()
{
Undergraduate s1;//新建一个本科生对象
Undergraduate *s1p;//新建一个子类的对象指针
student s2;
student *s2p;//新建一个父类的对象指针
s1p=&s2;//这行程序出错了
s2p=&s1;
s1.set("Tom",21,178,60);
cout <
s2p->set("Jon",22,185,68);
cout <
s1p->setGPA(2.5);
s2p->setGPA(3.0); //这行程序出错了
return 0;
}
编译结果:
main.cpp(10) : error C2440: '=' : cannot convert from 'class student *' to 'class Undergraduate *'
main.cpp(17) : error C2039: 'setGPA' : is not a member of 'student'
根据编译结果,我们可以看到,在公有继承情况下父类的对象指针指向子类对象是允许的。如s2p学生指针指向本科生s1,因为本科生也是学生;子类的对象指针指向父类是禁止的。如s1p本科生指针不能指向学生s2,因为学生不一定是本科生。
此外,如果我们用父类的对象指针指向子类对象,那么这个指针无法使用子类中扩展出的成员。如s2p指针无法设置本科生的绩点,因为使用了学生指针,本科生就变成了学生的身份,学生身份不再有设置绩点的功能。
文章评论(0条评论)
登录后参与讨论