覆盖:override
规则:派生类相应函数的函数名相同,两个函数分别在两个不同的作用域,返回值相同,参数相同,基类不需要有virtual且不能有static
效果:实现时不管参数是子类对象还是父类指针指向的子类对象,实现的都是子类函数
隐藏:hiding
规则:派生类相应函数的函数名相同,两个函数的作用域不同,返回值可相同可不同
参数分为两种情况:
- 参数不同时:无论有没有virtual关键字,基类都将被隐藏(与重载的不同在隐藏是在同一作用域,即不同的类里面,而重载是在同一个域中,即在一个函数或类中)
- 参数相同时:(这时会与覆盖就只有返回值有所不同),这时就是看virtual关键字了,有virtual时效果就是覆盖,没用virtual时效果就是隐藏
效果:实现时 根据参数指针对象的不同实现不同的函数,例如:
当用父类的指针指向子类对象的时候,父类指针调用的时父类函数;
当用直接用子类对象调用时,实现的时子类函数;