多态是什么?
- 多态(polymorphism)是面向对象编程(OOP:object oriented programming)的一个重要特征,顾名思义为多种形态,详细解释为一个接口,多种实现,即方法的实现应取决于调用该方法的对象。多态分为静态多态和动态多态。
- 静态多态。编译时多态是静态多态,在编译时就可以确定使用的接口。静态多态往往通过函数重载和函数模板(泛型编程)来实现。
- 动态多态。运行时多态称为动态多态,具体引用的接口在运行时才能确定。最常见的用法就是声明基类的指针,利用该指针指向任意一个子类对象,调用相应的虚函数,可以根据指向的子类的不同而调用不同的方法。在使用基类指针或引用指向子类对象时,调用的函数是子类中重写的函数,这样就实现了运行时函数地址的动态绑定,即动态联编。动态多态是通过“继承+虚函数”来实现的,只有在程序运行期间(非编译期)才能判断所引用对象的实际类型,根据其实际类型调用相应的方法。(如果没有使用虚函数,即没有利用 C++ 多态性,则利用基类指针调用相应函数的时候,将总被限制在基类函数本身,而无法调用到子类中被重写的函数。因为没有多态性,函数调用的地址将是一定的,而固定的地址将始终调用同一个函数)。
#include <iostream>
using namespace std;
class Drink{
public:
virtual void drink(){
}
virtual ~Drink(){
}
};
class Tea:public Drink{
public:
Tea(){
cout << "create Tea fun" << endl;
}
void drink(){
cout << "drink Tea" << endl;
}
~Tea(){
cout << "destroy Tea fun" << endl;
}
};
class Milk:public Drink{
public:
Milk(){
cout << "create Milk fun" << endl;
}
void drink(){
cout << "drink Milk" << endl;
}
~Milk(){
cout << "destroy Milk fun" << endl;
}
};
int main(int argc, char const *argv[])
{
Drink* t = new Tea;
t->drink();
delete t;
t = NULL;
Drink* m = new Milk;
m->drink();
delete m;
m = NULL;
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)