C++继承的三种方式[ACCESS]

news2024/11/18 23:21:02

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成员变为protected
        prot = 1; // 正确,Base的protected成员保持为protected
        // priv = 1; // 错误,Base的private成员不可访问
    }
};

// 私有继承
class PrivateDerived : private Base {
public:
    void test() {
        pub = 1; // 正确,Base的public成员变为private
        prot = 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 c2006

D:\YcjWork\CppTour>g++ c2006.cpp -o c2006.exe

D:\YcjWork\CppTour>c2006
pub_derived.pub: 2

D:\YcjWork\CppTour>

运行截屏
C++继承的三种方式

(全文完)

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

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

相关文章

fpga系列 硬件(时序收敛):触发器建立时间(setuptime)

触发器 电平触发、边沿触发和脉冲触发是三种主要的触发形式。always (posedge clk or negedge rst_n) 是一个典型的 Verilog 语句&#xff0c;用于定义一个带复位的触发器。D触发器是一种基本的数字存储元件&#xff0c;主要用于数据存储和时序控制。 D触发器的建立时间和保持…

Zabbix自动发现SNMP主机

前言 利用Zabbix监控DELL R740主机硬件&#xff0c;监控通过自动发现主机&#xff0c;链接SNMP监控模板 一、配置自动发现 自动发现脚本 cat discovery_host.pyfrom os.path import abspath, dirname, join import json import sysreload(sys) sys.setdefaultencoding(utf-8…

【2024】前端学习笔记11-网页布局-弹性布局flex

学习笔记 网页布局弹性布局&#xff1a;flex案例&#xff1a;flex布局案例 网页布局 在页面布局中&#xff0c;display属性用于设置一个元素的显示方式。它可以指定元素是作为块级元素、内联元素还是充当表格元素显示。 display的常见属性值&#xff1a; block&#xff1a;将…

前端——Ajax和jQuery

一、Ajax Ajax即“Asynchronous Javascript And XML”&#xff08;异步 JavaScript 和 XML&#xff09;&#xff0c; 通过 JS 异步的向服务器发送请 求并接收响应数据。 同步访问&#xff1a;当客户端向服务器发送请求时&#xff0c;服务器在处理的过程中&#xff0c;浏览器…

AutoGen实现多代理-Planning_and_Stock_Report_Generation(六)

1. 案例背景 本节内容是构建Agent组&#xff0c;通过广播模式&#xff0c;实现管理者对agent工作流的管理。本实验链接&#xff1a;传送门 2. 代码实践 2.1 环境设置 llm_config{"model": "gpt-4-turbo"}# 工作任务描述 task "Write a blogpost a…

【CSS3】css开篇基础(1)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

【树莓派系列】树莓派首次开机配置

树莓派首次开机配置 文章目录 树莓派首次开机配置1.镜像烧录2.开启串口调试1.无屏幕2.有屏幕3.串口登录系统 3.配置网络VNC与SSH的区别 4.更新vim5.固定IP地址6.开启SSH&#xff0c;网络登录开发板7.xrdp图形化登录开发板XRDP与VNC区别8.更新国内下载镜像源9.vscode连接开发板1…

C语言 | Leetcode C语言题解之第450题删除二叉搜索树中的节点

题目&#xff1a; 题解&#xff1a; struct TreeNode* deleteNode(struct TreeNode* root, int key){struct TreeNode *cur root, *curParent NULL;while (cur && cur->val ! key) {curParent cur;if (cur->val > key) {cur cur->left;} else {cur c…

OpenAi FunctionCalling 案例详解

源码详细讲解 pdf 及教学视频下载链接&#xff1a;点击这里下载 FunctionCalling的单一函数调用 天气预报查询&#xff08;今天长沙的天气如何&#xff1f;&#xff09; import json import requests from openai import OpenAIclient OpenAI()location "长沙"…

`git restore` 和 `git checkout` 用于丢弃工作区的改动, `git switch` 和 `git checkout` 用来切换分支

git restore 和 git checkout 都可以用于丢弃工作区的改动 但它们有一些区别&#xff0c;尤其是在 Git 2.23 引入了新的命令后。 主要区别 git checkout 是一个多用途命令&#xff1a; 它用于切换分支。它还可以用于恢复工作区中特定文件的更改。由于功能过于复杂&#xff0c…

Cortex微控制器软件接口标准(CMSIS)

Cortex微控制器软件接口标准 目前&#xff0c;软件开发已经是嵌入式系统行业公认的主要开发成本&#xff0c;通过将所有Cortex-M芯片供应商产品的软件接口标准化&#xff0c;能有效降低这一成本&#xff0c;尤其是进行新产品开发或者将现有项目或软件移植到基于不同厂商MCU的产…

Golang | Leetcode Golang题解之第450题删除二叉搜索树的节点

题目&#xff1a; 题解&#xff1a; func deleteNode(root *TreeNode, key int) *TreeNode {var cur, curParent *TreeNode root, nilfor cur ! nil && cur.Val ! key {curParent curif cur.Val > key {cur cur.Left} else {cur cur.Right}}if cur nil {retur…

回首往事,感受change

今早&#xff0c;我收到了CSDN发来的消息&#xff0c;当我看了内容才发现&#xff0c;我不知不觉已经在CSDN里面创作了730天&#xff08;2年&#xff09;也是个非常值得纪念的日子。 今天&#xff0c;我来回顾一下我的以往&#xff0c;感受一下我的成长与变化。 梦的开始 大家…

【Python报错已解决】 Failed building wheel for opencv-python-headless

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

2024多模态大模型发展调研

随着生成式大语言模型应用的日益广泛&#xff0c;其输入输出模态受限的问题日益凸显&#xff0c;成为制约技术进一步发展的瓶颈。为突破这一局限&#xff0c;本文聚焦于研究多模态信息的协同交互策略&#xff0c;旨在探索一种能够统一理解与生成的多模态模型构建方法。在此基础…

C# 无边框窗体,加阴影效果、多组件拖动、改变大小等功能完美实现优化版效果体验

一、预览效果 国庆节第一天,祝祖国繁荣昌盛! 1.1 效果图 (WinForm无边框窗体,F11可全屏) 拖动窗体时半透明效果(拖动时参考窗体后面释放位置) 说明:本功能的实现基于网友的原型完善而来,更多代码可以参考他的文章 h

智能平衡移动机器人-平台硬件电路

目录 硬件电路主要模块包括&#xff1a; 主控制器 TMS320F28069数字信号处理器 电池 电机驱动电路 直流电机的驱动 编码器 传感器与外设模块 APP 为了使智能平衡移动机器人达到更好的平衡控制效果&#xff0c;机器人的本体设计更为轻便、集中。机器人的硬件电路也进行集…

课设实验-数据结构-单链表-文教文化用品品牌

题目&#xff1a; 代码&#xff1a; 正解&#xff1a; #include<stdio.h> #include<stdlib.h> #include<string.h> #define MaxSize 10 //定义顺序表最大长度static int result; //字符串比较结果 static int i; //循环初始值 static bool flag; //记录结…

Typora使用与Markdown语法详细教程

Typora 基本介绍 Typora 是一款由 Abner Lee 开发的轻量级 Markdown 编辑器。Markdown 是一种 轻量级标记语言&#xff0c;它允许人们使用易读易写的纯文本格式编写文档&#xff0c;然后转换成有效的 XHTML&#xff08;或者 HTML&#xff09;文档。 安装 下载地址&#xff…

C语言 getchar 函数完全解析:掌握字符输入的关键

前言 在C语言中&#xff0c;getchar 是一个非常实用的函数&#xff0c;用于从标准输入流&#xff08;通常是键盘&#xff09;读取单个字符。这对于处理文本输入非常有用&#xff0c;尤其是在需要逐个字符处理的情况下。本文将深入探讨 getchar 函数的用法和特点&#xff0c;并…