区分函数重载、隐藏、函数覆盖,确定使用哪个成员

来源:互联网 发布:格式转换器 mac 编辑:程序博客网 时间:2024/06/06 02:43

重载、隐藏与覆盖的概念:

  • 函数重载:在相同作用域下,两个或多个函数,具有相同的函数名,但形参的个数或类型不同,编译器根据形参和实参的类型及个数的最佳匹配,自动确定调用哪个函数。
  • 隐藏:如果具有两个或多个具有包含关系的作用域,外层声明了一个标识符(变量或函数),而内层没有再次声明同名的标识符,那么外层标识符在内层仍然可见;如果内层声明了同名标识符,则外层标识符在内层不可见,即内层标识符隐藏了外层同名标识符。对于类的派生而言,派生类作用域包含在基类作用域的内层。(同名隐藏
  • 覆盖:覆盖与虚函数密切相关,派生类虚函数覆盖基类虚函数。实现通过基类指针或引用对象访问派生类对象的虚函数。

确定调用基类还是派生类成员:

  • 满足类型兼容规则,不满则虚函数多态条件时,基类的对象、指针、引用可以替换(表示)派生类对象,但只能使用派生类从基类继承过来的成员。
  • 满足虚函数多态条件时,基类的指针、引用可以替换(表示)派生类对象,且通过动态绑定机制使用派生类中的虚函数。



原创粉丝点击