[ 随手记 5 ] C/C++ 继承
个人理解:
继承:(意译)继续承接;
A继承B,则A是派生类/子类,B为基类/父类;
B有的成员变量/性质,A全部都有,而A有的B不一定有,在数学集合上可以说:B是A的子集;
A继承B,可以说是A在B的基础上继续声明定义类,补全,承接,使其成员变量更多;
转载资源:
转自:https://www.cnblogs.com/qq329914874/p/5998584.html
一,为什么要引入继承?
继承是一个非常自然的概念,现实世界中的许多事物也都是具有继承性的。
例如,爸爸继承爷爷的特性,儿子又继承爸爸的特性等都属于继承的范畴。下面是一个简单的汽车分类图:
在这个分类图中建立了一种层次结构,最高层是最普遍,最一般的,每一次都比它上一层的更详细,更具体。
其中把上一层的叫做基类(或父类),紧接着基类的下一层叫做派生类(或子类)。
所谓继承,就是从先辈处得到属性和特征。
类的继承就是新类从已有类得到已有的特性,新类被称为派生类,已有类被称为基类。可抽象为派生类是基类的具体化,而基类则是派生类的抽象。
下面通过一个例子说明为什么要引用继承?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
class Person { private : int length; //身高 int weight; //体重 int borndate; //出生日期 }; class Student { private : int length; //身高 int weight; //体重 int borndate; //出生日期 int score; //成绩 int total; //总分 char * school; //学校 }; |
上面定义了两个类,一个人类,一个学生类,仔细观察我们发现人类中具有的属性(即类的成员数据)在学生类中都具有。
换言之,学生也是人,反过来讲人不一定是学生。就像这样的代码,人类中的属性我们重复定义了两次.
那么有没有一种方法能避免这种代码重复呢?是的,这就是我们的继承.
继承机制是面向对象程序设计中避免代码重复的最重要的手段,它允许程序员对已有类进行扩展,增加功能.
二,继承的定义格式
eg:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
class Person { private : int length; //身高 int weight; //体重 int borndate; //出生日期 }; class Student: public Person { private : int score; //成绩 int total; //总分 char * school; //学校 }; |
创建一个学生对象试试
基类的所以对象都被继承过来了,很棒吧!
注意:class如果没有显示的给出继承方式,系统默认为private继承,但是最好还是显示定义继承类型,即使是私有继承。
(struct的默认继承方式则是public。)
[ 随手记 5 ] C/C++ 继承的更多相关文章
- scala学习手记13 - 类继承
在scala里,类继承有两点限制: 重写方法需要使用override关键字: 只有主构造函数才能往父类构造函数中传参数. 在java1.5中引入了override注解,但不强制使用.不过在scala中 ...
- [小北De编程手记] : Lesson 06 玩转 xUnit.Net 之 定义自己的FactAttribute
xUnit.Net本身提供了标记测试方法的标签Fact和Theory.在前面的文章<Lesson 02 玩转 xUnit.Net 之 基本UnitTest & 数据驱动>中,也对它 ...
- [小北De编程手记] : Lesson 04 玩转 xUnit.Net 之 Fixture(下)
上一篇文章<[小北De编程手记] : Lesson 03 玩转 xUnit.Net 之 Fixture(上)>向大家介绍了xUnit.Net 共享数据的方式.Test Case的构造函数 ...
- [小北De编程手记] : Lesson 03 玩转 xUnit.Net 之 Fixture(上)
在使用xUnit.Net Framework构建单元测试或自动化测试项目的时候,无论是针对一些比较耗费资源的对象亦或是为了支持Test case预设数据的能力,我们都需要有一些初始化或是清理相关的动作 ...
- [小北De编程手记] : Lesson 02 玩转 xUnit.Net 之 基本UnitTest & 数据驱动
关于<玩转 xUnit.Net>系列文章,我想跟大家分享的不是简单的运行一下测试用例或是介绍一下标签怎么使用(这样的文章网上很多).上一篇<Lesson 01 玩转 xUnit.Ne ...
- Git.Framework 框架随手记--存储过程简化
在很多的ORM中对存储过程操作都是一个棘手的地方,因为存储过程是一段预编译的代码,其中可以包含很多处理过程.在Git.Framework中也同样存在这样的问题,目前没有能力解决这个问题.但是对于存储过 ...
- maven学习手记 - 3
学习目标 maven插件的定义: maven插件的使用. 前言 在手记2中说过maven的阶段命令是通过插件实现的.在手记1中也有简单的示范过插件的用法.但是总觉得有些泛泛了,想在这里再捋一下,以 ...
- 微信5.0 Android版飞机大战破解无敌模式手记
微信5.0 Android版飞机大战破解无敌模式手记 转载: http://www.blogjava.net/zh-weir/archive/2013/08/14/402821.html 微信5.0 ...
- sublime插件开发手记
原:http://blog.hickwu.com/sublime插件开发手记 标题: sublime插件开发手记 时间: 2014-01-05 14:58:02 正文: 插件基本结构 基本插件实现 ...
随机推荐
- Python3 Tcp未发送/接收完数据即被RST处理办法
一.背景说明 昨天一个同事让帮忙写个服务,用于接收并返回他那边提交过来的数据,以便其查看提交的数据及格式是否正确. 开始想用django写个接口,但写接口接口名称就得是定死的,他那边只能向这接口提交数 ...
- 静态代码扫描之阿里java代码规范IDEA插件
前言 2017年2月9日,首次公布<阿里巴巴Java开发手册>; 2017年9月25日,阿里巴巴集团发布了<阿里巴巴Java开发手册>PDF终极版; 2017年10月14日,在 ...
- java无锁化编程一:目录
假设我们用netty做服务,当接受到网络传输的码流,我们通过某种手段将这种传输数据解析成了熟悉的pojo,那这些pojo该如何进一步处理? 比如游戏中的抢购.场景业务等,对处理那种高并发的业务场景,如 ...
- 图标跟着摄像机(Camera)orthographicSize的值改变大小
默认摄像机(Camera)orthographicSize默认大小为51 #region //滚轮滑动,大地图放大缩小 ) { if (screenView_1Main.myEquipSearch.i ...
- Python_Mix*OS模块,序列化模块种的json,pickle
os.path.basename(path)返回path最后的文件名,如何path以/或\结尾,那么就会返回空值,即os.path.split(path)的第一个元素 ret = os.path.ba ...
- vBox Arch UEFI LVM安装
Table of Contents 介绍 配置 基础 VirtualBox配置 安装准备 基础 分区 格式化 挂载 安装 选择镜像 安装基本系统 配置 fstab chroot 一些配置 lvm2 网 ...
- rnn应用
Weather Recognition plays an important role in our daily lives and many computer vision applications ...
- ERROR: Cannot load message class for [speech_control/command]. Are your messages built?
ubuntu14.04 ROS indigo 问题: 执行查看指定消息的命令,出现下面的错误提示,找不到该消息类型. ~$ rostopic echo /speech/command ERROR: C ...
- Java中java.util.concurrent包下的4中线程池代码示例
先来看下ThreadPool的类结构 其中红色框住的是常用的接口和类(图片来自:https://blog.csdn.net/panweiwei1994/article/details/78617117 ...
- Tensorflow实战系列之三:
博主也是初学,能力有限,这个完全没想好..