c++多态实现的机制
1、 什么是多态?
顾名思义就是同一事物在不同场景的不同形态。
静态多态是在编译期间编译器可以根据实参来确定的,主要体现在两个方面函数重载和泛型。
函数重载
int Add(int left, int right)
{
return left + right;
}
double Add(double left, int right)
{
return left + right;
}
int main()
{
Add(10, 20);
Add(10.0,20);
return 0;
}
2、泛型
vector<int> a;
vector<double> b;
动态多态
什么是动态多态?
动态多态,顾名思义就是在程序运行时期才能确定的多态,通过指针和引用所指对象来确定调用哪个类的虚函数。
动态多态的条件:
●基类中必须包含虚函数,并且派生类中一定要对基类中的虚函数进行重写。
●通过基类对象的指针或者引用调用虚函数。
重写 :
(a)基类中将被重写的函数必须为虚函数(上面的检测用例已经证实过了)
(b)基类和派生类中虚函数的原型必须保持一致(返回值类型,函数名称以及参数列表),协变和析构函数(基类和派生类的析构函数是不一样的)除外
协变:基类(派生类)的虚函数返回基类(派生类)的指针(引用)
总结一道面试题:
什么函数不能定义为虚函数?
静态成员函数(没有this)
析构函数
全局函数(没有this)
友元函数(没有this)