C++:继承-继承权限

在C++中,类的权限分为公有、私有和保护三种。这些权限控制了类的成员(数据成员和成员函数)对外部代码的可见性和访问性。

  1. 公有(public)权限

    在公有权限下声明的成员可以被类的外部代码直接访问;公有成员在类的派生类中仍然可以被访问。
  2. 私有(private)权限

    在私有权限下声明的成员对于外部代码是不可见的;只有类的成员函数可以访问私有成员;私有成员不能被派生类访问,即使是公有继承也是如此。
  3. 保护(protected)权限

    在保护权限下声明的成员对于外部代码是不可见的;类的派生类可以访问保护成员;保护成员在派生类中仍然是保护的,对于外部代码是不可见的。

在 C++类的继承中,也对应着三种继承权限,分别是公有继承(public inheritance)、保护继承(protected inheritance)和私有继承(private inheritance)。这些权限决定了派生类如何继承基类的成员以及外部访问的方式。

  1. 公有继承(public inheritance)

    在公有继承中,基类的公有成员在派生类中仍然是公有的,基类的保护成员在派生类中仍然是保护的,基类的私有成员不会被派生类继承。

    派生类对象可以直接访问基类的公有成员,但不能访问基类的私有成员。

    外部代码可以访问派生类对象中的公有成员,但不能访问保护成员或私有成员。

    //基类
    class Animal
    {
    public:Animal();~Animal();
    ​int m_nAge;
    ​
    private:int testA;
    protected:int testB;
    };
    ​
    //派生类(公有继承)
    class Cat : public Animal
    {
    public:Cat();~Cat();}

    上述代码中的派生类就属于通过对基类进行公有继承得到,此时Animal类中的公有成员被继承至Cat类中也是公有成员,Animal类的保护成员在Cat类中仍然是保护的,但是Animal类的私有成员不会被Cat类继承。如此时我在Cat类中对基类中的私有成员TestA和保护成员TestB进行设置/访问,那么此时可以发现私有成员TestA无法访问,保护成员TestB可以正常访问;是因为私有成员并没有被继承。

    总结:

    公有继承:基类                  派生类公有成员     --->       公有成员保护成员     --->       保护成员私有成员                无法继承
    
  2. 保护继承(protected inheritance)

    在保护继承中,基类的公有和保护成员在派生类中都变成了保护成员,类的私有成员依然不会被派生类继承。

    派生类对象可以访问基类的公有和保护成员,但外部代码无法直接访问派生类对象的成员。

    外部代码无法访问派生类对象中的任何成员。

    保护继承:

    //基类
    class Animal
    {
    public:Animal();~Animal();
    ​int m_nAge;
    ​
    private:int testA;
    ​
    protected:int testB;
    };
    ​
    //派生类(保护继承)
    class Cat : protected Animal
    {
    public:Cat();~Cat();
    }

    派生类 Cat:使用保护继承方式继承自 Animal 类,意味着基类 Animal 的公有和保护成员在 Cat 类中都变成了保护的。外部无法直接访问 Cat 对象的成员。Cat 类中可以访问继承自 Animal 的公有和保护成员。

总结:

保护继承基类                  派生类公有成员     ---->      保护成员保护成员     ---->      保护成员私有成员                无法继承

3.私有继承(private inheritance)

在私有继承中,基类的公有和保护成员在派生类中都变成了私有的,类的私有成员依然不会被派生类继承。

派生类对象可以访问基类的公有和保护成员,但外部代码无法直接访问派生类对象的成员。

外部代码无法访问派生类对象中的任何成员。

私有继承:

//基类
class Animal
{
public:Animal();~Animal();
​int m_nAge;private:int testA;
​
protected:int testB;
};
​
//派生类
class Cat : private Animal
{
public:Cat();~Cat();
}

派生类 Cat:采用私有继承方式继承自 Animal 类,这意味着基类 Animal 的公有和保护成员在 Cat 类中都变成了私有的。Cat 类中可以访问继承自 Animal 的公有和保护成员,但外部代码无法访问。

总结:

      私有继承

        基类                  派生类公有成员     --->      私有成员保护成员     --->      私有成员私有成员               无法继承

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第十篇:深入文件夹:Python中的文件管理和自动化技术

深入文件夹:Python中的文件管理和自动化技术 1 文件系统基础操作 在今天的技术博客中,我们将深入探讨Python中的文件系统基础操作。文件系统对于任何操作系统都是不可或缺的组成部分,它管理着数据的存储、检索以及维护。Python通过其标准库中…

【Linux 进程】 自定义shell

目录 关于shell 1.打印提示符&&获取用户命令字符​编辑 2.分割字符串 3.检查是否为内建命令 cd命令 export命令 echo命令 1.输出最后一个执行的命令的状态退出码(返回码) 2.输出指定环境变量 4.执行外部命令 关于shell Shell 是计算机操…

QGraphicsView实现简易地图8『缓存视口周边瓦片』

前文链接:QGraphicsView实现简易地图7『异步加载-多瓦片-无底图』 前7篇的地图加载,都采用最少瓦片数量的算法,即用最少数量的瓦片覆盖视口,以获得最快的加载速度。但是这样会带来一个问题,那就是每当移动地图时&#…

代理ip的用途及是否可以降低延迟

代理IP具有广泛的应用领域,包括但不限于以下方面: 1. 匿名浏览和隐私保护 通过使用代理IP,您可以隐藏自己的真实IP地址,从而在网络上保持匿名。这对于维护个人隐私和保护个人身份非常重要。 2. 访问限制网站 代理IP可以绕过地理位…

免费开源,无需 GPU,本地化部署大语言模型的对话系统

