发布时间:2024-01-08 16:30
在类的继承过程中,子类继承了父类除去构造函数和析构函数外的所有成员,那么父类的功能子类是不是都有呢?
实际上,子类是否含有父类的全部功能,取决于“继承方式”。在共有(public)继承的情况下,父类的public
成员在子类中是public
成员,父类的protected
成员在子类中是protected
成员。也就是说,此时,父类对外暴露的功能,子类都有。
因此,在共有继承时,任何需要父类对象的地方,都能使用子类对象“替代”,这就是类型兼容规则。
其中“替代”包含下面三种情况:
下面定义的三个函数,分别对应上述三种情况。其中Animal
为父类,Duck为子类,Animal和Duck都定义了public
类型的eat()
函数:
// 子类对象隐含转换为父类对象; void situationOne(Animal animal) { animal.eat(); } // 子类对象用于初始化父类引用 void situationTwo(Animal &r) { r.eat(); } // 子类指针隐含转换为父类指针 void situationThree(Animal *p) { p->eat(); }
现在,可以使用子类对象作为函数参数传入到上述三个函数中:
Duck duck; situationOne(duck); situationTwo(duck); situationThree(&duck);
注意:三个函数中通过父类调用的eat()函数永远是“父类成员函数eat()”而不是“子类成员函数eat()”。也就是说,通过“类型兼容规则”访问的永远是父类成员,而不是子类成员。
到此这篇关于C++类型兼容规则详情的文章就介绍到这了,更多相关C++类型兼容内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
TypeScript 中令人迷惑的对象类型:Object、{} 和 object
css_盒子模型:块级盒子/内联盒子_显示类型/盒模型border可见性
ubuntu c++ 实现自动回车键功能_从X86到ARM,实现C和C++语言90% Code自动迁移
SQL Server一个字符串拆分多行显示或者多行数据合并成一个字符串
Pandas向本地Excel已存在的工作表追加写入DataFrame
自动写诗APP项目、基于python+Android实现(技术:LSTM+Fasttext分类+word2vec+Flask+mysql)第一节
八大误区,逐个击破(终篇):云难以扩展、定制性差,还会让管理员失去控制权?
电脑计算机无法安3.5,Win10 net3.5安装不了怎么办?-解决win10下net3.5无法安装的方法 - 河东软件园...