当前位置: 首页 > news >正文

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++继承的三种方式

(全文完)


http://www.mrgr.cn/news/40955.html

相关文章:

  • AI学习指南深度学习篇-权重正则化的基本原理
  • 在C语言中,符号有两个主要用途:
  • 水污染水质检测数据集 2400张 水污染 带标注 voc yolo 4类
  • Linux 磁盘管理
  • 【架构】prometheus+grafana系统监控
  • Python | Leetcode Python题解之第450题删除二叉搜索树中的节点
  • C++网络编程之IP地址和端口
  • 实战OpenCV之轮廓检测
  • SQL Server—表格详解
  • SpringBoot开发——Spring Security中获取当前登录用户信息的方式
  • 读数据湖仓04数据架构与数据工程
  • CountDownLatch、CyclicBarrier、Semaphore等并发工具类的使用。JVM内存区域划分(堆、栈、方法区、程序计数器、本地方法栈)。
  • 某大型公园定岗定编项目成功案例纪实
  • 【架构】efk日志监控
  • 开放式耳机是什么意思?哪个品牌好?开放式蓝牙耳机测评分享
  • WaterCloud:一套基于.NET 8.0 + LayUI的快速开发框架,完全开源免费!
  • Stable Diffusion绘画 | 来训练属于自己的模型:打标处理与优化
  • Python 3 和 MySQL(PyMySQL) 的完美结合
  • Python | Leetcode Python题解之第451题根据字符出现频率排序
  • git merge 和 git rebase