多态,多种形态,去完成某个行为,当不同的对象去完成会产生不同的形态。
1.多态的定义及实现
多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。如student继承了people。person对象买票全价,student对象买票半价。在继承中构成多态要两个条件:
- 调用函数的对象必须是指针或者引用
- 被调用的函数必须是虚函数,且完成了虚函数的重写
2.虚函数
1)什么是虚函数
在类的成员函数前加virtual
class Person {
public:
virtual void BuyTicket() { cout << "买票-全价" << endl; }
};
2)虚函数的重写
派生类中有一个和基类完全相同的虚函数,就称虚函数重写了。基类的虚函数完全相同是指函数名、参数、返回值相同,虚函数的重写也叫虚函数的覆盖
class Person {
public:
virtual void BuyTicket() { cout << "买票-全价" << endl; }
};
class Student : public Person {
public:
virtual void BuyTicket() { cout << "买票-半价" << endl; }
};
void Func(Person& p)
{
p.BuyTicket();
}
int main()
{
Person ps;
Student st;
Func(ps);
Func(st);
return 0;
}
3)重载、覆盖(重写)、隐藏(重定义)的对比