相关疑难解决方法(0)

在派生类中具有相同名称但签名不同的函数

我有一个具有相同名称的函数,但在基类和派生类中具有不同的签名.当我尝试在继承自派生的另一个类中使用基类的函数时,我收到一个错误.请参阅以下代码:

class A
{
    public:
    void foo(string s){};
};

class B : public A
{
    public:
    int foo(int i){};
};

class C : public B
{
    public:
    void bar()
    {
        string s;
        foo(s);
    }
};
Run Code Online (Sandbox Code Playgroud)

我从gcc编译器收到以下错误:

In member function `void C::bar()': no matching function for call to `C::foo(std::string&)' candidates are: int B::foo(int)
Run Code Online (Sandbox Code Playgroud)

如果我int foo(int i){};从课堂上删除B,或者我将其重命名foo1,一切正常.

这有什么问题?

c++ lookup inheritance function c++-faq

83
推荐指数
2
解决办法
4万
查看次数

C++:隐藏规则背后的基本原理

C++中隐藏规则背后的基本原理是什么?

class A { void f(int); }
class B : public A { void f(double); } // B::f(int) is hidden
Run Code Online (Sandbox Code Playgroud)
  • 如果它是一个有意义的功能,我认为也应该可以隐藏功能而无需定义具有相同名称的新功能:如下所示:

    class B : public A { hide void f(double); }
    
    Run Code Online (Sandbox Code Playgroud)

    但这是不可能的.

  • 我不认为它简化了编译器的工作,因为编译器必须能够在显式使用指令时取消隐藏函数using:

    class B : public A { using A::f; void f(double); } // B::f(int) NOT hidden
    
    Run Code Online (Sandbox Code Playgroud)

那么,怎么会有隐藏规则呢?


嗯,所有三个答案似乎都很好,并且显示了隐藏规则的不同理由.我不确定我应该接受哪个答案.

c++ language-design hide rationale

25
推荐指数
3
解决办法
2175
查看次数