斗破C++编程入门系列之三十一:继承与派生:派生类对基类成员的访问控制之保护继承与私有继承(一星斗师)

斗破C++目录:

斗破C++编程入门系列之前言(斗之气三段)
斗破C++编程入门系列之二:Qt的使用介绍(斗之气三段)
斗破C++编程入门系列之三:数据结构(斗之气三段)
斗破C++编程入门系列之四:运算符和表达式(斗之气五段)
斗破C++编程入门系列之五:算法的基本控制结构之选择结构(斗之气八段)
斗破C++编程入门系列之六:算法的基本控制结构之循环结构(斗之气八段)
斗破C++编程入门系列之七:自定义数据类型(斗之气八段)
斗破C++编程入门系列之八:函数的定义与调用(斗之气八段)
斗破C++编程入门系列之九:函数重载与模板函数(斗之气九段)
斗破C++编程入门系列之十:类与对象:类的声明、成员的访问控制和对象(二星斗者)
斗破C++编程入门系列之十一:类与对象:构造函数和析构函数(四星斗者)
斗破C++编程入门系列之十二:类与对象:类的组合(五星斗者)
斗破C++编程入门系列之十三:类与对象:类模板(六星斗者)
斗破C++编程入门系列之十四:C++程序设计必知:作用域和可见性(六星斗者)
斗破C++编程入门系列之十五:C++程序设计必知:变量生存期(六星斗者)
斗破C++编程入门系列之十六:C++程序设计必知:类的静态成员(九星斗者)彩蛋)
斗破C++编程入门系列之十七:C++程序设计必知:友元(九星斗者)彩蛋)
斗破C++编程入门系列之十八:C++程序设计必知:常引用、常对象(九星斗者)彩蛋)
斗破C++编程入门系列之十九:C++程序设计必知:多文件结构和编译预处理命令(九星斗者)
斗破C++编程入门系列之二十:数组、指针和字符串:数组的声明和使用(一星斗师)
斗破C++编程入门系列之二十一:数组、指针和字符串:数组的存储与初始化、对象数组、数组作为函数参数(一星斗师)
斗破C++编程入门系列之二十二:数组、指针和字符串:指针变量的声明、地址相关运算–“*”和“&”(一星斗师)
斗破C++编程入门系列之二十三:数组、指针和字符串:指针的赋值和指针运算(一星斗师)
斗破C++编程入门系列之二十四:数组、指针和字符串:指向数组元素的指针和指针数组(一星斗师)
斗破C++编程入门系列之二十五:数组、指针和字符串:指针用作函数参数、指针型函数和函数指针(一星斗师)
斗破C++编程入门系列之二十六:数组、指针和字符串:动态内存分配和释放(一星斗师)
斗破C++编程入门系列之二十七:数组、指针和字符串:string类(一星斗师)
斗破C++编程入门系列之二十八:继承与派生:概念介绍与派生类的声明(一星斗师)
斗破C++编程入门系列之二十九:继承与派生:派生类从基类继承的过程(一星斗师)
斗破C++编程入门系列之三十:继承与派生:派生类对基类成员的访问控制之公有继承(一星斗师)
斗破C++编程入门系列之三十一:继承与派生:派生类对基类成员的访问控制之保护继承与私有继承(一星斗师)

鸡啄米C++

记住首页不迷路:
http://www.jizhuomi.com/software/129.html

斗破观看顺序:

https://v.haohuitao.cc/yhplay/336-1-2.html
第一季☞第二季前2集☞特别篇1☞第二季3~12集☞特别篇2沙之澜歌☞第三季☞第四季☞三年之约☞缘起☞年番
斗气大陆等级:
斗气有十一个阶别,斗之气,斗者,斗师,大斗师,斗灵,斗王,斗皇,斗宗,斗尊,斗圣,斗帝。
斗气大陆上很久没有出现过斗帝了。

一、夺回异火

