重载与隐藏 C++

Overloading vs Hiding c++

本文关键字:C++ 隐藏 重载      更新时间:2023-10-16

一个理论问题 - 内部定义函数会重载外部定义吗?例如:

int foo(){
    class x{ 
    public:
        int foo() { return 1; } 
        int bar() { return foo(); }
    }
return 0;
}

内部 foo 隐藏了类 x 中的外部 foo。有人可以举一个内部函数重载外部函数而不是隐藏它的示例吗?

谢谢!

我想你的意思是成员函数是否可以重载命名空间范围函数

这里的"重载"一词本质上意味着两个或多个具有不同签名(参数数量和/或其类型)的函数可以访问名称查找

可见,并且具有相同的名称。

我认为不可能重载,以便相同的非限定名称可以代表成员函数或命名空间范围函数,具体取决于参数。 例如,

#include <cmath>        // std::sin
struct S
{
    void sin() const { cout << "By Odin!" << endl; }
    void foo()
    {
        using std::sin;
        sin( 3.14 );            // OK.
        //sin()                 !Will not find the member func.
    }
};

相反,如果没有 using 声明,成员函数可以称为非限定函数,但不能称为命名空间作用域函数。

函数重载意味着您有两个名称相同但参数不同的函数。您可以foo(int a)一个函数,然后定义一个函数foo(double a)而不隐藏另一个函数。