多态的定义及实现
通俗的来讲,就是多形态,不同的对象去完成同一个行为会有不同的状态。(比如买票的话,成人票是200,学生可以半价买票,军人可以优先买票)
在编程中,多态就是不同继承关系的类对象,去调用同一个函数,会有不同的行为。
1.多态的构成条件
- 必须用基类的引用或指针来调用这个虚函数
- 被调用的函数必须是虚函数,并且派生类必须对基类的虚函数进行重写
如果不满足多态的话,调用哪个函数跟类型有关,people是哪个类型的,调用的就是哪个类型的成员函数。
如果满足多态的话,调用哪个函数跟对象有关,传的是哪个对象,调用的就是哪个的成员函数。
2.虚函数
被virtual修饰的类成员函数称为虚函数
比如下面这个函数就是虚函数
class Person
{
public:
virtual void BuyTicket()
{
cout << "买票-全价" << endl;
}
};
3.虚函数的重写(覆盖)
派生类中有一个跟基类完全相同的虚函数,即派生类虚函数与基类虚函数的返回值类型、函数名、参数列表完全相同,这样称之为派生类的虚函数重写(覆盖)了基类的虚函数
class Person
{
public:
virtual void BuyTicket()
{
cout << "买票-全价" << endl;
}
};
class Student : public Person
{
public:
virtual void BuyTicket()
//重写基类虚函数时,派生类也可以不加上virtual关键字,这样也构成重写,但是这样的写法不规范,不推荐使用
//void BuyTicket()
{
cout << "买票-半价" << endl;
}
};
void Func(Person& people