欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

关于C++多态的基础知识讲解

程序员文章站 2022-03-26 17:49:35
一.多态性有两种表现形式: 1)编译时多态性:同一对象在收到相同的消息却产生不同的函数调用,一般通过函数重载来实现,在编译时就实现了绑定,属于静态绑定。 2)运行时多态性:不同对象在收到相同消息时产...

一.多态性有两种表现形式:

1)编译时多态性:同一对象在收到相同的消息却产生不同的函数调用,一般通过函数重载来实现,在编译时就实现了绑定,属于静态绑定。

2)运行时多态性:不同对象在收到相同消息时产生不同的动作,一般通过虚函数来实现。

二.多态和非多态的实质区别

函数地址为动态绑定还是静态绑定。

三.多态的作用

对于封装,可以使代码模块化。

对于继承,可以扩展已经存在的代码。

而多态,是为了接口重用。

四.多态最常见的用法

最常见的用法就是声明基类的指针,利用该指针指向任意一个子类对象,调用相应的虚函数,可以根据指向的子类的不同而实现不同的方法。如果没有使用虚函数的话,即没有利用c++多态性,则利用基类指针调用相应的函数的时候,将总被限制在基类函数本身,而无法调用到子类中被重写过的函数。因为没有多态性,函数调用的地址将是一定的,而固定的地址将始终调用到同一个函数,这就无法实现一个接口,多种方法的目的了。

五.扩展了解隐藏规则

本来仅仅区别重载与覆盖并不算困难,但是c++的隐藏规则使问题复杂性陡然增加。

这里“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:

**1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏。(注意别和重载混淆)

2)如果派生类的函数与基类的函数相同,但是基类没有virtual关键字,那么基类的函数将被隐藏。(注意别和覆盖混淆)。**