博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++中的各种继承方式规则
阅读量:6414 次
发布时间:2019-06-23

本文共 1291 字,大约阅读时间需要 4 分钟。

hot3.png

C++中的成员分为三种类型:公有成员,私有成员,保护成员。

      如果不特别指定,类里所有的成员都是公有(Public)的,不用特地声明。但是私有(Private)成员则是要一定声明的。

  这三种类型才成员的区别在于,对于本类来说:

       公有成员,外部可以访问的成员。
       私有成员,外部不可以访问的成员。
       保护成员,外部不可以访问的成员。

乍看起来,私有成员与保护成员的访问权限是相同的,使用私有成员就行了,貌似没有必要再多出来一个保护成员。

       我们要相信,我们觉得自己挺明白,弄出C++的大牛比我们还明白,他们当然知道哪些是需要的哪些是没用的,如果保护成员没有用处,还会出现在C++中吗?
       实际上,保护成员与私有成员的区别体现在继承上。

继承分为:公有继承,私有继承,保护继承。

       公有继承,基类的公有成员和保护成员作为派生类的公有成员,外部可以访问;
       私有继承,基类的公有成员和保护成员作为派生类的私有成员,外部不可以访问;
       保护继承,基类的公有成员和保护成员作为派生类的保护成员,外部不可以访问;

  (外部指基类的外部,即派生类中可以访问,在派生类的外部不能访问该函数)

       这三种继承中,派生类都不能访问基类的私有成员。
       从继承中,我们可以看出,保护成员和私有成员有本质上的区别。
       当然,也可以说在继承中,保护成员和公有成员没什么区别。

       可以看出,保护成员就是夹在私有成员和公有成员间的一个第三者,说是第三者可能不太合适,应该是一夫二妻里的老公,两边他都有关系,但是本质上他又和两边都不同(他是男的。。。)

通过以上的说明我们也可以看出,保护成员的作用主要是在继承时才体现出来的。

可能有好事者又要问,那私有继承和保护继承有什么区别,继承来的成员都是外部不能访问的啊?对于这个问题,继承一次好办,确实没区别,但是如果再从派生类派生出派生类2,那就有区别了,因为私有成员是不能被再派生出来的派生类2访问的。

C++中的继承方式有:

  public、private、protected三种(它们直接影响到派生类的成员、及其对象对基类成员访问的规则)。
  (1)public(公有继承):继承时保持基类中各成员属性不变,并且基类中private成员被隐藏。派生类的成员只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象只能访问基类中的public成员。
  (2)private(私有继承):继承时基类中各成员属性均变为private,并且基类中private成员被隐藏。派生类的成员也只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象不能访问基类中的任何的成员。 
  (3)protected(保护性继承):继承时基类中各成员属性均变为protected,并且基类中private成员被隐藏。派生类的成员只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象不能访问基类中的任何的成员。

转载于:https://my.oschina.net/u/245046/blog/65140

你可能感兴趣的文章
Calendar时间操作
查看>>
iOS多线程_02_多线程的安全问题
查看>>
通过Ajax post Json类型的数据
查看>>
leetcode------Subsets II
查看>>
leetcode------3Sum
查看>>
搞懂分布式技术2:分布式一致性协议与Paxos,Raft算法
查看>>
delphi定义结构体
查看>>
Python网页解析
查看>>
程序中double类型的数输出为什么要用lf
查看>>
posix多线程有感—sysconf系统变量
查看>>
状态机/迭代器/LINQ/协程
查看>>
maven POM —— maven权威指南学习笔记(五)
查看>>
华为oj之字符串最后一个单词的长度
查看>>
mysql加减时间-函数-时间加减
查看>>
讲讲python“=”运算符上的优雅语法
查看>>
jQuery Ajax封装通用类 (linjq)
查看>>
备忘---ruby
查看>>
windows mysql忘记密码解决方案
查看>>
Linux 下用 valgrind 查找内存泄漏小例子
查看>>
需要为你的SaaS改变走向市场策略吗?本文介绍了ISV怎样使用Windows Azure实现它...
查看>>