免费开源,无需 GPU,本地化部署大语言模型的对话系统 分类 编程技术 项目名: FreeAskInternet -- 本地化部署大语言模型的对话系统 Github 开源地址: https://github.com/nashsu/FreeAskInternet FreeAskInternet 是一个免费开源的工具&am…

【小菜鸟之---Linux网络配置】

文章目录 1【子网和网关】2【网络连接模式】3【ifconfig-查看网络接口信息】3.1 查询网络接口信息3.2 ifconfig——设置网络接口参数【**设置网络参数的方式**】【**临时设置**】**【永久设置】** 4【hostname-主机信息】4.1 查看主机名4.2 主机名修改4.3 查看本机ip 5【route-…

Kotlin: Expecting a ‘>‘

数组值为任意类型&#xff0c;声明报错: Kotlin: Expecting a > var anyArr1: Array<Any?> arrayOf("a", "b", "c", true, 34)原因是&#xff1a; // var anyArr1: Array<Any?> arrayOf("a", "b", "c…

发电厂智能巡检机器人:让发电厂更安全、更高效

在发电厂的众多应用场景中&#xff0c;升压站、化学车间、空冷塔、输煤皮带、综合管廊等&#xff0c;一直以来都是人工巡检的主战场。然而&#xff0c;这些场所环境极为复杂&#xff0c;人工巡检面临着诸多难题&#xff0c;强度大、频率低、间隔长等问题突出。这使得设备在运行…

c++多线程基础

简介 c多线程基础需要掌握这三个标准库&#xff1a;std::thread, std::mutex, and std::async。 1. Hello, world #include <iostream> #include <thread>void hello() { std::cout << "Hello Concurrent World!\n"; }int main() {std::thread…

[NSSCTF]prize_p2

题目 打开是一段js代码 // 导入所需的模块 const { randomBytes } require(crypto); // 导入 crypto 模块&#xff0c;用于生成随机字节 const express require(express); // 导入 Express.js 模块&#xff0c;用于构建 Web 应用程序 const fs require(fs); // 导入文件系…

论文笔记:(Security 22) 关于“二进制函数相似性检测”的调研

个人博客链接 注&#xff1a;部分内容参考自GPT生成的内容 [Security 22] 关于”二进制函数相似性检测“的调研&#xff08;个人阅读笔记&#xff09; 论文&#xff1a;《How Machine Learning Is Solving the Binary Function Similarity Problem》&#xff08;Usenix Securi…

Golang中实现调用Windows API向指定目标发送ARP请求

简介 Go库中很多实现的arp都是支持osx/linux/bsd之类的&#xff0c; 但几乎没有支持windows的&#xff0c; 也试了一些方式&#xff0c; 目前还是选用调用windows的API&#xff0c; 记录一下这一次windows的API的调用经验。 实现 代码 package main/* #cgo CFLAGS: -I. #cgo …

Reactor模型详解

目录 1.概述 2.Single Reactor 3.muduo库的Multiple Reactors模型如下 1.概述 维基百科对Reactor模型的解释 The reactor design pattern is an event handling pattern for handling service requests delivered concurrently to a service handler by one or more inputs.…

自定义redisTemplate实现自定义序列化

由于我们使用springboot集成的redis工具的时候&#xff0c;redisTemplate内部是采用了jdk默认的序列化工具来对我们存储的数据进行序列化的&#xff0c;这会导致我们在redis中存储的序列化后的数据和我们原来的数据格式在查看的时候会有偏差&#xff0c;所以我们需要自定义redi…

「PHP系列」PHP7 新特性:use语句、intdiv() 函数、Session 选项

文章目录 一、use语句1. 导入类2. 导入函数3. 导入多个类或函数4. 为类或函数提供别名 二、intdiv() 函数三、Session 选项1. 设置会话保存路径2. 自定义会话处理程序3. 设置会话名 四、相关链接 一、use语句 在 PHP 7 中&#xff0c;use 语句通常与命名空间&#xff08;names…

OpenCV如何模板匹配(59)

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV如何实现背投(58) 下一篇 &#xff1a;OpenCV在图像中寻找轮廓(60) 目标 在本教程中&#xff0c;您将学习如何&#xff1a; 使用 OpenCV 函数 matchTemplate()搜索图像贴片和输入…

批量生成sql语句

批量生成sql语句 利用表格直接生成 # 例&#xff1a;A2 表示 A列第二行 公式表示为 ,A2,# 新增 CONCATENATE("insert into users (id,code,name) values (null,",A2,",",B2,");")# 修改 CONCATENATE("update users set name ",B3,&…

c++ 继承与派生的简单理解

继承与派生概念&#xff1a; 派生是一种创建新类的方式&#xff0c;在原来已有被继承类的基础上&#xff0c;不影响原来的类&#xff0c;不改变原来类的代码&#xff0c;实现对于功能的扩展&#xff0c;在原有被继承类的基础上快速增加新的功能&#xff1b;新创建的类可以来源…

第四篇:记忆的迷宫:探索计算机存储结构的奥秘与创新

记忆的迷宫&#xff1a;探索计算机存储结构的奥秘与创新 1 引言 1.1 计算机存储系统的发展与重要性 在现代计算技术中&#xff0c;存储系统承担着非常关键的角色&#xff0c;它不仅负责信息的持久保存&#xff0c;同时确保高效的数据访问速度&#xff0c;影响着整体系统性能的…

《Fundamentals of Power Electronics》——基础交流建模方法

PWM整流器小信号交流模型建模的主要步骤为&#xff1a; (a)利用小纹波近似的动态版本&#xff0c;建立与电感和电容波形的低频平均值有关的方程&#xff1b; (b)平均方程的扰动和线性化&#xff1b; (c)交流等效电路模型的建立。 以下图buck-boost电路为例进行分析。 首先测…