当前课程知识点:VC++面向对象与可视化程序设计(下):MFC编程基础 >  第6章 MFC基础知识 >  6-2 C++的基本知识 >  6-2-10 类的继承

返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频课程列表

6-2-10 类的继承在线视频

6-2-10 类的继承

下一节:6-2-11 多态性和虚拟函数

返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频列表

6-2-10 类的继承课程教案、知识点、字幕

类的继承

类是C++中进行数据封装的逻辑单位

C++还提供了一种继承机制

利用这种机制

用户可以通过增加、修改或替换

给定类中的方法来对这个类进行扩充

以适应不同的应用要求

利用继承机制

程序员可以在已有类的基础上构造新类

这一性质使得类支持分类的概念

如果不使用分类

则对每一个对象都定义其所有的属性

使用分类后

可以只定义某个对象的特殊属性

每一层的对象只需定义属于它本身的属性

其他属性可以从上一层继承下来

派生类

派生类也称子类

是C++提供继承的基础

也是对原来的类进行扩充和利用的一种基本手段

C++派生类继承或修改原有类中的部分或全部方法

而且可以增加原来类中没有的新方法

以满足使用派生类的需要

一个类可以继承另一个类的属性

其中被继承的类叫做基类

继承后的产生的类叫做派生类

基类也成为父类

派生类也称为子类

派生类从基类中继承所有的公共部分

请大家注意这个公共部分

并可以增加数据成员和成员函数

这使程序员可以根据基类与派生类的差异

来建立特定对象的新类

对相同部分的代码不必重新定义

此外还可以为多个不同的类提供公用界面

使程序设计人员更容易表达类型间的关系

从而减少程序设计的工作量

任何类都可以作为基类

一个基类可以有一个或多个派生类

一个派生类还可以成为另一个类的基类

定义派生类的一般格式如下

关键字class这是少不了的

然后是派生类的名字

访问属性

基类名

这里就是里面该定义的成员

其中派生类名是新定义的类的名

访问属性是访问说明符

可以是private、public跟protected三者之一

缺省值是private

派生类的名和访问属性之间这时候请大家注意

用的是冒号单冒号隔开

前面介绍的一个类下面成员函数的定义

这时候分割是用双冒号

派生类的访问属性由访问控制来确定

它是按下述的方式来继承基类的访问属性

如果访问属性是public

访问控制有这么几点

基类的public成员是派生类的public成员

基类的private成员是不可访问的

除非基类中声明的友元函数授权访问

基类的protected成员对基类仍保持protected属性

这是针对访问属性为public的

如果访问属性是protected

基类的public跟protected成员

均是派生类的protected成员

除非基类中声明的友元函数授权访问

基类中声明为protected的数据只能被基类的成员函数

或其派生类的成员函数访问

不能被派生类以外的成员函数访问

如果访问属性定义为private

那基类的public跟protected成员都是派生类的private成员

基类的private成员是不可访问的

除非基类中声明的友元函数授权访问

那也就是说

这里定义了访问属性跟访问控制这个地方

也就是说针对不同的属性

对访问是有相应的控制的

那访问属性及其控制

大家要逐步地熟悉起来

基类名可以有一个

也可以有多个

如果只有一个基类

则这种继承方式叫做简单继承

如果基类名有多个

则这种方式的继承叫做多重继承

基类之间用逗号隔开

理论上说

子类继承了基类的所有成员

除了如下情况

第一构造函数constructor

和析构函数destructor

第二操作符重载符号operator等于某个成员

第三个是友元friends

多重继承就要比简单继承要复杂了

在C++中

一个class可以从多个class中继承属性或函数

只要在子类的声明中用逗号将不同基类分开就可以了

多重继承的格式与简单继承的格式基本相同

不一样的是

这里基类的话是一个基类名表

因为它从多个基类中继承下来

而前面介绍的简单继承

它这里就是一个基类名

不是一个基类名表

既然这里是基类名表

说明这里是多个基类

基类名表是两个或两个以上的基类名

各基类名之间用逗号隔开

在每个基类名之前都要指明访问属性

缺省的访问属性都是private

下面的程序定义的类MultiDerived继承基类Base1和Base2

它是实现多重继承的一个很好的例子

请大家看一下

这里定义了class1

protected是m_B1

定义了public Setm_B1

是把这里接收的值赋给m_B1

实际上就是给它初始化

我们又定义了Base2这个类

它的protected成员是m_B2

public成员是Setm_B2

也是把接收的x值对m_B2初始化

然后我们定义了MultiDerived

那这个就是我们的派生类

访问属性

public的Base1

跟public的Base2

从这里面派生出来了

它的公共成员这里就是定义了一个函数GetB1B2

定义了一个Result

Result的结果

