基类与派生类的转换

前提:公用派生类完整地继承了基类的功能,使基类与派生类对象之间有赋值兼容关系。(赋值不考虑成员函数)

对于:

class A{}

class B{}

A a1,*pa1;

B b1,*pb1;

合法访问:a1=b1;

A &aa=b1;//aa引用的是b1中继承自基类的成员

pa1=&b1;//pa1能访问到的也只能是b1中继承自基类的成员

非法访问:

b1=a1;//派生类b1中自己的数据成员在a1中是没有的,因此无法赋值

B &bb=a1;

pb1=&a1;

基类对象不能赋值给派生类对象。




(1)派生类对象向基类对象赋值


在赋值时,要舍弃派生类自己的成员;

赋值只是对数据成员赋值,对成员函数不存在赋值问题;

赋值后不能企图通过对象a1去访问派生类对象b1中自己的成员。

(2)派生类对象替代基类对象

派生类对象替代基类对象可以向基类对象的引用进行赋值或初始化。



(3)子类对象当实参传递给基类形参(传值/传地址/引用)

在函数中只能访问派生类中继承自基类成员的值。

函数的参数是基类对象或者基类对象的引用或者是指向基类对象的指针,相应的实参可以用派生类的对象(如果形参为指针,则实参为派生类对象的地址)。


(4)指向基类对象的指针变量也可以指向派生类对象


对于上面的程序来说,pt->display()执行的并不是grad1也就是Graduate类中的display函数,否则的话就还会输出pay。因此它执行的是派生类中继承自基类中的display函数。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值