【发布时间】:2013-03-18 15:07:45
【问题描述】:
作为this question 的后续:如果我创建一个纯虚拟接口类并将实现类拆分为头文件和源文件,我会得到以下信息:
界面:
class IDemo
{
public:
virtual ~IDemo() {}
virtual void OverrideMe() = 0;
};
实现类,头文件:
class Child : public IDemo
{
public:
virtual void OverrideMe();
};
实现类,来源:
void Child::OverrideMe()
{
//doStuff
}
所以我需要将接口中声明的方法的名称重复 3 次——这不仅麻烦,而且令人困惑。有更好的方法吗?
【问题讨论】:
-
不,没有。什么如此令人困惑?
-
因为在接口加上头文件中声明了相同的方法。如果有人查看头部,他怎么知道这个方法声明实际上是从基类继承的?
-
通过将第二个和第三个合并在一起键入两次。
-
@RomanR.: 我不想合并一个类的声明和它的实现。这就是首先使用“接口”的动机:我不想在“合同”中声明特定于实现的成员
-
您的编译器可能支持接口的特殊语法,让您获得更多区别并提高可读性。例如,MSVC++ 有
__interface- 如果您不介意可移植性,您可以使用它来代替纯虚拟类(不过请仔细阅读文档)
标签: c++ design-patterns interface