初学C++的朋友经常在类中看到public,protected,private以及它们在继承中表示的一些访问范围,很容易搞糊涂。今天本文就来十分分析一下C++中public、protected及private用法。相信对于大家深入掌握C++程序设计会有很大的帮助。

这里我们首先要明白下面几点。

1.类的一个特征就是封装,public和private作用就是实现这一目的。所以:

用户代码(类外)可以访问public成员而不能访问private成员;private成员只能由类成员(类内)和友元访问。

2.类的另一个特征就是继承,protected的作用就是实现这一目的。所以:

protected成员可以被派生类对象访问,不能被用户代码(类外)访问。

现来看看如下示例:

继承中的特点:

先记住:不管是否继承,上面的规则永远适用!

有public, protected, private三种继承方式,它们相应地改变了基类成员的访问属性。

1.public继承:基类public成员,protected成员,private成员的访问属性在派生类中分别变成:public, protected, private

2.protected继承:基类public成员,protected成员,private成员的访问属性在派生类中分别变成:protected, protected, private

3.private继承:基类public成员,protected成员,private成员的访问属性在派生类中分别变成:private, private, private

但无论哪种继承方式,上面两点都没有改变:

1.private成员只能被本类成员(类内)和友元访问,不能被派生类访问;

2.protected成员可以被派生类访问。

再来看看以下代码:

1.public继承

代码如下:

2.protected继承:

代码如下:

3.private继承:

代码如下:

通过以上的代码都备有较为详尽的注释,读者应该能够理解。仔细看代码中派生类B中定义了和基类同名的成员a,此时基类的a仍然存在,可以验证。

输出:

16

20

所以派生类包含了基类所有成员以及新增的成员,同名的成员被隐藏起来,调用的时候只会调用派生类中的成员。

如果要调用基类的同名成员,可以用以下方法:

输出:

10

4

记得这里是在类外访问,而a在基类中是public,所以继承方式应该为public,使得a在派生类中仍然为public,在类外可以访问。

感兴趣的读者可以调试运行一下本文实例,加深印象的同时还会有新的收获。

c语言中public 用法,深入理解C++中public、protected及private用法相关推荐

  1. c语言private用法,深入理解C++中public、protected及private用法

    初学C++的朋友经常在类中看到public,protected,private以及它们在继承中表示的一些访问范围,很容易搞糊涂.今天本文就来十分分析一下C++中public.protected及pri ...

  2. 深入理解C++中public、protected及private用法

    深入理解C++中public.protected及private用法 这篇文章主要介绍了C++中public.protected及private用法,对于C++面向对象程序设计来说是非常重要的概念,需 ...

  3. python语言strip的作用_Python语言中的strip()的理解

    本文主要向大家介绍了Python语言中的strip()的理解,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 在看到Python中strip的时候产生了疑问 strip() 用于移 ...

  4. C++中public、protected及private用法

    转自:http://www.jb51.net/article/54224.htm 初学C++的朋友经常在类中看到public,protected,private以及它们在继承中表示的一些访问范围,很容 ...

  5. 转载——C语言中float,double类型,在内存中的结构(存储方式)

    最近在做一个数据格式分析和转换的项目,第一次接触底层的二进制代码存储,看的一头雾水,看到这个帖子后对于在Windows系统下数据的存储方式有了更多的了解,将原文分享一下: 原文地址为http://ww ...

  6. 在c语言中char型数据在内存中的储存形式为什么

    在c语言中char型数据在内存中的储存形式为"ASCII码".在C语言中,将一个字符常量放到一个字符变量中,实际并不是把该字符本身放到内存单元中,而是将与该字符相对应的ASCII码 ...

  7. 在c语言中 char型数据在内存中的存储形式是,在c语言中char型数据在内存中的存储形式是什么?...

    在c语言中char型数据在内存中的存储形式是ASCII码.在C语言中,char型数据是将一个字符常量放到一个字符变量中,并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单 ...

  8. 素数在c语言表达能力,巧用C语言中的Continue语句解决数论中的问题

    .#0 福建电脑!""#年第$%期 巧用!语言中的!"#$%&'(语句解决数论中的问题 杨爱梅 !河南工业大学河南郑州"#$$#%& !摘要!运 ...

  9. C语言中的void的理解

    1 初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误.本文将对void关键字的深刻含义进行解说,并 详述void及void指针类型的使用方法与技巧. 2.voi ...

最新文章

  1. mysql 5.6 binlog_format_ROW 格式binlog 在MySQL5.6上的数据恢复实验
  2. cpc卡内计费信息异常包括_抖音CPC是什么?广告的优势在哪?抖音CPC广告转化率高吗?...
  3. oracle 数据导入导出
  4. 【PP操作手册】计划订单转生产订单
  5. python 3.4 vc++编译配置_VS2013+OpenCV3.4.2编译
  6. Vue+Video.js播放m3u8视频流(海康威视摄像头+RTMP服务+FFmpeg)
  7. zbrush 添加纹理贴图_想学习3D游戏模型,3Dmax、MAYA和ZBrush都需要掌握吗?
  8. 解决Firefox已阻止运行早期版本Adobe Flash
  9. DyFPN:浙大华为诺亚西湖大学等提出用于目标检测的动态特征金字塔,减少40%的FLOPs!...
  10. 搜狗2011笔试题+答案解析
  11. Axios中无法运行 json-server【已解决】
  12. python一共多少模块,python常见模块有哪些
  13. 用java写布尔矩阵奇偶性
  14. 使用MapReduce计算Pi
  15. IDEA谷歌翻译插件提示:更新 TKK 失败,请检查网络连接
  16. Windows2003 3389端口修改
  17. 子平真诠释疑笔记(六)
  18. 鸿蒙OS可以装电脑吗,华为的鸿蒙系统可以用在电脑上吗?
  19. google instant
  20. 通过python实现乘法口诀

热门文章

  1. 一方库,二方库,三方库指的是什么?
  2. mana wifi_在IBM Security Policy Manager 7.1中使用Access Manager凭证
  3. 如何防止中国菜刀后门泄露webshell地址
  4. matlab中如何画隐函数的图像
  5. 论文阅读笔记 | 三维目标检测——Complex-YOLO算法
  6. 单总线编程介绍(用于DS18B20)
  7. D001.1 Window7系统上Centos7的安装
  8. 盛辉SG90舵机 51单片机PWM控制程序 手机屏幕触控
  9. 【Linux】主函数的三个形参
  10. 【linux】安装Linux的交叉编译工具链