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

C++中的三种继承public,protected ,private

三种访问权限

public:可以被任意实体访问

protected:只允许子类及本类的成员函数访问

private:只允许本类的成员函数访问

三种继承方式

public 继承

protect 继承

private 继承

 

组合结果

基类中 继承方式 子类中

public & public继承 => public

public & protected继承 => protected

public & private继承 = > private

 

protected & public继承 => protected

protected & protected继承 => protected

protected & private继承 = > private

 

private & public继承 => 子类无权访问

private & protected继承 => 子类无权访问

private & private继承 = > 子类无权访问

 

由以上组合结果可以看出

1、public继承不改变基类成员的访问权限

2、private继承使得基类所有成员在子类中的访问权限变为private

3、protected继承将基类中public成员变为子类的protected成员,其它成员的访问 权限不变。

4、基类中的private成员不受继承方式的影响,子类永远无权访问。

 

此外,在使用private继承时,还存在另外一种机制:准许访问

我们已经知道,在基类以private方式被继承时,其public和protected成员在子类中变为private成员。然而某些情况下,需要在子类中将一个或多个继承的成员恢复其在基类中的访问权限。

C++支持以两种方式实现该目的

方法一,使用using 语句,这是C++标准建议使用的方式

方法二,使用访问声明,形式为 base-class::member;, 位置在子类中适当的访问声明处。(注,只能恢复原有访问权限,而不能提高或降低访问权限)

 

c++ 中为什么要定义public protect private 三种访问权限?

有些我们需要给外面看的,也就是对外接口,那么就是public,如果没有,那么我们做的工作将是毫无意义的,(别人没法用)

如果我们不想让别人知道内部的实现细节,那么就是private,比如,我们这么:

public:

count()

{

  mycount();

}

private:

  mycount();

这样的,count是对外的接口,而实现的时候,我们不想让外面知道怎么实现的,就用private,防止它用mycount!

如果我们不想让别人知道,想让自己的孩子什么的知道(这里涉及到继承),那么就可以作为protected!

这样的话,private是自己私有的,protected是可以让孩子知道的,public是公开的!

相关文章:

  • oracle错误一览
  • y-combiantor项目列表
  • bootstrap使用总结
  • ciscocatalyst6500引擎内存与flash经典
  • 如何查看IE型号
  • [转]自建CDN防御DDoS:知己知彼,建设持久防线
  • JS中的replace(RegExp, Function)
  • 本机安装wamp后,非本机访问phpmyadmin Forbidden的 解决方法
  • Linux 中用 strace 追踪系统调用和信号值
  • [译]ECMAScript 6:对象字面量中的属性值简写
  • BeagleBone 教学视屏 -- 第一季
  • SQL Server 负载均衡、集群的解决方案!
  • CLR只记不看笔记(二) 生成、打包、部署和管理应用程序及类型
  • Nagios(二)——Nagios 的基本安装
  • 老五的心经 byod环境安全问题:描述职责
  • [译]如何构建服务器端web组件,为何要构建?
  • Android系统模拟器绘制实现概述
  • co.js - 让异步代码同步化
  • CSS3 变换
  • es的写入过程
  • java小心机(3)| 浅析finalize()
  • jquery cookie
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 阿里云购买磁盘后挂载
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 使用putty远程连接linux
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • Spring Batch JSON 支持
  • 阿里云服务器购买完整流程
  • ​马来语翻译中文去哪比较好?
  • #NOIP 2014#Day.2 T3 解方程
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (LeetCode 49)Anagrams
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (第61天)多租户架构(CDB/PDB)
  • (多级缓存)缓存同步
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (一)RocketMQ初步认识
  • (转)JAVA中的堆栈
  • (转)平衡树
  • .gitattributes 文件
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .Net Memory Profiler的使用举例
  • .Net中的设计模式——Factory Method模式
  • [100天算法】-实现 strStr()(day 52)