C++中的多态分为静态多态和动态多态两种,其中:
静态多态在编译阶段实现,其原理是由函数重载实现,通过不同的实参调用其相应的同名函数。
动态多态通过虚函数实现,以下着重介绍
动态多态的两个必要条件:
- 必须通过基类的指针或者引用调用
- 被调用的必须是虚函数,且在派生类中实现了该虚函数的重写 (注意:只有虚函数才有重写这个概念)
此两个条件缺一不可
以下是一个动态多态的典型案例
class Person {
public:
virtual void buyBucket(){
std::cout << "全价" << std::endl;
}
};
class student:public Person {
public:
virtual void buyBucket() {
std::cout << "半价" << std::endl;
}
};
int main() {
Person p;
student s;
Person &tmp1 = p;
Person &tmp2 = s;//tmp2为基类Person对派生类student的引用
Person *tmp3 = &s;//tmp3为基类Person指向派生类student的指针
tmp1.buyBucket();
tmp2.buyBucket();
tmp3.buyBucket();
return 0;
}
何为通过基类的指针或者引用调用?
使用基类型的指针或者引用