没有合适的资源?快使用搜索试试~ 我知道了~
C++多态与虚函数,本章所讲的多态性指在继承类中与基类同名、同参数、同类型函数的不同行为。
资源详情
资源评论
资源推荐
7.1
7.1
多态性概述
多态性概述
7.2
7.2
虚函数
虚函数
7.3
7.3
抽象类
抽象类
7.4
7.4
综合实例
综合实例
第
第
7
7
章
章
多态与虚函数
多态与虚函数
一种语言若不支持多态,则不能称之为面向对象的程序设计语言。本
一种语言若不支持多态,则不能称之为面向对象的程序设计语言。本
章要讨论的多态性与前面我们介绍的继承、封装等一样,都是面向对象程
章要讨论的多态性与前面我们介绍的继承、封装等一样,都是面向对象程
序设计语言中的重要特征。多态性与继承是密不可分的,本章所讲的多态
序设计语言中的重要特征。多态性与继承是密不可分的,本章所讲的多态
性指在继承类中与基类同名、同参数、同类型函数的不同行为。
性指在继承类中与基类同名、同参数、同类型函数的不同行为。
一般来说,
一般来说,
C++
C++
语言支持两种不同类型的多态:编译时多态和运行时多
语言支持两种不同类型的多态:编译时多态和运行时多
态。本章讨论的内容主要集中在运行时多态及其实现。
态。本章讨论的内容主要集中在运行时多态及其实现。
多态
多态
就是指不同的对象接受到相同的消息时产生不同的响应动作,即对应
就是指不同的对象接受到相同的消息时产生不同的响应动作,即对应
相同的函数名,却执行了不同的函数体
相同的函数名,却执行了不同的函数体
(
(
当然,这些函数体还是要事先定
当然,这些函数体还是要事先定
义好,以便调用
义好,以便调用
)
)
。
。
种把程序标示符与和一个存储地址相联系的过程,称为
种把程序标示符与和一个存储地址相联系的过程,称为
联编
联编
(binding
(binding
,又
,又
译为绑定
译为绑定
)
)
。
。
【
【
7.1
7.1
多态性概述
多态性概述
】
】
静态联编:
静态联编:
指这种联编在编译阶段完成的,由于联编过
指这种联编在编译阶段完成的,由于联编过
程是在程序运行前完成的,所以又称为早
程是在程序运行前完成的,所以又称为早
期联编。
期联编。
静态联编能够实现编译时多态。
静态联编能够实现编译时多态。
动态联编:
动态联编:
指这种联编要在程序运行时动态进行,所以
指这种联编要在程序运行时动态进行,所以
又称为晚期联编。
又称为晚期联编。
动态联编可以实现运行时
动态联编可以实现运行时
多态。
多态。
要实现静态联编,在编译阶段就必须确定标示符
要实现静态联编,在编译阶段就必须确定标示符
(
(
如函数名
如函数名
)
)
和代码之间的
和代码之间的
对应关系。
对应关系。
重载多态:
重载多态:
是函数重载。
是函数重载。
强制转换多态:
强制转换多态:
不同类型的数据类型进行
不同类型的数据类型进行
混合运算时要进行的强制
混合运算时要进行的强制
类型转换。
类型转换。
包含多态:
包含多态:
指在基类及其派生类族中同名
指在基类及其派生类族中同名
函数的不同函数实现,及其在
函数的不同函数实现,及其在
运行时的不同响应。
运行时的不同响应。
参数多态:
参数多态:
在后面章节中进行探讨。
在后面章节中进行探讨。
编译时多态和
编译时多态和
运行时多态的
运行时多态的
严格划分
严格划分
都是
都是
通用多态
通用多态
都是
都是
专用多态
专用多态
【
【
7.1
7.1
多态性概述
多态性概述
】
】
支持两种编译方式
支持两种编译方式
EXAMPLE7_01.H
EXAMPLE7_01.H
#ifndef EXAMPLE7_01_H
#ifndef EXAMPLE7_01_H
#define EXAMPLE7_01_H
#define EXAMPLE7_01_H
#include <iostream.h>
#include <iostream.h>
class Base
class Base
//
//
声明基类
声明基类
Base
Base
{
{
private:
private:
double dblBaseTest;
double dblBaseTest;
public:
public:
Base(double dblInitial=0.0){dblBaseTest=dblInitial;}
Base(double dblInitial=0.0){dblBaseTest=dblInitial;}
~
~
Base(){}
Base(){}
void setBase(double dblSet){dblBaseTest=dblSet;}
void setBase(double dblSet){dblBaseTest=dblSet;}
double getBase(){return dblBaseTest;}
double getBase(){return dblBaseTest;}
void display();
void display();
//
//
用于显示基类中的私有数据成员
用于显示基类中的私有数据成员
};
};
例
例
7-1
7-1
通过基类指针访问派生类对象
通过基类指针访问派生类对象
【
【
7.2
7.2
虚函数
虚函数
】
】
class FromBase:public Base
class FromBase:public Base
//
//
从基类
从基类
Base
Base
以公有派生类
以公有派生类
FromBase
FromBase
{
{
private:
private:
double dblFromTest;
double dblFromTest;
public:
public:
FromBase(){}
FromBase(){}
FromBase(double dblInitBase,double dblInitFrom):Base(dblInitBase)
FromBase(double dblInitBase,double dblInitFrom):Base(dblInitBase)
{dblFromTest=dblInitFrom;}
{dblFromTest=dblInitFrom;}
~
~
FromBase(){}
FromBase(){}
void setFrom(double setFrom){dblFromTest=setFrom;}
void setFrom(double setFrom){dblFromTest=setFrom;}
double getFrom(){return dblFromTest;}
double getFrom(){return dblFromTest;}
void display();
void display();
//
//
显示派生类的私有数据成员
显示派生类的私有数据成员
};
};
#endif
#endif
//
//
类的声明结束
类的声明结束
EXAMPLE7_01.CPP
EXAMPLE7_01.CPP
//
//
类的实现开始
类的实现开始
#include <iostream.h>
#include <iostream.h>
#include <EXAMPLE6_01.H>
#include <EXAMPLE6_01.H>
void Base::display()
void Base::display()
{
{
通过基类指针访问派生类对象
通过基类指针访问派生类对象
例
例
7-1
7-1
剩余39页未读,继续阅读
yangzhanshan
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于UC3842+LTS26Q1565A设计PC机充电器 硬件(原理图+PCB)工程文件.zip
- Hive SQL经典面试题,大数据SQL经典面试题
- Qt实现喷码器代码,实现二维码、条形码、图形的旋转、移动等
- 基于LM324芯片比较器传感器模块AD09设计硬件(原理图+PCB)工程文件.zip
- HTTP请求 - 记一笔-添加记账.jmx
- 2205040245凡永超硬间隔svm.ipynb
- Qt喷码器demo,演示软件,不是代码
- 目标跟踪-基于目标中心点同时进行目标检测+目标跟踪算法实现-项目源码-优质项目实战.zip
- Python《文本特征分析-全唐诗数据挖掘及分析 》+源代码
- Netron-Setup-4.5.0
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0