美杜莎女王的行为引发了天地异像,为了族人的未来,她义无反顾的与异火进行着最后的抗争,然而在灵魂体与天雷触碰的一瞬间,她还是失败了,与天雷一并化做漫天的鳞羽。
正当萧炎准备用青莲台收取青莲地心火之时,一只可爱的小动物突然出现,原来她是美杜莎女王的伴生灵魂–紫幽炎蛇,是只六阶魔兽,没想到这所谓的进化,便是进化灵魂,用灵魂之力凝聚成真正的身体,若机缘足够,激发体内的远古巨兽血脉,就能进化为堪比斗宗强者的七彩吞天蟒。
神殿外,墨巴斯等人与丹王形成对峙之势,然而只有四人的蛇族还未曾有对付斗皇的能力,他们在等炎刺及南蛇等人。
殿内萧炎收下了紫幽灵蛇,同时收取了青莲地心火,看似顺利的局面是否真的如此,后续如何再来分解。

二、C++:派生类对基类成员的访问控制之保护继承与私有继承(一星斗师)

与公有继承不同,我们来看看保护继承及私有继承。

  • 在保护继承方式中,基类的公有成员和保护成员被派生类继承后变成派生类的保护成员,而基类的私有成员在派生类中不能访问。
  • 在私有继承方式中,基类的公有成员和保护成员被派生类继承后变成派生类的私有成员,而基类的私有成员在派生类中不能访问。

我们尝试将public继承改为protected继承,看看原先public属性的函数是否变成的protected。我们为远古灵蛇新增一个公有函数。

#ifndef ANCIENTSNAKE_H
#define ANCIENTSNAKE_H

#include <QDebug>


class AncientSnake
{
public:
    AncientSnake();

public:

    void use_ancient_fighting_skill(){
        qDebug() << "使用蛇族远古斗技";
    }

    void activate_bloodline(){
        qDebug() << "激活血脉";
    }

protected:
    void swallow_strange_fire(){
        qDebug() << "吞噬异火";
    }

private:
    void use_ancient_unique_skill(){
        qDebug() << "远古灵蛇独有的秘技";
    }

};

#endif // ANCIENTSNAKE_H

然后使用protected的方式继承,代码如下:

#ifndef QUEEN_H
#define QUEEN_H

#include "ancientsnake.h"
#include "person.h"

//美杜莎女王继承了远古斗技
//美杜莎女王继承了人类的形态
class Queen
 : protected AncientSnake
 , public Person<double>
{
public:
    Queen();

public:
    //定义与父类相同的成员函数
    void use_ancient_fighting_skill(){
        qDebug() << "使用蛇族远古斗技 升级版本";
    }

public:
    //定义与父类相同的成员变量
    QString name;

public:
    //定义自己的函数
    void use_secret_skill(){
       qDebug() << "使用蛇族秘术";

       //调用远古灵蛇的protected属性函数
       swallow_strange_fire();
    }

};

#endif // QUEEN_H

大家可以试试在main函数中使用meidusha能否成功调activate_bloodline。答案是不能的,因为是protected继承,原先public的属性变为了proteced,只能在类内部使用。
同样我们如果使用私有继承,那之前public及protected属性,在继承之后也都会变成private,只能在类内部调用,外部不可调用。可以修改代码,看看原先的程序报什么错误。

#ifndef QUEEN_H
#define QUEEN_H

#include "ancientsnake.h"
#include "person.h"

//美杜莎女王继承了远古斗技
//美杜莎女王继承了人类的形态
class Queen
 : private AncientSnake
 , public Person<double>
{
public:
    Queen();

public:
    //定义与父类相同的成员函数
    void use_ancient_fighting_skill(){
        qDebug() << "使用蛇族远古斗技 升级版本";
    }

public:
    //定义与父类相同的成员变量
    QString name;

public:
    //定义自己的函数
    void use_secret_skill(){
       qDebug() << "使用蛇族秘术";

       //调用远古灵蛇的protected属性函数
       swallow_strange_fire();
    }

};

#endif // QUEEN_H

其实我们很少会使用protected及private继承,因为继承的目的之一是复用代码,使用这两种继承方式,相当于断了后面想要继承的类的复用。

三、英语

先看几个单词:

  • protected 保护的
  • private 私有的
  • swallow 吞咽
  • strange 奇异的

