多态概念
多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态
构成多态的条件
那么在继承中要构成多态还有两个条件:
- 必须通过基类的指针或者引用调用虚函数
- 被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。
什么是虚函数?
虚函数:即被virtual修饰的类成员函数称为虚函数。
class Person {
public:
virtual void BuyTicket() {
cout << "买票-全价" << endl;}
};
什么是重写?
构成重写的条件
- 基类和派生类的函数都是虚函数
- 函数名、参数、返回值要求全部一样。(区别重载、重定义的重要区别)
虚函数的重写(覆盖):派生类中有一个跟基类完全相同的虚函数(即派生类虚函数与基类虚函数的返回值类型、函数名字、参数列表完全相同),称子类的虚函数重写了基类的虚函数。
虚函数重写的例外
协变
派生类重写基类虚函数时,与基类虚函数返回值类型不同。即基类虚函数返回基类对象的指针或者引用,派生类虚函数返回派生类对象的指针或者引用时,称为协变
class A{
};
class B : public A {
};
class Person {
public:
virtual A* f() {
return new A;}
};
class Student : public Person {
public:
virtual B* f() {