函数重写在哪里?

Obt*_*bto 5 c++ ruby python overriding overloading

在创建程序,编译器,链接器等的过程中,是否覆盖了函数和运算符重载?

我特别感兴趣的是在C++,Ruby和Python中完成它.

tem*_*def 4

函数重载(至少在 C++ 中)是在编译器内部处理的。这个想法是,编译器最终生成的代码将被硬编码以调用适当的函数,就好像这些函数都有不同的名称,并且您调用了唯一适合参数的函数一样。更一般地,在大多数支持重载的编译语言中,重载决策是在编译时完成的,并且发出的代码将始终调用指示的函数。例如,Haskell 支持这种方式的编译时重载。

运算符重载是一般重载的特殊情况,因此通常以相同的方式处理。

函数重写(OOP 中出现的一个术语,当派生类从基类继承并重新定义其方法之一时)几乎总是在运行时解决,因为编译器在实际不知道的情况下无法始终判断将调用哪个函数关于运行时的类型。某些编译器可能能够静态地证明某个对象具有特定类型,然后可以优化动态分派,但不可能在所有情况下都这样做。

我不知道有任何动态语言支持重载,因为理论上您可以在程序运行时引入新的重载候选者。如果存在这样的语言,我很乐意受到启发。

  • @tc:不。非虚函数是隐藏的,而不是重写的。 (3认同)