C++ 的继承与多态 详解2

2 多态性

2.1多态性描述

什么叫多态:
**多态是指同样的消息被不同的对象接收时导致不同的行为。**所谓的消息是指对类成员函数的调用,不同的行为是指不同的实现,也就是调用了不同的函数。

2.1.1 多态的类型

多态可以分为四类: 重载多态,强制多态,包含多态,参数多态。前两种称为专用多态,后两种称为通用多态。函数重载,运算符重载属于重载多态。强制类型转换属于强制多态。
包含多态是类族中定义不同类中同名成员函数的多态行为,主要通过虚函数来实现。参数多态与类模板相关联,在使用时必须赋予实际的类型才可以实例化。

本章重点介绍重载和包含多态。虚函数是实现包含多态的基本机制。

2.1.2 多态的实现

多态从实现的角度可以划分为两类:编译时多态和运行时多态前者在编译的过程中确定了同名操作的具体操作对象,而后者则实在程序运行的过程中动态的确定操作所针对的具体对象。这种确定操作对象的过程就是绑定,绑定是指计算机程序自身彼此关联的过程,也就是把一个标识符名和一个存储地址联系在一起的过程。静态绑定和动态绑定分别对应着多态的两种实现形式。
绑定工作在编译阶段完成的情况称为静态绑定,有些多态类型,其同名操作的具体对象能够在编译连接阶段确定,通过静态绑定解决,如重载,强制,参数多态。绑定工作在程序运行阶段完成的情况成为动态绑定包含多态操作对象的确定就是通过动态绑定确定的。

2.2 运算符重载

待补充

2.3 虚函数

虚函数是动态绑定(包含多态)的基础,虚函数必须是非静态成员函数。虚函数经过派生后在类族中就可以实现运行过程中的多态。

根据类型兼容性规则,可以使用派生类的对象代替基类对象,如果用基类类型的指针指向派生类的对象,就可以通过这个指针来访问该对象,但问题是访问到的只是从基类继承来的同名成员。如果需要通过基类的指针指向派生类的对象来访问派生类中某个与基类同名的成员,那么首先在基类中将这个同名函数声明为虚函数。这样,通过基类类型的指针,就可以使不同派生类的不同对象产生不同的行为,就实现了包含多态。

2.3.1 一般的虚函数成员

virtual 函数类型 函数名(形参表)

虚函数声明只能出现在类定义的函数原型中,而不能在成员函数实现的时候。
运行过程中的多态要满足三个条件:
(1) 类之间满足赋值兼容规则
(2) 要声明虚函数
(3) 要由成员函数来调用或者是通过指针,引用来访问虚函数。如果是使用对象名来访问虚函数,则绑定在编译过程中就可以进行(静态绑定),而无需在运行过程中进行。
习惯:虚函数一般不声明为内联函数,因为对虚函数的调用需要动态绑定,而对内联函数的处理是静态的,所以虚函数一般不能以内联函数处理。但将虚函数声明为内联函数也不会引起错误。

虚函数代码示例

#include <iostream>
using namespace std;

class Base1{
   
public:
	virtual void display() const;
};

void Base1::display() const
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值