我有两个使用相同纯虚方法的类:
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的代码,如果可能的话。
谢谢!
答案 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();
};