问题一
重载、屏蔽、复写的区别是什么?
重载:相同作用域下,同名函数因为函数名相同,具有不同的参数列表,而表现出不同的行为和功能。
运用范围:重载既可以发生在全局作用域又可以发生在类的成员函数下。属于静态多态性,联编方式为静态联编。
屏蔽(隐藏):派生类中有与基类冲突的命名成员。即在派生类和基类之间存在相同的函数名称。但是函数原型不同。
在通过派生类对象调用同名成员函数时,总是会调用派生类中的这个同名成员函数。除非加上基类的作用与解析运算符
才能调用基类的同名成员。
运用范围:和基类同名但是函数原型不同的派生类新增的成员函数。一般要避免这种类设计。
复写(覆盖、重写、重定义):这是派生类从基类中继承而来的同名成员函数,但是因为业务需要,需要提供一个
派生类的实现版本。通常都是用于支持多态。因为,C++中,要把派生类打算重新定义的成员函数申明为虚函数
用以支持多态,而那些不打算在派生类重新定义的成员函数不应该申明为虚函数。
运用范围:继承自基类的同名成员函数,函数原型和基类相同,通常为了支持多态。因此,大部分这样的函数都是虚函数。
复写需要注意的一点是:原型中的返回值类型如果是基类的指针或引用,在派生类中则可以是派生类的指针和引用
但是这只能在返回类型中有这个宽限,参数类型不能这样做。