C++的继承(两个类互相继承/单个类继承/真实案例分享/心得体会)

2024-02-15 04:52

本文主要是介绍C++的继承(两个类互相继承/单个类继承/真实案例分享/心得体会),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

最近复习到二叉树的遍历,递归依旧不是十分的清楚。

暂时不用递归遍历了,改用层序遍历二叉树,以下是层序遍历的详细原理:

从根节点开始,逐层访问二叉树的节点,同一层中的节点按照从左到右的顺序被访问。

  1. 创建一个队列(可以使用列表实现),并将根节点入队。
  2. 进入循环,直到队列为空:
    • 从队列中取出一个节点,将其值存入结果列表或进行其他操作。
    • 如果该节点有左子节点,则将左子节点入队。
    • 如果该节点有右子节点,则将右子节点入队。
  3. 返回结果列表,即为层序遍历的结果。

从上面过程中可以看到,创建一个队列(可以参考早些时候写的数据结构第十二天(队列)),用来存储二叉树相关节点的指针位置。在整个编码过程中,利用了前期写的队列,属于一个类,今天又创建一个新类(class BINARYTREE),。

那么,关键问题来了,在这两个类中,队列中存储节点的类型定义在新类(class BINARYTREE)中,而新类(class BINARYTREE)又要使用队列这个类所有的元素和函数。很明显,这两个类互为包含关系,继承就显得尤为重要!!!

先来看看继承相关语法:

  1. 基本语法:

    class 子类名 : 访问修饰符 父类名 { // 子类的成员和方法 };
    访问修饰符可以是public、protected或private,用来限定子类对父类中不同类型成员的访问权限。

  2. 继承类型:

    • public继承:父类中的public成员在子类中仍然是public的,protected成员在子类中仍然是protected的,但private成员在子类中是不可访问的。
    • protected继承:父类中的publicprotected成员在子类中都是protected的,private成员在子类中是不可访问的。
    • private继承:父类中的所有成员在子类中都是private的。
  3. 访问基类成员:

    • 子类可以直接访问父类的publicprotected成员。
    • 子类不能直接访问父类的private成员,但可以通过父类的publicprotected成员函数间接访问。
  4. 继承构造函数:

    • 在C++11及更高版本中,可以使用using关键字来继承父类的构造函数。
    • 也可以在子类中定义自己的构造函数,并在构造函数的初始化列表中调用父类的构造函数。
  5. 虚继承(Virtual Inheritance):

    • 虚继承用于解决多继承中的菱形继承问题,即一个子类通过不同路径继承同一个父类,导致父类的成员在子类中存在多份拷贝。
    • 使用虚继承可以确保在菱形继承中共享同一个父类对象,避免重复拷贝。

两个类双重继承,其实和单个类继承是差不多的,必须将其中一个 类最先声明一下,否则编译器会出现未声明的类型,从而报错。

剩下一个类的继承同上 

写在最后:

书到用时方恨少。今天真的不恨少,感谢曾经的那个自己,还残存些许记忆碎片。

看语法真的有点点痛苦,当初不知道这个语法的作用,可以干嘛用!当完美解决今天的问题,真想像喵一样长喵一声。

希望大家在最后:书到用时不恨少!!! 

这篇关于C++的继承(两个类互相继承/单个类继承/真实案例分享/心得体会)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/710472

相关文章

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

Java 正则表达式的使用实战案例

《Java正则表达式的使用实战案例》本文详细介绍了Java正则表达式的使用方法,涵盖语法细节、核心类方法、高级特性及实战案例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、正则表达式语法详解1. 基础字符匹配2. 字符类([]定义)3. 量词(控制匹配次数)4. 边

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数