m_B1跟m_B2的相加

因为它这个类是从public Base1跟public Base2中继承下来的

所以在这个里面是可以访问Base1跟Base2类里面的参数

所以在这里面可以直接把这两个数加起来

因为它可以访问

加起来后输出这结果

主函数定义了一个变量

这变量是MultiDerived类的对象

实际上就是把15的值赋给m_B1

通过调用Setm_B2把35的值赋给Base2的protected成员m_B2

调用GetB1B2

在这里它是把m_B1跟m_B2的值加和保存到Result里面

这个是原样打印的

就没问题了

然后就输出Result

显然Result输出的值就是15跟35的加和

所以这个结果应该是50

从这里我们就可以看到

M.Setm_B1实际上就是调用继承自基类Base1的成员函数

同样这个是调用继承自基类Base2的成员函数

而这个函数调用是调用派生类中自定义的成员函数

我们把程序运行一下

大家看到这就是运行结果

它的值就是50

这个结果跟我们代码分析的结果是一致的

上面的程序中

类MultiDerived继承自基类Base1跟Base2

继承了两个类的成员

可以访问基类Base1和Base2中定义为protected和public的成员

在主函数中

定义了类MultiDerived的对象M

然后分别调用Base1和Base2中的成员

完成初始化、计算和输出操作

多重继承在给程序设计带来极大方便的同时

也给程序带来了以下负面的问题

如果从类库的组织的角度看

多重继承必然会增加类库结构的复杂性

从而为程序的稳定性留下隐患

从程序设计的角度看

其负面影响就是容易带来二义性

如果基类的多个基类中都同时定义了同名的成员

则编译器将不能准确地理解程序员的意图

从而导致错误

因此使用多重继承要谨慎

VC++面向对象与可视化程序设计(下):MFC编程基础课程列表:

第0章 课前讨论

-讨论实录

--0-0

第6章 MFC基础知识

-6-1 MFC概述

--6-1 MFC基础知识

-6-2 C++的基本知识

--6-2-1 类

--6-2-2 对象

--6-2-3 类的方法

--6-2-4 内联函数

--6-2-5 构造函数和析构函数

--6-2-6 重载

--6-2-7 友元函数

--6-2-8 友元类

--6-2-9 指针

--6-2-10 类的继承

--6-2-11 多态性和虚拟函数

-6-3 MFC类的组织结构及主要的类的简介

--6-3-1 MFC类的组织结构

--6-3-2 根类

--6-3-3 应用程序结构类

--6-3-4 可视对象类

--6-3-5 通用类

--6-3-6 OLE类

--6-3-7 ODBC数据库

-6-4 MFC中全局函数和全局变量

--6-4 MFC中全局函数和全局变量

第7章 Windows标准控件在可视化编程中的应用

-7-1 概述

--7-1-1

--7-1-2

-7-2 按钮控件及其应用

--128B12447816EEF99C33DC5901307461

-7-3 按钮控件及其应用

--7-3

-7-4 静态控件

--7-4

-7-5 列表框控件

--7-5-1

--7-5-2

-7-6 编辑框控件

--7-6

-7-7 组合框控件

--7-7

-7-8 对话框通用控件

--7-8-1

--7-8-2

-讲义源代码

--html

第8章 在MFC中创建应用程序的资源

-8-1&2 资源的应用以及菜单资源的使用

--8-1-1

--8-1-2

-8-3 快捷菜单的创建及其应用

--8-3

-8-4 加速键资源的创建及其使用

--8-4

-8-5 工具条资源的创建及其使用

--8-5

-8-6 字符串资源的使用

--8-6

-8-7 位图资源的创建及其使用

--8-7

-课堂示例源代码

--html

-第一次作业内容及要求

--html

--第一次作业及答题链接--作业

第9章 单文档与多文档

-9-1 概述

--9-1

-9-2 Doc/View框架的主要成员

--Video

-9-3 文档操作中的一些重要概念

--Video

-9-4 SDI编程实例

--Video

-9-5 MDI编程实例

--9-5-1

--9-5-2

-课堂示例源代码

--html

-第二次作业内容及要求

--html

--第二次作业及答题链接--作业

第10章 多媒体应用程序的设计

-10-1 利用音频函数实现多媒体程序设计

--10-1-1

--10-1-2

--10-1-3

--10-1-4

-10-2 利用Windows Media Player控件实现多媒体程序设计

--10-2

-课堂示例源代码

--html

第11章

-例11-1

--例1

-例11-2

--例11-2

-例11-3

--例11-3

-例11-4

--例11-4

-11-1 ODBC介绍与引用

--11-1

-课堂示例源代码

--html

第三次作业及答题链接

-第三次作业及答题链接

6-2-10 类的继承笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。