服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C++类型兼容规则详情

C++类型兼容规则详情

2022-10-17 13:25机器学习入坑者 C/C++

这篇文章主要介绍了C++类型兼容规则详情,共有继承时,任何需要父类对象的地方,都能使用子类对象“替代”,这就是类型兼容规则,下面一起来了解文章相关内容吧

在类的继承过程中,子类继承了父类除去构造函数和析构函数外的所有成员,那么父类的功能子类是不是都有呢?

实际上,子类是否含有父类的全部功能,取决于“继承方式”。在共有(public)继承的情况下,父类的public成员在子类中是public成员,父类的protected成员在子类中是protected成员。也就是说,此时,父类对外暴露的功能,子类都有。

因此,在共有继承时,任何需要父类对象的地方,都能使用子类对象“替代”,这就是类型兼容规则。

其中“替代”包含下面三种情况:

  • 子类对象隐含转换为父类对象;
  • 子类对象用于初始化父类引用;
  • 子类对象地址隐含转换为父类指针;

下面定义的三个函数,分别对应上述三种情况。其中Animal为父类,Duck为子类,Animal和Duck都定义了public类型的eat()函数:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 子类对象隐含转换为父类对象;
void situationOne(Animal animal) {
    animal.eat();
 
// 子类对象用于初始化父类引用
void situationTwo(Animal &r) {
    r.eat();
}
 
// 子类指针隐含转换为父类指针
void situationThree(Animal *p) {
    p->eat();
}

现在,可以使用子类对象作为函数参数传入到上述三个函数中:

?
1
2
3
4
5
Duck duck;
 
situationOne(duck);
situationTwo(duck);
situationThree(&duck);

注意:三个函数中通过父类调用的eat()函数永远是“父类成员函数eat()”而不是“子类成员函数eat()”。也就是说,通过“类型兼容规则”访问的永远是父类成员,而不是子类成员。

 到此这篇关于C++类型兼容规则详情的文章就介绍到这了,更多相关C++类型兼容内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://zhuanlan.zhihu.com/p/106706017

延伸 · 阅读

精彩推荐
  • C/C++C语言double和float 实例分析

    C语言double和float 实例分析

    本文主要介绍了C语言中的浮点数(float,double),并通过实例代码进行分析比较,希望能帮助学习相关知识的同学...

    C语言教程网10072021-04-09
  • C/C++十进制与BCD码转换的算法详解

    十进制与BCD码转换的算法详解

    BCD转换成十进制 BCD码是指用二进制来表示十进制数的编码,即用4位二进制来表示一位十进制数,因此4位二进制数表示最大的十进制数9(1001),只取十六个数中的...

    guanjianhe8042021-12-27
  • C/C++C语言实现链队列基本操作

    C语言实现链队列基本操作

    这篇文章主要为大家详细介绍了C语言实现链队列基本操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    似曾不相识9362022-01-11
  • C/C++C++简单实现的全排列算法示例

    C++简单实现的全排列算法示例

    这篇文章主要介绍了C++简单实现的全排列算法,结合实例形式分析了C++排序操作的实现技巧,需要的朋友可以参考下...

    jxgxy12102021-05-23
  • C/C++C语言数据结构与算法之图的遍历(二)

    C语言数据结构与算法之图的遍历(二)

    这篇文章主要是介绍了利用广度优先算法实现图的遍历,文中利用图文详细的介绍了实现步骤,对我们学习数据结构与算法有一定的帮助,需要的朋友可以...

    玄澈_7712022-07-09
  • C/C++c语言读取csv文件和c++读取csv文件示例分享

    c语言读取csv文件和c++读取csv文件示例分享

    这篇文章主要介绍了c语言读取csv文件和c++读取csv文件示例,需要的朋友可以参考下 ...

    C语言程序设计11782021-01-17
  • C/C++C语言动态规划之背包问题详解

    C语言动态规划之背包问题详解

    这篇文章主要介绍了C语言动态规划之背包问题详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    万里羊12482021-11-02
  • C/C++浅谈C++有理数的表达和计算

    浅谈C++有理数的表达和计算

    这篇文章主要为大家详细介绍了C++有理数的表达和计算,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    mou某谋4972022-02-17