覆盖(override):如果派生类创建的成员函数具有与基类中的成员函数相同的返回类型和签名,但是具有新的实现
example:
class Mammal:
void Sleep() const {std::cout<<"I'm sleeping\n";}
void Sleep(int time) const {std::cout<<"I'm sleeping"<<time<<"\n";}
void Sleep(int time, int week) {std::cout<<"I'm sleeping"<<time<<week<<"\n";}
class Dog:public Mammal:
void Sleep() const {std::cout<<"you're sleeping\n";}
Mammal中重载了Sleep()方法
Dog中覆盖了Sleep()方法
注意:Dog覆盖了Sleep()方法,会导致隐藏了Mammal中使用Sleep这个名称的所有方法,即Sleep(),Sleep(int time), Sleep(int time, int week)
2.调用基类方法
Dog fido;
Mammal bigAnimal;
bigAnimal.Sleep()
bigAnimal.Sleep(7)
bigAnimal.Sleep(7,8)
fido.Sleep() //调用自己的Sleep方法
fido.Sleep(6) //error, Mammal的Sleep(int time)被隐藏,
fido.Mammal::Sleep(6) //正确,使用基类名称,调用隐藏的基类方法