使用重载覆盖虚函数

时间:2018-05-06 04:10:52

标签: c++ class overloading virtual using

我有一个基类,称之为Foo,派生类,称之为BarFoo定义了一个虚函数doSomething,有两个重载 - 见下文:

class Foo
{
public:
    virtual void doSomething(std::string const & s)
    {
        printf("doSomething(std::string const &): %s\n", s.c_str());
    }

    virtual void doSomething(std::string const & s, int d)
    {
        printf("doSomething(std::string const &, int): %s %d\n", s.c_str(), d);
    }
};

class Bar
    : public Foo
{
public:
    virtual void doSomething(std::string const & s) override
    {
        printf("Bar: %s\n", s.c_str());
    }
};

现在我尝试从派生类Bar的实例化中调用这两个方法:

int main()
{
    Bar * b = new Bar();
    b->doSomething("string");
    b->doSomething("string", 78);
    delete b;
}

我得到第二次重载的错误(在Bar中未被覆盖的重载)。覆盖的那个很好,但是另一个(仍然在基类中定义)我得到一个错误

error C2660: 'Bar::doSomething': function does not take 2 arguments

如果我删除Bar中的单个覆盖,那么它只是从Foo派生但不覆盖任何内容,main中的代码编译得很好。如果我重写两者,也一样。

我确定我在这里愚蠢,但这似乎没有意义。任何人都可以帮助阐明这一点,特别是如何在没有a)创建两个函数名称的情况下工作,或者b)总是重写两者,或者c)转换到基类(对于我的用例来说)疼痛)?非常感谢。

0 个答案:

没有答案