当前课程知识点:C++语言程序设计进阶 > 第七章 继承与派生 > 继承的基本概念和语法 > 继承的基本概念和语法
继承的基本概念和语法
继承与派生是同一过程从不同的角度看
保持已有类的特性而构造新类的过程称为继承
在已有类的基础上新增自己的特性而产生新类的过程称为派生。
被继承的已有类称为基类(或父类)
派生出的新类称为派生类(或子类)
直接参与派生出某类的基类称为直接基类
基类的基类甚至更高层的基类称为间接基类
继承的目的:实现设计与代码的重用。
派生的目的:当新的问题出现,原有程序无法解决(或不能完全解决)时,需要对原有程序进行改造。
语法
class 派生类名:继承方式 基类名
{
成员声明;
}
例
class Derived: public Base
{
public:
Derived ();
~Derived ();
};
语法
class 派生类名:继承方式1 基类名1,继承方式2 基类名2,...
{
成员声明;
}
注意:每一个“继承方式”,只用于限制对紧随其后之基类的继承。
例
class Derived: public Base1, private Base2
{
public:
Derived ();
~Derived ();
};
大家好
欢迎回来继续学习
C++语言程序设计
在这一节呢
我们来学习
类的继承的基本概念
和语法
实际上呢
我们看到书上 资料上
经常有说继承的
有说派生的
那么它是一回事
还是两回事呢
实际上继承和派生
是对同一个问题
从不同角度来看
保持已有类的特性
而构造新类的过程
就称为继承
在已有类的基础上
新增自己的特征
而产生新类的过程呢
就叫派生
所以实际上是个侧重点不同
侧重在说
我要保持已有类的特征
那么就在说继承
我们继承了些什么东西
我们经常生活中
也通俗地说继承与发展
实际上派生
就在原有的基础上
发展的这么一个过程
实际上也就是一个扩展的过程
那么在这里呢
被继承的类呢就称为基类
或者叫做父类
也叫Base Class
派生出来的新类呢
称为派生类 也叫子类
叫Derived Class
那么直接参与派生出
某类的这个基类
称为直接基类
那一个基类
它派生出派生类以后
派生类可以继续作为基类
再派生出下级的类
这样的就是多级派生
那么除了一个
或多个基类以外呢
类还可以有它基类的基类
那么这就是间接的基类
那我们使用继承和派生的目的
是什么呢
继承的目的就是为了
充分利用原来已经有的程序
它的设计
还有它的实现
也就是说
要充分利用原来已经有的类
在这个基础之上
再去建立新的类
这是继承的目的
派生的目的呢
当然就是我们遇到新的问题了
原有的类
不能够完全适用
不能够解决这个新的问题了
如果不是这样
我们还继承什么呢
直接拿类来用
产生对象就可以了
所以
这就是继承和派生
两方面的目的
一方面
希望尽量利用原有的类
另一方面呢
原有的类它肯定是不够用了
所以我们要去发展
要去派生
现在我们来看单继承的时候
这个派生类定义的语法
所谓单继承呢
就是派生类
它只从一个直接基类继承
所以呢
我们看这个
在派生类类名后面呢
有一个冒号
然后后面要列出基类名
这里还有一个继承方式
它指的是什么呢
稍后就会给大家讲
现在呢
我们只关注到它后面的很关键
要列出这个基类名
也就是说它继承谁了
然后
这个类体大括号里面的成员声明
是什么呢
是除了我们继承基类以外
派生类自己
还新增了哪些成员
要在这里面声明
比如说我们看这个例子
这个派生类Derived
这个类
它就继承了一个基类
名字叫Base
继承的方式是public
public继承到底说的是什么
还是等一会我们会讲的
好 接下来我们看
在这个类体里面
那定义了Derived类自己的
构造函数 析构函数
当然除此而外
你有更多其他的函数
更多的数据成员
都可以像普通的类定义一样去写
所以呢
单继承的时候
派生类定义
语法上其实挺简单的
我们再来看
多继承的时候
怎么写派生类的定义呢
在C++中
是支持多继承的
也就是说
你看这有多少现有的类好用
你都可以把它拿过来
多好啊 是吧
我们可以在这儿列出多个基类
每个基类呢
有自己独立的继承方式
比如说我们看底下这个例子
Derived类它继承了两个基类
一个Base1
一个Base2
继承Base1是以public方式
继承Base2是以private方式
当然了
public是我们最常用的方式
private继承呢其实用的不多
也需要慎用
后面都会给大家介绍的
那么经过继承了以后
派生类的对象
都包含些什么呢
首先它包含了从基类
继承过来的成员
继承过来不加改变
原封不动就用的那些
这是首先的第一部分
另外呢
我们还可以改造
从基类继承过来的成员
更多的是
我们还要新增成员
这才是派生的意义所在
因为原有的类里面的东西
不太够用了
原封不动地拿来用
不够用了
或者说呢
有些算法不太合时宜了
那么改造一下
是不是就可以了呢
有一些可能需要改造
除了之外
还不能满足
我们解决新问题的需要
那就需要新增新的数据成员
新增新的函数成员了
所谓吸收基类的成员
那么到底吸收的基类
有哪些成员呢
是所有的成员都原封不动地
继承过来了吗
也不是
在默认情况下呢
基类的构造函数
和析构函数是不被继承的
但是呢
在C++11新标准中呢
又有了一点功能的扩展
我们可以用using
这个关键字表示
我们连构造函数也给继承过来
这个在后面介绍
构造函数的时候
会大家再做稍微详细地介绍
所谓改造呢
就是我们在派生类中
可以定义与基类成员
同名的成员
这样基类同名的成员
就被覆盖了
当然新增呢就是
我们完全增加新的功能
和新的数据
-导学
--导学
-继承的基本概念和语法
-第七章 继承与派生--继承的基本概念和语法习题
-继承方式
-第七章 继承与派生--继承方式
-基类与派生类类型转换
-第七章 继承与派生--基类与派生类类型转换
-派生类的构造和析构
--派生类的构造函数
--派生类的析构函数
--第七章 继承与派生--派生类的构造和析构
-派生类成员的标识与访问
--虚基类
-第七章 继承与派生--派生类成员的标识与访问
-小结
--小结
-综合实例
--第七章综合实例
-实验七
--实验七
-导学
--导学
-第八章 多态性--导学
-运算符重载
--运算符重载的规则
-第八章 多态性--运算符重载
-虚函数
--虚函数
--虚析构函数
--虚表与动态绑定
-第八章 多态性--虚函数
-抽象类
--抽象类
--第八章 多态性--抽象类
-override与final
-第八章 多态性--override与final
-小结
--第八章小结
-综合实例
--第八章综合实例
-实验八
--实验八
- 第八章讲义
-导学
--导学
-模板
--函数模板
--类模板
-第九章 模板与群体数据--模板
-线性群体
--线性群体的概念
-第九章 模板与群体数据--线性群体
-数组
--数组类模板
-链表
--链表类模板
-第九章 模板与群体数据--链表
-栈
--栈类模板
--栈类模板课后习题
--例9-9 栈的应用课后习题
-队列
--队列类模板
-第九章 模板与群体数据--队列
-排序
--排序概述
--插入排序
--选择排序
--交换排序
-第九章 模板与群体数据--排序
-查找
--查找
--查找课后习题
-小结
--小结
-综合实例
--综合实例
-实验九
--实验九
- 第九章讲义
-导学
--导学
-泛型程序设计及STL的结构
--STL简介
-第十章 泛型程序设计与C++标准模板库--泛型程序设计及STL的结构
-迭代器
--迭代器
-第十章 泛型程序设计与C++标准模板库--迭代器
-容器的基本功能与分类
-第十章 泛型程序设计与C++标准模板库--容器的基本功能与分类
-顺序容器
--顺序容器的特征
--第十章 泛型程序设计与C++标准模板库--顺序容器
-关联容器
--集合
--映射
-第十章 泛型程序设计与C++标准模板库--关联容器
-函数对象
--函数对象
--函数适配器
-算法
--算法
-小结
--第十章小结
-综合实例
--综合实例
-实验十
--实验十
- 第十章讲义
-导学
--导学
-I/O流的概念及流类库结构
-第十一章 流类库与输入/输出--I/O流的概念及流类库结构
-输出流
--输出流概述
--向文本文件输出
--向二进制文件输出
--向字符串输出
-第十一章 流类库与输入/输出--输出流
-输入流
--输入流概述
--输入流应用举例
--从字符串输入
-第十一章 流类库与输入/输出--输入流
-输入/输出流
--输入/输出流
-第十一章 流类库与输入/输出--输入/输出流
-小结
--小结
-综合实例
--综合实例
-实验十一
--实验十一
- 第十一章讲义
-导学
--第12章导学
-异常处理的思想与程序实现
-第十二章 异常处理--异常处理的思想与程序实现
-异常处理中的构造与析构
-第十二章 异常处理--异常处理中的构造与析构
-标准程序库异常处理
-第十二章 异常处理--标准程序库异常处理
-小结
--第12章小结
-综合实例
--综合实例
-实验十二
--实验十二
- 第十二章讲义