多态:即多种形态。对不同对象发送同一消息,不同对象会做出不同的响应。多态分为静态多态和动态多态。
1.静态多态:
静态多态又称编译期多态:是指在**编译阶段就知道程序执行到这里接下来会执行哪个函数。**例如:函数重载,对象名加点操作符执行函数等都是静态多态。函数重载是函数名修饰规则从而确定执行哪个函数,而对象名加点操作符是通过this指针来确定的。
2.动态多态:
动态多态是利用虚函数实现运行时的多态,即在编译期并不知道接下来执行哪条语句,只有运行到这里才知道接下来要调用哪个函数。
实现动态多态的条件:
1.函数在基类中声明为虚函数,并且在派生类中重写;
2.对象的父类指针或引用,如果对象指向子类(子类对象的引用/指针赋给基类对象引用/指针),则调子类的虚函数;如果对象指向父类对象,则调父类的虚函数。
class A
{
public:
virtual void func1()
{
cout << "A::func1()" << endl;
}
void display()
{
cout << "A::display()" << endl;
}
void display(int i)
{
cout << "A::display(int i)" << endl;
}
protected:
int _a;
};
class B : public A
{
public:
virtual void func1()
{
cout << "B::func1()" << endl;
}
protected:
int _b;
};
void func(A& a)
{
a.func1(); //动态多态
a.display(); //函数重载 即静态多态
a.display(10);
}
int main()
{
A a;
B b;
func(a);
func(b);
system("pause");
return 0;
}