(1) 公有继承(public)

公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派生类的子类所访问。

(2)私有继承(private)

私有继承的特点是基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类所访问。

(3)保护继承(protected)

保护继承的特点是基类的所有公有成员和保护成员都成为派生类的保护成员,并且只能被它的派生类成员函数或友元访问,基类的私有成员仍然是私有的。

  private能够对外部和子类保密,即除了成员所在的类本身可以访问之外,别的都不能直接访问。protected能够对外部保密,但允许子类直接访问这些成员。public、private和protected对成员数据或成员函数的保护程度

总结:

(1). public继承是一个接口继承,保持is-a原则,每个父类可用的成员对子类也可用, 因为每个子类对象也都是一个父类对象。

(2). 基类的private成员 在派生类中是不能被访问的, 如果基类成员 不想在类外直接被访问, 但需要 在派生类中能访问, 就定义为protected。 可以看出保护成员 限定符是因继承才出现的。
(3). protected/private继承是一个实现继承, 基类的部分成员 并非完全成为子类接口 的一部分, 是 has-a 的关系原则, 所以非特殊情况下不会使用这两种继承关系, 在绝大多数的场景下使用的 都是公有继承。 私有继承以为这is-implemented-in-terms-of(是根据……实现的) 。 通常比组合(composition) 更低级, 但当一个派生类需要访问 基类保护成员 或需要重定义基类的虚函数时它就是合理的。

(4). 不管是哪种继承方式, 在派生类内部都可以访问基类的公有成员和保护成员 , 基类的私有成员存在但是在子类中不可见( 不能访问) 。
(5). 使用关键字class时默认的继承方式是private, 使用struct时默认的继承方式是public, 不过最好显式的写出继承方式。
(6). 在实际运用中一般使用都是public继承, 极少场景下才会使用protetced/private继承。

在struct继承中,如果没有显式给出继承类型,则默认的为public继承;在class继承中,如果没有显式给出继承类型,则默认的为private继承;

LittleGirl.h

#pragma once
#include "human.h" class LittleGirl :
public human
{
public:
LittleGirl(string name);
LittleGirl();
~LittleGirl();
};

LittleGirl.cpp

#include "stdafx.h"
#include "LittleGirl.h" /*
可以这样调用父级的构造函数。没有注明继承方式,默认是private继承,相当于“private human(name)”
另外2种继承方式是:“public human(name)”,“protected human(name)”
如果是多继承,则是:“public human(name),public 其它基类(name)”,继承的数量不限,用“,”分割就可以了。
*/
LittleGirl::LittleGirl(string name):human(name)
{
} LittleGirl::LittleGirl()
{
} LittleGirl::~LittleGirl()
{
}

human.h

#pragma once
#include<string>
using namespace std; class human
{
public:
human(string name);
human();
~human();
int x;
};

human.cpp

#include "stdafx.h"
#include "human.h" human::human(string name)
{
} human::human()
{
} human::~human()
{
}

最新文章

  1. iOS:小技巧(不断更新)
  2. Genymotion安装问题
  3. nagios二次开发(五)---nagios和nagiosql的关系
  4. Linq之Lambda表达式初步认识
  5. JAVA 中SQL字符动态拼接
  6. BZOJ4295 : [PA2015]Hazard
  7. 笔记本_thinkpad_e40
  8. Unity3D ShaderLab Use Properties
  9. 【CSS3】---阴影 box-shadow
  10. Java Web编程的主要组件技术——JDBC
  11. 安装VS2015出现的bug,各位安装请注意
  12. 去除express.js 3.5中报connect.multipart() will be removed in connect 3.0的警告
  13. EventBus中观察者模式的应用
  14. 《Hello world 团队》第二次作业:团队项目选题报告
  15. undo系统参数详解
  16. 009 spring boot中文件的上传与下载
  17. 51Nod 1668 非010串
  18. zjoi 力
  19. mac book docker
  20. if-else练习

热门文章

  1. Dev GridView-Bind Detail Grid during runtime
  2. 转:ios导航栏设置
  3. android短彩信附件机制
  4. markdown添加本地图片
  5. Linux删除Screen
  6. 【c++基础】accumulate
  7. 2243: [SDOI2011]染色(LCT)
  8. USB设备驱动_WDS
  9. sql server 表变量存储临时查询数据
  10. 命令行net time同步时间(内网)