C++多态,虚函数,虚函数表,纯虚函数
1、多态性
指相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动作。
C++支持两种多态性:编译时多态性,运行时多态性。
a、编译时多态性:通过重载函数实现 ,模板(2次编译)
b、运行时多态性:通过虚函数实现。
2、覆盖,隐藏,重载
重载,静态多态,一个类里面
覆盖, 虚函数 ,同参数,同名称,同返回
隐藏 :
1.1 基类非虚函数,子类与父类同名称(可能覆盖一大片父类函数)
1.2 基类非虚函数,派生类声明为virtual ,参数相同,此时virtual关键字失效
2.2 基类虚函数, 派生类不使用virtual, 形参不同,则丢失多态
2.3 基类和派生类都是 虚函数, 形参相同,返回值不同,报错
//////////////////////////
多态典型应用,抽象工厂模式,
///////////////////////////////////////////////////////////
虚函数表,动态绑定如何实现?
多重继承,一个基类(含虚函数)会有一个虚表指针,继承后,自己的虚函数放在第一个虚表后面。
D:A,B,C; 强转D对象为A,B,C的时候,地址不一样
////////////////////////////////////
构造函数与析构函数是否能定义为虚函数?能否抛出异常?
构造的时候必须要知道构造的东西结构吧,虚个鸡毛。。。析构的时候需要动态析构吧,不然工厂模式只析构基类,内存不是炸了? 构造和析构运行到一半,抛出异常,你构造个办成品?释放一半内存?可能以前真有人写出这种代码吧。。
构造函数和析构函数中能调用虚函数吗?
调用后不会使用(动态联编)多态特性,不建议使用!