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 是计算机操…

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

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

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.…

OpenCV如何模板匹配(59)

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

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

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

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

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

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑碳捕集和电转气的综合能源系统优化调度》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

SpringBoot与SpringMVC的区别

SpringBoot与SpringMVC的区别是什么&#xff1f; SpringBoot和SpringMVC是Java开发中常用的两个框架&#xff0c;它们都是由Spring框架所提供的&#xff0c;但在功能和使用方式上有着一些区别。本文将分别介绍SpringBoot和SpringMVC的特点和区别。 一、SpringBoot的特点&#…

Qt服务器端与客户端交互

Qt做客户端与服务器端交互第一步引入network 第一步引入network后继续编程首先界面设计 创建server和socket 引入QTcpServer&#xff0c;QTcpSocket MainWindow.h代码如下 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QTcpServer&…

13_Qt中的快捷键

Qt Creator的一些快捷操作&#xff1a; 项目管理&#xff1a; Build&#xff1a;以增量方式构建项目。Rebuild&#xff1a;重新构建项目。Clearn&#xff1a;清除项目构建过程中产生的所有中间文件。Run qmake&#xff1a;使用qmake/cmake重新构建项目。会重新执行UIC、MOC、…

如何面对并发下的bug

整理总结自蒋炎岩老师的b站课程&#xff0c;https://jyywiki.cn/OS/2022/index.html 并发bug与应对 应对bug的方法 在代码里边增加很多检查(加断言) #include "thread.h"unsigned long balance 100;void Alipay_withdraw(int amt) {if (balance > amt) {usleep(…

迎接AI时代:智能科技的社会责任与未来展望

AI智能体的社会角色、伦理挑战与可持续发展路径 引言&#xff1a; 在技术的浪潮中&#xff0c;AI智能体正逐步成为我们生活的一部分。它们在医疗、教育、交通等领域的应用&#xff0c;预示着一个全新的时代即将到来。本文将结合实际案例和数据分析&#xff0c;深入探讨AI智能体…

农作物害虫分类数据集12846张27类别

数据集类型&#xff1a;图像分类用&#xff0c;不可用于目标检测无标注文件 数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;12846 分类类别数&#xff1a;27 类别名称:["ants","aphids…