如何在类声明之外实现我的显式覆盖?

时间:2017-01-04 16:47:37

标签: c++ interface override visual-studio-2005 definition

我有两个使用相同纯虚方法的类:

class InterfaceA
{
    public: virtual void doSomething() = 0;
};
class InterfaceB
{
    public: virtual void doSomething() = 0;
};

我有一个派生自这些接口的类。我想覆盖 每个虚函数。我可以这样做(这有效):

class ConcreteClass : public InterfaceA, public InterfaceB
{
    public:

    void InterfaceA::doSomething() override
    {
        printf( "In ConcreteClass::InterfaceA::doSomething()\n" );
    }

    void InterfaceB::doSomething() override
    {
        printf( "In ConcreteClass::InterfaceB::doSomething()\n" );
    }
};

然而,我的问题是,如何在课堂声明之外使用我的方法定义?所以我可以将它们放在我的.cpp文件中。我先试了一下:

// .h
class ConcreteClass : public InterfaceA, public InterfaceB
{
    public:

    void InterfaceA::doSomething() override;
    void InterfaceB::doSomething() override;
};
// .cpp
void ConcreteClass::InterfaceA::doSomething()
{
    printf( "In ConcreteClass::InterfaceA::doSomething()\n" );
}
void ConcreteClass::InterfaceB::doSomething()
{
    printf( "In ConcreteClass::InterfaceB::doSomething()\n" );
}

这不能在Visual C ++ 2005(VS 2005)中编译:

error C2509: 'doSomething' : member function not declared in 'ConcreteClass'

是否需要特定的sintax才能编译?

Microsoft的MSDN文档有一个工作示例。但他们使用__interface扩展。我希望实现相同但符合标准c ++ 03的代码,如果可能的话。

谢谢!

1 个答案:

答案 0 :(得分:0)

即使它并不完全符合您的要求,但显而易见的解决方法是分发给辅助函数:

class ConcreteClass : public InterfaceA, public InterfaceB
{
public:
    void InterfaceA::doSomething() override {
        InterfaceA_doSomething();
    }

    void InterfaceB::doSomething() override {
        InterfaceB_doSomething();
    }

 private:
    void InterfaceA_doSomething();
    void InterfaceB_doSomething();
};