C++基础之多态性与虚函数
2017-08-15 22:34
218 查看
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;
注意:
虚函数只能是类的成员函数。且一个函数被声明为虚函数后,在派生类中与此函数同名同参同返回值的函数一律为虚函数。
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;
注意:
虚函数只能是类的成员函数。且一个函数被声明为虚函数后,在派生类中与此函数同名同参同返回值的函数一律为虚函数。
相关文章推荐
- c++基础---C++之多态性与虚函数
- C++基础(十一)多态性与虚函数
- C++ 基础知识点 九 第10章 多态性与虚函数
- C++---基础篇(函数)
- 【C++基础之十四】函数的缺省参数
- C++基础---函数指针
- C++基础5:函数和函数指针
- C++基础复习---1(函数指针,指针函数)
- [C++]基础知识---函数
- C++ 基础学习笔记(2)---函数(测试题)
- 【基础C&C++】内存函数
- C++基础:常量成员函数特殊说明
- C++语言基础 例程 函数中的引用
- c++基础知识,有现成的函数不用,非的自己设计算法,这不是坑爹吗?
- 【C++】类和对象--基础知识+四个默认成员函数+运算符重载
- [C++学习历程]基础部分 C++中的函数中的值参数、地址参数、引用参数实际例子
- 【C++的探索路14】多态与虚函数之基础篇
- [C++基础]重载、覆盖、多态与函数隐藏(1)
- C++基础知识——二维数组做函数参数
- C++ 复习 :知识点 多态性与虚函数