再看几个句子:

  • For(为了) the future(未来) of her (她的)people(族人), she (她)fought(战斗) against(对抗) the flames(异火) without hesitation(没有任何犹豫) in(在) the final(最后) battle(战争).
  • 为了族人的未来,她义无反顾的与异火进行着最后的抗争。

For 引导了原因状语从句。
without hesitation 义无反顾

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/879104.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TortoiseSVN图标不显示的解决

解决办法一:修改svn软件的图标设置 1、选中一个文件夹或在桌面空白处,右击进入svn的setting 2、进入setting->Icon Overlays,Status cache选择Default或shell,然后点击应用 3、查看文件,图标可以正常显示 解决办法二:修改注册表的文件夹顺序 问题现象: 1、svn一直…

linux驱动开发-arm汇编基础

目录 写在前面 1、Cortex-A7 处理器有 9 种处理模式 2、Cortex-A 寄存器组 通用寄存器 1、汇编语法 2、Cortex-A7 常用汇编指令 2.1 处理器内部数据传输指令 2.1.1 传输数据操作类型 1、MOV指令 2、MRS指令 3、MSR指令 2.2、存储器访问指令 2.2.1 LDR指令 2.2.2 …

行车记录仪内存卡无法读取:问题解析与高效数据恢复策略

在智能出行的时代&#xff0c;行车记录仪作为车辆安全的守护者&#xff0c;其重要性不言而喻。然而&#xff0c;当行车记录仪的内存卡遭遇无法读取的困境时&#xff0c;不仅会影响行车记录仪的正常工作&#xff0c;更可能导致关键证据和美好回忆的丢失。本文将深入探讨行车记录…

基础 Web 开发

1. 构建项目&#xff1a; 2.添加依赖 <dependencies> <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupI…

Vue3 : ref 与 reactive

目录 一.ref 二.reactive 三.ref与reactive的区别 四.总结 一.ref 在 Vue 3 中&#xff0c;ref 是一个用于创建可读写且支持数据跟踪的响应式引用对象。它主要用于在组件内部创建响应式数据&#xff0c;这些数据可以是基本类型&#xff08;如 number、string、boolean&…

【卷起来】VUE3.0教程-09-整合Element-plus

最后一次课了&#xff0c;给个关注和赞呗 &#x1f332; 简介 Element Plus 是一个基于 Vue 3 的高质量 UI 组件库。它包含了丰富的组件和扩展功能&#xff0c;例如表格、表单、按钮、导航、通知等&#xff0c;让开发者能够快速构建高质量的 Web 应用。Element Plus 的设计理念…

在 Mac 上安装虚拟机怎么样,安装虚拟机与直接安装 Windows 系统有区别吗?

随着跨系统操作的不断发展&#xff0c;虚拟机技术在生产力领域扮演着越来越重要的角色。Mac作为一款主流的操作系统&#xff0c;也有着运行虚拟机的能力。接下来给大家介绍Mac装虚拟机好不好&#xff0c;Mac装虚拟机和装Windows系统一样吗的具体内容。 Mac装虚拟机好不好 Mac…

Flip动画的实现示例demo

Flip动画的实现示例demo 文章说明核心代码效果展示Flip动画工具类的封装 文章说明 文章主要为了学习flip动画的实现思路&#xff0c;并且采用此示例效果来理解该实现思路的含义 参考渡一前端袁老师的讲解视频 核心代码 采用简单的y轴变化的动画效果为示例 <!DOCTYPE html>…

Spring Boot 3项目使用Swagger3教程

Spring Boot 3项目使用Swagger3教程 Swagger&#xff1a;自动生成接口文档 添加依赖(pom.xml) <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.1…

基于双向RRT算法的三维空间最优路线规划matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 单向RRT算法 4.2 双向RRT算法 5.完整程序 1.程序功能描述 基于双向RRT&#xff08;Randomly Exploring Random Trees, 随机探索随机树&#xff09;算法的三维空间最优路径规划是一种解…

Linux 文件与目录操作命令详解

