什么是多态?
多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。
多态的实现条件
- 调用函数的对象必须是指针或者引用。
- 被调用的函数必须是虚函数,且完成了虚函数的重写。
那么什么是虚函数,什么又是虚函数的重写?
虚函数:就是在类的成员函数的前面加virtual。
虚函数的重写:派生类中有一个跟基类的完全相同虚函数,我们就称子类的虚函数重写了基类的虚函数。
完全相同是指,函数名、参数、返回值都相同。另外虚函数的重写也叫作虚函数的覆盖。
代码实现:
class A {
public:
virtual void fun() { cout << "行为1" << endl; }
};
class B : public A {
public:
virtual void fun() { cout << "行为2" << endl; }
};
void Test(A& p)
{
p.fun();
}
int main()
{
A ps;
B st;
Test(ps);//行为1。
Test(st);//行为2。
//若不构成多态皆为行为1。
system("pause");
return 0;
}
虚函数重写的一个例外:协变
重写的虚函数的返回值可以不同,但是必须分别是基类指针和派生类指针或者基类
引用和派生类引用。
代码举例: