如何解释多态:
静态(编译时期)的多态:
函数重载:
bool compare (int, int) {}
bool campare(double, double) {}
在编译阶段确定好调用的函数版本
campare(10,20); call compare_int_int
campare(10.5,10.5); call campare_double_doubel
模板(函数模板与类模板):
template
bool campare(T a, T b) {}
campare(10,20); =>实例化一个compare
campare(10.5,10.5); =>实例化一个compare
动态(运行时期)的多态:
在继承结构中,基类的指针或引用指向派生类对象,通过该指针或引用调用同名覆盖方法(虚函数),基类指针指向哪个派生类对象,就会调用哪个派生类的覆盖方法,称为为多态。
多态底层是通过动态绑定来实现的。
#include <iostream>
using namespace std;
class Animal
{
public:
Animal(string name) :_name(name){}
virtual void show(){}//虚函数接口
protected:
string _name;
};
class cat:public Animal
{
public:
cat(string n) :Animal(n) {}
void show() { cout << _name << "miao miao ! "<< endl; }//派生类进行重写
};
class dog :public Animal
{
public:
dog(string n) :Animal(n) {}
void show() { cout << _name << "wang wang ! " << endl; }
};
void show(Animal *p)//外部统一的接口
{
p->show();//虚函数 动态绑定
}
int main()
{
cat cat("mimi");
dog dog("erha");
show(&cat);
show(&dog);
return 0;
}
继承的好处:
1.可以做代码的复用
2.在基类中给派生类提供统一的基函数接口,让派生类进行重写,就可以使用多态了