文章目录 前言创建文件1. touch2. vim 文件内容显示3. cat4. more5. less6. head7. tail 文件&#xff08;目录&#xff09;复制、删除和移动8. cp9. rm10. mv 压缩文件与解压缩11. gzip12. zip 和 unzip 创建目录13. mkdir 删除目录14. rmdir 改变工作目录15. cd16. pwd 显示目…

碰撞检测 | 图解线段几何与线段相交检测原理(附ROS C++可视化)

目录 0 专栏介绍1 线段与线段相交检测2 线段与圆相交检测3 线段与矩形相交检测4 算法仿真与可视化4.1 核心算法4.2 仿真实验 0 专栏介绍 &#x1f525;课设、毕设、创新竞赛必备&#xff01;&#x1f525;本专栏涉及更高阶的运动规划算法轨迹优化实战&#xff0c;包括&#xf…

吸浮毛宠物空气净化器推荐,希喂、小米、有哈宠物空气净化器测评

养猫需谨慎&#xff0c;不然就要做猫奴一辈子啦&#xff01;上次堂妹来我家住几天&#xff0c;刚开始还担心和猫处不来&#xff0c;不敢去摸它&#xff0c;走的时候已经约好下次来看它的时间&#xff0c;笑死我了。毕竟猫咪这么可爱&#xff0c;很少有人可以抵抗它的魅力。 这不…

想要一劳永逸地消除 AI 幻觉,该如何做?

作者:老余捞鱼 原创不易,转载请标明出处及原作者。 写在前面的话: 尽管 LLMs 基于存储、检索和生成(RAG)的方法在某些情况下能够提供准确的回答,但在面对名词短语碰撞时,RAG方法可能会因为语义相似性而失效。为了解决这个问题,本文提出了命名实体过滤(NEF)作…

SpringBoot启动成功,但端口启动失败

目录 一、问题展示 二、问题分析 2.1.端口与Tomcat的关系 2.2.问题分析 三、SpringBoot常见知识记录 3.1.SpringBoot项目常用jar包 3.1.1.必要性jar包 3.1.2.选择性jar包 3.2.标签的作用及取值 3.2.1.compile&#xff08;编译范围&#xff09; 3.2.2.provided…

Maya---机械模型制作

材质效果&#xff08;4&#xff09;_哔哩哔哩_bilibili 三角面 四边面 多边面 *游戏允许出现三角面和四边面 游戏中一般是低模&#xff08;几千个面&#xff09; 动漫及影视是高模 机械由单独零件组合而成&#xff0c;需独立制作 低面模型到高面模型 卡线是为了将模型保…

[JavaEE] 网络初识(网络通信 及 TCP / UDP / IP 封装分用 )

Author&#xff1a;MTingle major:人工智能 --------------------------------------- Build your hopes like a tower! 文章目录 目录 文章目录 一. 网络通信基础 1. 局域网LAN 2. ⼴域⽹WAN 3. IP地址 4. 端口号 二.协议 1. 五元组 2. 协议分层 协议分层的优点: 3. OSI七层协…

mongoDB-1

文章目录 一、疑似坑1.11.2 mongo ops manager1.3 mongo features视图固定大小集合&#xff08;有点类似ringbuffer数据结构&#xff0c;capped collections&#xff09;(聚簇集合)clustered collection(类比到Mysql的聚簇索引)聚合管道 aggregation pipelineWiredTiger (默认存…

STM32中的计时与延时

前言 在裸机开发中,延时作为一种规定循环周期的方式经常被使用,其中尤以HAL库官方提供的HAL_Delay为甚。刚入门的小白可能会觉得既然有官方提供的延时函数,而且精度也还挺好,为什么不用呢?实际上HAL_Delay中有不少坑,而这些也只是HAL库中无数坑的其中一些。想从坑里跳出来…

【3D打印】使用simplify 3D切片更改Gcode手动断电续打、掉电、未打完继续打印、补救

一、问题描述 有些时候会遇到3D打印机没料但机器还在继续打、掉电重启后未正常恢复打印、挤出机端没有料但断料检测未触发等情况。我们又不想打印放弃&#xff0c;但又想继续之前的进度打印。 这时候我们需要更改3D打印文件的Gcode参数来进行继续打印。 至于什么是Gcode&…