可能重复:
Why does C++ not let baseclasses implement a derived class' inherited interface?
#include <iostream>
class Interface
{
public:
virtual void yell(void) = 0;
};
class Implementation
{
public:
void yell(void)
{
std::cout << "hello world!" << std::endl;
}
};
class Test: private Implementation, public Interface
{
public:
using Implementation::yell;
};
int main (void)
{
Test t;
t.yell();
}
我希望Test
类以Implementation
的形式实现,我希望避免编写
void Test::yell(void) { Implementation::yell(); }
方法。为什么不可能这样做呢?在C ++ 03中还有其他方法吗?
答案 0 :(得分:2)
using
只会为范围带来名称。
它没有实现任何东西。
如果你想要类似Java的get-implementation-by-inheritance,那么你必须显式地添加与之相关的开销,即virtual
继承,如下所示:
#include <iostream>
class Interface
{
public:
virtual void yell() = 0;
};
class Implementation
: public virtual Interface
{
public:
void yell()
{
std::cout << "hello world!" << std::endl;
}
};
class Test: private Implementation, public virtual Interface
{
public:
using Implementation::yell;
};
int main ()
{
Test t;
t.yell();
}
<小时/> 编辑:这个功能有点偷偷摸摸,我不得不编辑以使用g ++编译代码。其中没有自动识别实现
yell
和接口yell
是同一个。我不完全确定标准对此有何看法!