函数重载有两种,一种是同一个作用域里面几个不同参数同名的函数。
这个大家都知道。
还有一个是继承关系里面,子类和父类同名的函数构成重载。
很多人不知道这是为什么。其实这个是C++编译器的魔术来的。
其实C++根本不是他妈的面向对象,就是玩鬼。所谓的类,它的成员变量构成一个结构体,成员函数其实就是全局普通函数,只是传递了一个this指针。所以所谓子类和父类同名的函数构成重载,其实就是同一个作用域里面几个不同参数同名的函数,第一个this参数的类型不同而已。
重载的作用是实现了多态的思想。
这个大家都知道。
还有一个是继承关系里面,子类和父类同名的函数构成重载。
很多人不知道这是为什么。其实这个是C++编译器的魔术来的。
其实C++根本不是他妈的面向对象,就是玩鬼。所谓的类,它的成员变量构成一个结构体,成员函数其实就是全局普通函数,只是传递了一个this指针。所以所谓子类和父类同名的函数构成重载,其实就是同一个作用域里面几个不同参数同名的函数,第一个this参数的类型不同而已。
重载的作用是实现了多态的思想。
重写父类要有virtual关键字,子类有override关键字
所以,对于this指针来说,其实是编译器在调用的时候,把实例的指针作为第一个参数压栈(看调用方式,也可能最后一个进栈)。比如,对于instance.f(int,int)来说,编译器会将函数改写成instance.f((instance*),int,int)
从总体的角度来说,面向对象是一种思想,不是什么语法什么工具或者编译器。或者,你可以粗糙的这样认为,面向对象是帮你构造了一个“框架”,让你能够将代码以一种更符合现实的方式去组织。