函数重载有两种,一种是同一个作用域里面几个不同参数同名的函数。
这个大家都知道。
还有一个是继承关系里面,子类和父类同名的函数构成重载。
很多人不知道这是为什么。其实这个是C++编译器的魔术来的。
其实C++根本不是他妈的面向对象,就是玩鬼。所谓的类,它的成员变量构成一个结构体,成员函数其实就是全局普通函数,只是传递了一个this指针。所以所谓子类和父类同名的函数构成重载,其实就是同一个作用域里面几个不同参数同名的函数,第一个this参数的类型不同而已。
重载的作用是实现了多态的思想。

解决方案 »

  1.   

    难道你要找的是override  ?
      

  2.   

    我觉得lz说的时候已经给overwrite给去了,只是没有点出来!
      

  3.   

    这个叫重写
    重写父类要有virtual关键字,子类有override关键字
      

  4.   

    往深里说,编译器最终生成二进制,在二进制之前是汇编,所谓的函数调用就是参数压栈执行。在这一层次来说没有全局不全局,私有不私有的。你查看编译后的符号表,所谓的重载只是编译器生成不同的函数名而已。而覆写,只是编译器根据虚函数表执行不同的函数。每个类都有自己的虚函数表。
    所以,对于this指针来说,其实是编译器在调用的时候,把实例的指针作为第一个参数压栈(看调用方式,也可能最后一个进栈)。比如,对于instance.f(int,int)来说,编译器会将函数改写成instance.f((instance*),int,int)
    从总体的角度来说,面向对象是一种思想,不是什么语法什么工具或者编译器。或者,你可以粗糙的这样认为,面向对象是帮你构造了一个“框架”,让你能够将代码以一种更符合现实的方式去组织。