//多态就是通过同一个行为,对象不同会产生不同的结果
// 必须通过基类的指针或者引用调用虚函数
// 被调用的函数必须是虚函数, 并且派生类必须要对继承的基类的虚函数进行重写
#include<iostream>
using namespace std;
class adults {
public:
virtual void buyticket() {
cout << "adults tickets" << endl;
}
};
class student :public adults {
public:
virtual void buyticket() {
cout << "student tickets" << endl;
}
};
void getticket(adults * ad) {
ad->buyticket();
}
class person {
public:
virtual void print() { // 因为参数(类型,数量,顺序)一致,此处发生了函数的重写
cout << "It's person print" << endl;
};
};
class child1 : public person {
public:
virtual void print() {
cout << "It's student print" << endl;
}
};
//如果函数名相同,但是参数中(顺序、个数、类型)不同的话,那么就会发生覆盖
class Base {
public:
virtual void show(int num = 10) {
cout << "Base:" << num << endl;
}
};
class Base1 : public Base {
public:
virtual void show(int num = 20) { // 因为有了缺省值,在运行的时候多态绑定Base1,会使用Base的缺省值运行Base1
cout << "Base1:" << num << endl;
}
};
int main() {
adults a;
getticket(&a);
student s;
getticket(&s);
person* p = new child1();
p->print(); //此处输出student
person* p1 = new person(); // 此处输出person
p1->print();
Base* B1 = new Base1();
B1 ->show(); // 输出10
return 0;
}
```