多态
多态分为静态多态和动态多态。
**静态多态:**传不同参数,编译出的函数就会不同(如函数重载、函数模板等)。 **动态多态:**同一个行为(函数),不同的对象完成的方式或者结果不一样。
语法
#include <iostream>
using namespace std;
class Person {
public:
virtual void BuyTicket() {
cout << "买票——全价" << endl;
}
};
class Student : public Person {
public:
virtual void BuyTicket() {
cout << "买票——75 折" << endl;
}
};
void Func(Person* ptr) {
ptr->BuyTicket();
}
int main() {
Person ps;
Student st;
Func(&ps); // 调用父类版本
Func(&st); // 调用子类版本
return 0;
}
实现多态的重要条件
- 必须是父类的指针或引用去调用虚函数。父类指针既可以指向父类也可以指向子类。
- 被调用的函数必须是虚函数(关键字
virtual在这里和虚继承的virtual没有关系)。 - 子类必须对父类的虚函数进行重写。
重写(覆盖)的条件
同名、同参数、的,,即可构成重写。如果没有 修饰,就会被函数隐藏。


