c++ 多继承 公有,私有,保护
昨天学习三种继承方式,有些比喻十分形象,特此分享。
首先说明几个术语:
1.基类
基类比起它的继承类是个更加抽象的概念,所描述的范围更大。所以可以看到有些抽象类,他们设计出来就是作为基类所存在的(有些名字里面有abstract的)。
基类也叫父类,虽然本人觉得这个比喻并不恰当。因为实际上子类是基类的扩充,描述了更加具体的东西。但现实的父子关系并非如此。但在有些方面这个比喻还是比较恰当的。
现在我们假设基类是一个快要退休的富豪。代码如下:
class RichMan
{
public:
RichMan();
~RichMan();
int m_company;
private:
int m_money;
int m_car;
protected:
int m_house; };
公司是public的,那么他自己(基类),创业伙伴(友元),儿子(子类),其他人(外部)都可以访问。
钱和车子是private的,自己(基类),创业伙伴(友元)可以访问。儿子和外人都不给开。
房子是protected的,自己(基类),创业伙伴(友元)可以访问,儿子(子类)也可以访问,外人是不可以访问。
现在他要退休了,那么有三种继承方式:
1.公有继承:public
他的儿子继承了他:LittleRichMan 类
class LittleRichMan :
public RichMan
{
public:
LittleRichMan();
~LittleRichMan();
};
经过public继承后,LittleRichMan的成员访问权限就变成了:
#include "RichMan.h"
class LittleRichMan :
public RichMan
{
public:
LittleRichMan();
~LittleRichMan();
int m_company;//仿佛
protected:
int m_house;//仿佛
};
也就是说,public成员保持不变,private成员不可见,protected成员也保持不变。
他的儿子继续开着公司,住着房子,但他爸爸的车子和钱是拿不到了。
继续,private继承:
class LittleRichMan :
private RichMan
{
public:
LittleRichMan();
~LittleRichMan();
private:
int m_company;//仿佛
int m_house;//仿佛
};
可以想象他的儿子是个自私的人,通过private的方式继承:public和protected变成了private。
自己占用了公司和房子,这样除了自己和友元,任何方式都不得访问。
最后,protected继承:
class LittleRichMan :
private RichMan
{
public:
LittleRichMan();
~LittleRichMan();
protected:
int m_company;//仿佛
int m_house;//仿佛
};
原先的public变成了protected,protected保持不变。这样,公司和房子是除了外人不可以访问,自己,友元,子类都可以访问。
转自:https://www.cnblogs.com/feng-qing-yang/p/5962312.html
c++ 多继承 公有,私有,保护的更多相关文章
- 从零开始学C++之继承(一):公有/私有/保护继承、overload/overwrite/override之间的区别
一.继承 C++很重要的一个特征就是代码重用.在C语言中重用代码的方式就是拷贝代码.修改代码.C++可以用继承或组合的方式来重用.通过组合或继承现有的的类来创建新类,而不是重新创建它们. 继承是使用已 ...
- 公有/私有/保护继承、overload/overwrite/override之间的区别
一.继承 C++很重要的一个特征就是代码重用.在C语言中重用代码的方式就是拷贝代码.修改代码.C++可以用继承或组合的方式来重用.通过组合或继承现有的的类来创建新类,而不是重新创建它们. 继承是使用已 ...
- 【转】c++继承:公有、私有、保护
原文链接:http://www.cnblogs.com/qlwy/archive/2011/08/25/2153584.html 公有继承(public).私有继承(private).保护继承(pro ...
- c++继承详解:共有(public)继承,私有继承(private)继承,保护(protected)继承
公有继承(public)继承.私有继承(private).保护继承(protected)是常用的三种继承方式. 1.公有继承(public) 公有继承的特点是基类的公有成员和保护成员作为派生类的成员时 ...
- C++继承详解:共有(public)继承,私有(private)继承,保护(protected)继承
公有继承(public).私有继承(private).保护继承(protected)是常用的三种继承方式. 1. 公有继承(public) 公有继承的特点是基类的公有成员和保护成员作为派生类的成员时, ...
- C++ 继承方式 //语法:class 子类 :继承方式 父类 //继承方式 三种: //1.公共继承 //2.保护继承 //3.私有继承
1 //继承方式 2 //语法:class 子类 :继承方式 父类 3 //继承方式 三种: 4 //1.公共继承 5 //2.保护继承 6 //3.私有继承 7 8 #include <ios ...
- C++中公有继承、保护继承、私有继承的区别
公有继承时基类中各成员属性保持不变,基类中private成员被隐藏.派生类的成员只能访问基类中的public/protected成员,而不能访问private成员:派生类的对象只能访问基类中的publ ...
- C++公有继承、保护继承和私有继承
C++中的继承方式有: public.private.protected三种(它们直接影响到派生类的成员.及其对象对基类成员访问的规则). (1)public(公有继承):继承时保持基类中各成员属性不 ...
- C++ 公有继承、保护继承和私有继承的对比
在c++的继承控制中,有三种不同的控制权限,分别是public.protected和private.定义派生类时,若不显示加上这三个关键字,就会使用默认的方式,用struct定义的类是默认public ...
随机推荐
- Linux文本编辑器快捷方式
- AngularJS2.0起步
ES6工具链 要让Angular2应用跑起来不是件轻松的事,因为它用了太多还不被当前主流浏览器支持的技术.所以,我们需要一个工具链:
- [LeetCode] 225. Implement Stack using Queues_Easy tag: Design
Implement the following operations of a stack using queues. push(x) -- Push element x onto stack. po ...
- DNS解析原理和流程
DNS解析原理和流程 DNS解析其实就是将IP地址(202.96.134.133)变成域名(www.xxxxx.com) 网络通讯大部分是基于TCP/IP的,而TCP/IP是基于IP地址的,所 ...
- linq判断一个枚举的Name是否存在
比如,枚举如下: [Serializable] public enum PayType : int { /// <summary> /// AAA /// </summary> ...
- iOS9 & iOS10 & iOS11 HTTP 不能正常使用的解决办法
iOS9 & iOS10 & iOS11 HTTP 不能正常使用的解决办法 xcode ios 291.4k 次阅读 · 读完需要 8 分钟 54 今天升级Xcode 7.0 b ...
- Twitter OA prepare: Visit element of the array
分析:就是建立一个boolean array来记录array里面每个元素的访问情况,遇到访问过的元素就停止visiting,返回未访问的结点个数 public int visiting(int[] A ...
- VS2010/MFC编程入门之三十九(文档、视图和框架:概述)
前面几节讲了菜单.工具栏和状态栏的使用,鸡啄米本节开始将为大家讲解文档.视图和框架的知识. 文档.视图和框架简介 在VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)创建的单文档工 ...
- JavaScript: apply 方法 详解(转)——非常好
转载自 http://www.cnblogs.com/KeenLeung/archive/2012/11/19/2778229.html 我在一开始看到javascript的函数apply和call ...
- python 元组 序列上使用enumerate()函数
不能直接for n,x,y in enumerate(data)