C++继承的三种方式[ACCESS]
C++继承的定义
两个类的继承关系在派生类中声明,派生类定义使用以下语法:
class DerivedClass: [ACCESS] BaseClass{
/…/
};
冒号(:)后的[ACCESS]是继承的最高权限级别符,可以是以下三个值(存取权限级别)的其中之一:
public,公共权限,三级(高)
protected,保护权限,二级
private,私有权限,一级(低)
由[ACCESS]的这三个值,从而引出了C++继承的三种方式:
1、公共继承,[ACCESS]是public
2、保护继承,[ACCESS]是protected
3、私有继承,[ACCESS]是private
首先明确一点:基类BaseClass的private成员,在派生类DerivedClass中是无法访问,即不能被继承。
最高权限级别符[ACCESS]
最高权限级别符[ACCESS]的意思是:
在派生类DerivedClass中,继承自基类BaseClass的成员的级别,高于[ACCESS]级别的都将被视为[ACCESS]级别;等于、低于[ACCESS]级别的,原样不动。基类BaseClass的private成员不被继承。
C++继承的三种方式详解如下:
一、公共继承,[ACCESS]是public
[ACCESS]为public时,基类BaseClass的成员级别在派生类DerivedClass中都不变,即public的继续是public、protected的继续是protected,private不被继承。
二、保护继承,[ACCESS]是protected
[ACCESS]为protected时,在派生类DerivedClass中,基类BaseClass的成员级别是public的修改为protected,原来是protected的继续是protected,private不被继承。
三、私有继承,[ACCESS]是private
[ACCESS]为private时,在派生类DerivedClass中,基类BaseClass的成员级别是public和protected的都修改为private,基类BaseClass的private成员不被继承。
实例源码
源码中注释内容有错误两字时,表示此行会发生编译错误,将对应行前的注释删除,再编译即可重现错误。
D:\YcjWork\CppTour>vim c2006.cpp
#include <iostream>
using namespace std;/*** 类继承的3种方式
*/// 基类
class Base {
public:int pub;
protected:int prot;
private:int priv;
};// 公有继承
class PublicDerived : public Base {
public:void test() {pub = 1; // 正确,Base的public成员prot = 1; // 正确,Base的protected成员继承为protected// priv = 1; // 错误,Base的private成员不可访问}
};// 保护继承
class ProtectedDerived : protected Base {
public:void test() {pub = 1; // 正确,Base的public成员变为protectedprot = 1; // 正确,Base的protected成员保持为protected// priv = 1; // 错误,Base的private成员不可访问}
};// 私有继承
class PrivateDerived : private Base {
public:void test() {pub = 1; // 正确,Base的public成员变为privateprot = 1; // 正确,Base的protected成员变为private// priv = 1; // 错误,Base的private成员仍不可访问}
};int main() {PublicDerived pub_derived;PrivateDerived priv_derived;ProtectedDerived prot_derived;// 测试基类的访问权限pub_derived.pub = 2; // 正确,PublicDerived的public成员// prot_derived.pub = 1; // 错误,ProtectedDerived的protected基类成员不可访问// priv_derived.pub = 1; // 错误,PrivateDerived的private基类成员不可访问cout << "pub_derived.pub: " << pub_derived.pub << endl;//cout << "prot_derived.pub: " << prot_derived.pub << endl; // 错误,ProtectedDerived的protected基类成员不可访问//cout << "priv_derived.pub: " << priv_derived.pub << endl; // 错误,PrivateDerived的private基类成员不可访问return 0;
}
编译运行
D:\YcjWork\CppTour>gpp c2006D:\YcjWork\CppTour>g++ c2006.cpp -o c2006.exeD:\YcjWork\CppTour>c2006
pub_derived.pub: 2D:\YcjWork\CppTour>
运行截屏

(全文完)
相关文章:
C++继承的三种方式[ACCESS]
C继承的定义 两个类的继承关系在派生类中声明,派生类定义使用以下语法: class DerivedClass: [ACCESS] BaseClass{ /…/ }; 冒号(:)后的[ACCESS]是继承的最高权限级别符,可以是以下三个值(存取权限级别&am…...
idea 同一个项目不同模块如何设置不同的jdk版本
在IntelliJ IDEA中,可以为同一个项目中的不同模块设置不同的JDK版本。这样做可以让你在同一个项目中同时使用多个Java版本,这对于需要兼容多个Java版本的开发非常有用。以下是设置步骤: 打开项目设置: 在IDEA中,打开你…...
1-仙灵之谜(区块链游戏详情介绍)
1-仙灵之谜(区块链游戏详情介绍) 前言(该游戏仅供娱乐)正文 前言(该游戏仅供娱乐) 依稀记得本科那会儿参加了一个区块链实验室,那时每周末大家都会爬山或者抽出一下午讨论区块链以及未来&#x…...
基于51单片机的温湿度上下限监测预警proteus仿真
地址:https://pan.baidu.com/s/1hSprWBYhKKx8Txzaj33YPA?pwdjp3d 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMic…...
考核总结.
事件循环 单线程的js在处理异步事件时进行的一种循环过程。 在 JS中任务分为同步与异步任务,其中异步任务又分为两种:宏任务和 微任务。宏任务和微任务的执行顺序:总方针是先同步再异步,异步中先微任务,在宏任务。一次…...
后端学习路线
后端学习路线 一、编程语言 至少需要学习一门编程语言,建议学习JAVA和GO语言。 二、数据库 数据库分为关系型数据库和非关系型数据库,区别在于分关系型数据库常用于大数据,而非关系型数据库一般不在大数据方面使用。 关系型数据库&#x…...
车辆重识别(注意力 U-Net:学习在哪些区域寻找胰腺)论文阅读2024/10/01
什么是注意力机制? 什么是加性注意力? 大致说一下流程: 对于一张特征图来说,对于这张图中的每一个像素向量(例如a),计算该向量与所有像素向量的相似度,对这些相似度进行激活函数…...
【区别】git restore --staged <文件> 和 git reset HEAD <文件> 都可以用于取消已暂存的文件
git restore --staged <文件> 和 git reset HEAD <文件> 都可以用于取消已暂存的文件,但它们的工作原理和适用场景有所不同。以下是对这两个命令的详细比较: 1. 命令概述 git restore --staged <文件>: 专门用于将指定文件…...
void类型
编程语言中的void类型是一种特殊的数据类型,它表示不存在任何值。void, 无或者空类型。大部分编程语言支持void, 用做函数无返回值类型。最早ALGOL 68引入void类型。 void的特别使用 经典C缺乏void类型,函数可以不指定返回值,默认是整型int.…...
10/1 力扣 49.字母异位词分组
基本知识: 关于字符串的排序: 1.多个字符串排序 1.1使用python内置的sorted() 使用该函数后原对象并不发生变化 1.2若多个字符串使用列表进行存储,使用列表的sort()方法 使用该函数后原对象原地变化 2.对单个字符串里的字母进行排序 使…...
✨机器学习笔记(六)—— ReLU、多分类问题、Softmax、Adam、反向传播
Course2-Week2: https://github.com/kaieye/2022-Machine-Learning-Specialization/tree/main/Advanced%20Learning%20Algorithms/week2机器学习笔记(六) 1️⃣ReLU(Rectified Linear Unit)2️⃣多分类问题3️⃣Softmax4️⃣Adam5…...
Xshell7下载及服务器连接
一、Xshell-7.0.0164p、Xftp 7下载 1.1、文件下载 通过网盘分享的文件:xshell 链接: https://pan.baidu.com/s/1qc0CPv4Hkl19hI9tyvYZkQ 提取码: 5snq –来自百度网盘超级会员v2的分享 1.2、ip连接 下shell和xftp操作一样:找到文件—》新建—》名称随…...
SQL Server—的数据类型
SQL Server—的数据类型 在 SQL Server 数据库中,数据类型是定义数据模型的基础,它们决定了数据在数据库中的存储方式和格式。正确选择数据类型不仅可以优化存储空间,还能提高查询性能和数据完整性。 1文本类型 文本类型:字符数…...
WaterCloud:一套基于.NET 8.0 + LayUI的快速开发框架,完全开源免费!
前言 今天大姚给大家分享一套基于.NET 8.0 LayUI的快速开发框架,项目完全开源、免费(MIT License)且开箱即用:WaterCloud。 可完全实现二次开发让开发更多关注业务逻辑。既能快速提高开发效率,帮助公司节省人力成本&…...
数据结构-LRU缓存(C语言实现)
遇到困难,不必慌张,正是成长的时候,耐心一点! 目录 前言一、题目介绍二、实现过程2.1 实现原理2.2 实现思路2.2.1 双向链表2.2.2 散列表 2.3 代码实现2.3.1 结构定义2.3.2 双向链表操作实现2.3.3 实现散列表的操作2.3.4 内存释放代…...
javacv FFmpegFrameGrabber 阻塞重连解决方法汇总
JavaCV中FrameGrabber类可以连接直播流地址, 进行解码, 获取Frame帧信息, 常用方式如下 FrameGrabber grabber new FrameGrabber("rtsp:/192.168.0.0"); while(true) {Frame frame grabber.grabImage();// ... } 在如上代码中, 若连接地址网络不通, 或者连接超时…...
自然语言处理问答系统技术
自然语言处理问答系统技术 随着人工智能的不断发展,自然语言处理(NLP)技术已成为推动智能问答系统发展的核心技术。问答系统是利用NLP来解析用户提出的问题,并从知识库中找到最相关的答案。在许多应用中,如智能客服、…...
交换机和路由器的区别
交换机和路由器的区别主要体现在以下几个方面: 工作层次不同:交换机通常工作在OSI模型的数据链路层(第二层),主要根据MAC地址进行数据包转发。而路由器则工作在OSI模型的网络层(第三层)…...
JavaScript Array(数组)
JavaScript Array(数组) JavaScript 中的数组是一种特殊的对象,用于存储一系列有序的值。数组是 JavaScript 中非常强大的数据结构,广泛用于各种编程任务。本文将详细介绍 JavaScript 数组的特性、用法和操作方法。 数组的创建 在 JavaScript 中,创建数组有多种方式: …...
示例说明:elasticsearch实战应用
Elasticsearch 是一个基于 Lucene 的分布式搜索和分析引擎,广泛应用于日志分析、全文搜索、数据可视化等领域。以下是 Elasticsearch 实战应用的一些关键点和步骤: 1. 环境搭建 首先,你需要在你的环境中安装和配置 Elasticsearch。 安装 E…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...
VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...
raid存储技术
1. 存储技术概念 数据存储架构是对数据存储方式、存储设备及相关组件的组织和规划,涵盖存储系统的布局、数据存储策略等,它明确数据如何存储、管理与访问,为数据的安全、高效使用提供支撑。 由计算机中一组存储设备、控制部件和管理信息调度的…...
基于Uniapp的HarmonyOS 5.0体育应用开发攻略
一、技术架构设计 1.混合开发框架选型 (1)使用Uniapp 3.8版本支持ArkTS编译 (2)通过uni-harmony插件调用原生能力 (3)分层架构设计: graph TDA[UI层] -->|Vue语法| B(Uniapp框架)B --&g…...
