多态条件:
1、调用函数是重写的虚函数
2、基类指针或者引用多态,不同对象传递过去,调用不同函数多态调用看的指向的对象普通对象,看当前者类型。
在继承中要
构成多态还有两个条件
:
1.
必须通过基类的指针或者引用调用虚函数
2.
被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写
虚函数重写的一些细节:
重写的条件本来是虚函数+三同(函数名、参数、返回值相同),但是有一些例外
1、派生类的重写虚函数可以不加virtual(建议大家都加上)
2、协变,返回值的指可以不同,但是要求返回值必须是父子关系指针和引用
class Person {
public:
virtual void BuyTicket() const { cout << "买票-全价" << endl; }
};
class Student : public Person {
public:
void BuyTicket() const { cout << "买票-半价" << endl; }
};
class A
{};
class B : public A
{};
class Person {
public:
virtual A* BuyTicket() const {
cout << "买票-全价" << endl;
return 0;
}
};
class Student : public Person {
public:
virtual B* BuyTicket() const {
cout << "买票-半价" << endl;
return 0;
}
};