原创 C++散记-C++继承与对象指针

2013-10-10 09:32 691 13 13 分类: 软件与OS 文集: C语言

//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指针无法设置本科生的绩点,因为使用了学生指针,本科生就变成了学生的身份,学生身份不再有设置绩点的功能。

c++
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
13
关闭 站长推荐上一条 /3 下一条