【发布时间】:2012-03-06 17:26:50
【问题描述】:
在java中,我们可以定义不同的接口,然后我们可以为一个具体的类实现多个接口。
// Simulate Java Interface in C++
/*
interface IOne {
void MethodOne(int i);
.... more functions
}
interface ITwo {
double MethodTwo();
... more functions
}
class ABC implements IOne, ITwo {
// implement MethodOne and MethodTwo
}
*/
在 C++ 中,一般来说,我们应该避免使用多重继承,尽管多重继承在某些情况下确实有其优势。
class ABC {
public:
virtual void MethodOne(int /*i*/) = 0 {}
virtual double MethodTwo() = 0 {}
virtual ~ABC() = 0 {}
protected:
ABC() {} // ONLY ABC or subclass can access it
};
问题1> 基于ABC的设计,我是否应该改进其他一些东西才能使它成为一个像样的ABC?
问题2> 一个好的ABC 是否应该不包含成员变量,而应该将变量保留在子类中?
问题3> 正如我在 cmets 中指出的,如果 ABC 必须包含太多纯函数怎么办?有没有更好的办法?
【问题讨论】:
-
不确定你的实际代码是否像第一个示例块,但接口类中的方法声明需要
virtual关键字;只有在最初声明virtual之后它才是可选的。 -
这可以编译吗?纯虚函数中0后的大括号是错误
-
@AlessandroPezzato:没错;不能在类的主体中定义纯虚成员函数。它可以在类的定义之外定义。但是,一些编译器(例如 Visual C++,至少从 Visual C++ 2010 SP1 开始)将按原样接受代码。
-
@AlessandroPezzato,为什么 MSDN 没有提供虚拟析构函数?
标签: c++ design-patterns abstract-class