什么是多态?
在了解多态的概念之前我们首先要知道什么是虚函数。
虚函数就是类的成员函数前面加关键字virtual,则这个成员函数叫做虚函数。这与虚继承中的virtual一点关系都没有!只是都用了virtual罢了。
虚函数的重写(覆盖):当在子类的定义了一个与父类完全相同 的虚函数时,则称子类的这个函数重写(也称覆盖)了父类的这个虚函数。
完全相同指的是函数名相同,参数相同,返回值相同(协变除外),但是访问修饰符可以不相同。
那么说到这里,我们顺便来区分一下重载,重定义,重写的区别:
重载:在同一作用域内,函数名相同,参数个数/类型不同,返回类型可同可不同。
重定义(隐藏):只要子类与父类同名即可构成重定义。
以上就是关于虚函数索要了解的,那么什么是多态呢?
多态必须要满足的两个条件:
(1)子类必须是虚函数的重写
(2)调用的时候必须是父类的指针或引用。
下面我们通过例子来看看多态的具体实现
#include <iostream>
using namespace std;
class Person
{
public:
virtual void buyticket()
{
cout<<"全价票"<<endl;
}
};
class Student:public Person
{
public:
virtual void buyticket()//重写了虚函数
{
cout<<"半价票"<<endl;
}
};
void fun(Person& p)
{
p.buyticket();
}
int main()
{
Person p;
Student s;
fun(p); //调用全价票的buyticket()函数
fun(s); //调用半价票的buyticket()函数
system("pause");
return 0;
}