【发布时间】:2010-11-14 22:41:28
【问题描述】:
我有一个类似的接口类:
class IInterface
{
public:
virtual ~IInterface() {}
virtual methodA() = 0;
virtual methodB() = 0;
};
然后我实现接口:
class AImplementation : public IInterface
{
// etc... implementation here
}
当我在应用程序中使用接口时,最好创建具体类 AImplementation 的实例。例如。
int main()
{
AImplementation* ai = new AIImplementation();
}
或者最好在接口中放置一个工厂“创建”成员函数,如下所示:
class IInterface
{
public:
virtual ~IInterface() {}
static std::tr1::shared_ptr<IInterface> create(); // implementation in .cpp
virtual methodA() = 0;
virtual methodB() = 0;
};
然后我就可以像这样在 main 中使用界面了:
int main()
{
std::tr1::shared_ptr<IInterface> test(IInterface::create());
}
第一个选项似乎是常见的做法(不是说它是正确的)。但是,第二个选项来自“Effective C++”。
【问题讨论】:
-
语言正确性的几点说明:在 C++ 中没有方法,只有成员函数。
-
我会这样写 main():
int main() { IInterface* i = new AIImplementation(); }