C++基础之多态性与虚函数

1、多态定义:计算机在编译时或运行时,根据我们实际的代码自动调用不同的函数的能力为多态。

2、多态分类:
(编译时)静态多态:前期绑定:a)函数重载
                                                      b)模板

(运行时)动态多态:(默认)后期绑定:根据指针的实际数据类型自动调用不同函数(功能)

3、动态多态实现原理:

        1>子类继承了所有父类的产品

        2> virtual === 基类添加了一个虚拟函数表

4、动态多态实现效果:如果子类重载虚函数,则调用自己的版本,否则调用父类函数版本。同一类族中不同类的对象,对同一函数调用作出不同的响应。
5、虚函数的缺点:
       1>多了堆区的(虚拟函数表)占内存
       2>调用时多查找了虚拟函数表,性能低

       3>虚函数只能够使用在实例函数上(static不行)

[注意:构造函数不能使用虚函数

析构函数可以声明为虚函数]
6、虚拟函数表与类相关,一个类只有一个虚拟函数表,同一个类的多个对象调用同一个虚拟函数表(但每个对象都有一个虚拟函数表指针)

7、给基类函数加virtual(声明时),将子类对象地址赋给基类指针,则指针会根据实际子类函数不同调用对应的函数。【如果不加virtual,按照类的继承,则调用的是父类函数。--》( 在类的继承层次结构中, 在不同的层次中可以出现名字相同、参数个数和类型都相同而功能不同的函数。编译系统按照同名覆盖的原则决定调用的对象。)】

例子:

[Circle类继承Cshape,Cshape类中有一个成员变量penwidth,一个成员函数draw()]
基类:Cshape *p[3]; p[0]=&circle;


注意:

虚函数只能是类的成员函数。且一个函数被声明为虚函数后,在派生类中与此函数同名同参同返回值的函数一律为虚函数。

猜你喜欢

转载自blog.csdn.net/sinat_22991367/article/details/76760092