重载与隐藏c ++

时间:2014-01-04 20:15:45

标签: c++

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

这里的单词重载实质上意味着两个或多个具有不同签名(参数数量和/或其类型)的函数可访问对名称查找可见,并且具有同名。

我认为不可能重载,因此根据参数,相同的非限定名称可以代表成员函数或命名空间作用域函数。如,

#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声明,则可以将成员函数调用为非限定,但不能调用命名空间作用域函数。