【C++学习笔记】赋值兼容规则

定义及其理解:

所谓赋值兼容规则,是指在需要基类对象的任何地方都可以使用公有派生类的对象来替代。这样,公有派生类实际上就具备了基类的所有特性,凡基类能解决的问题,公有派生类也能解决。

这段话不太好理解,说白了就是:如果一个类是从一个基类公有继承过来的,那么这个派生类就可以替代基类(但基类不能替代派生类)。

再直白一点是:小灵通可以打电话,小灵通派生出功能更多的智能机类,如果我们只要求打电话的智能,那智能机就能代替小灵通,但小灵通却不能代替智能机。

抽象看:
毕竟如果是公有继承的话,其派生类的类内数据广度肯定是大于基类,而public继承的特性又让在基类公有部分的数据权限在继承后能保持一致,所以公有派生类代替基类实际上是用一个有更高级的功能的类去代替低等级类。

可用操作:

(1)可以用派生类对象给基类对象赋值(只能单向)。
例:

Base b:
Derived d;
b=d;

这样赋值的效果是,对于对象b中所有数据成员都将具有d中对应成员的值。

(2)可以用派生类对象来初始化基类的引用

Derived d;
Base &br = d;

(3)可以把派生类对象的地址赋值给指向基类的指针。

Derived d;
Base*bptr = &d;
注意

(i)声明为指向基类对象的指针可以指向它的公有派生的对象,但不允许指向它的私有派生的对象。(指公不指私)
(ii)允许将一个声明为指向基类的指针指向其公有派生类的对象,但是不能将一个声明为指向派生类对象的指针指向其基类的一个对象。(基类可以指派生,派生不可指基类)
(iii)声明为指向基类对象的指针,当其指向公有派生类对象时,**只有用它来直接访问派生类中从基类继承来的成员,**而不能直接访问公有派生类定义的成员。
(iv)可以把指向派生类对象的指针赋值给指向基类对象的指针

Derived*dptr;
Base*bptr=dptr;

整理自浙大课程PPT,部分理解为原创。

猜你喜欢

转载自blog.csdn.net/weixin_43819313/article/details/84640728
今日推荐