C++类型兼容规则详情

 更新时间:2022年03月11日 09:54:36   作者:机器学习入坑者  
这篇文章主要介绍了C++类型兼容规则详情,共有继承时,任何需要父类对象的地方,都能使用子类对象“替代”,这就是类型兼容规则,下面一起来了解文章相关内容吧

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

实际上,子类是否含有父类的全部功能,取决于“继承方式”。在共有(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++类型兼容内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解C++ 内存对齐

    详解C++ 内存对齐

    这篇文章主要介绍了C++ 内存对齐的相关资料,帮助大家更好的理解和使用c++编程语言,感兴趣的朋友可以了解下
    2021-01-01
  • linux C 打印错误信息和标准输入输出详细介绍

    linux C 打印错误信息和标准输入输出详细介绍

    这篇文章主要介绍了linux C 打印错误信息和标准输入输出详细介绍的相关资料,需要的朋友可以参考下
    2016-12-12
  • Windows网络编程之winsock实现文件传输示例

    Windows网络编程之winsock实现文件传输示例

    这篇文章主要介绍了Windows网络编程之winsock实现文件传输示例,对于学习Windows网络程序设计来说具有很好的学习借鉴价值,需要的朋友可以参考下
    2014-08-08
  • C++线程中几类锁的详解

    C++线程中几类锁的详解

    这篇文章主要为大家介绍了C++线程中几类锁,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-11-11
  • C语言完整特性详情

    C语言完整特性详情

    这篇文章主要介绍了C# 10的相关资料方法,感兴趣的朋友可以参考下文
    2021-08-08
  • C++实现将数组中的值反转

    C++实现将数组中的值反转

    这里给大家分享的事一则C++实现将数组中的值反转的代码,取材自《C++程序设计》(梁勇著第三版367页),有需要的小伙伴可以参考下
    2016-05-05
  • 贪吃蛇游戏C++命令行版实例代码

    贪吃蛇游戏C++命令行版实例代码

    这篇文章主要介绍了贪吃蛇游戏C++命令行版实例代码,包含了常见的循环语句及相关游戏规则的判定方法,有助于更好的理解游戏设计原理,需要的朋友可以参考下
    2014-09-09
  • C++ 自定义控件的移植问题

    C++ 自定义控件的移植问题

    这篇文章主要介绍了C++ 自定义控件的移植问题,十分的简单实用,有需要的小伙伴可以参考下。
    2015-06-06
  • C++实现LeetCode(29.两数相除)

    C++实现LeetCode(29.两数相除)

    这篇文章主要介绍了C++实现LeetCode(29.两数相除),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C语言实现三子棋程序

    C语言实现三子棋程序

    这篇文章主要为大家详细介绍了C语言实现三子棋程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03

最新评论