c++ - 使用 C++ 接口(interface)的最佳方式

标签 c++ interface

我有一个接口(interface)类类似于:

class IInterface
{
public:

    virtual ~IInterface() {}

    virtual methodA() = 0;

    virtual methodB() = 0;

};

然后我实现接口(interface):

class AImplementation : public IInterface
{
    // etc... implementation here
}

当我在应用程序中使用接口(interface)时,最好创建具体类 AImplementation 的实例。例如。

int main()
{
    AImplementation* ai = new AIImplementation();
}

或者像下面这样在接口(interface)中放置一个工厂“创建”成员函数是否更好:

class IInterface
{
public:

    virtual ~IInterface() {}

    static std::tr1::shared_ptr<IInterface> create(); // implementation in .cpp
    virtual methodA() = 0;

    virtual methodB() = 0;

};

然后我就可以像这样在 main 中使用接口(interface)了:

int main()
{
    std::tr1::shared_ptr<IInterface> test(IInterface::create());
}

第一个选项似乎是常见的做法(不能说是对的)。然而,第二个选项来自“Effective C++”。

最佳答案

使用接口(interface)的最常见原因之一是您可以“针对抽象进行编程”而不是针对具体实现。

这样做的最大好处是它允许更改部分代码,同时最大限度地减少对剩余代码的更改。

因此,虽然我们不知道您正在构建的内容的完整背景,但我会选择接口(interface)/工厂方法。

话虽如此,在较小的应用程序或原型(prototype)中,我通常从具体的类开始,直到我了解在何处/是否需要接口(interface)。接口(interface)可以引入一定程度的间接性,这对于您正在构建的应用程序的规模来说可能不是必需的。

由于应用程序较小,我发现我实际上并不需要自己的自定义界面。与许多事情一样,您需要根据具体情况权衡成本和 yield 。

关于c++ - 使用 C++ 接口(interface)的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1198055/

相关文章:

java - 如何使用枚举定义常量值组

c# - 为什么我需要在 C# 显式实现中将 'this' 转换为接口(interface)类型?

c++ - 如何从 svg 读取 boost::geometry::model::polygon

python - 用 Python Boost 包装 C++ operator()

C++ 派生函数与基函数

TypeScript 接口(interface)函数属性 : What's the difference?

java - 如何在 Java 中查找特定接口(interface)的所有(子)子接口(interface)?

c++ - 使用 SSE 的任意位置 2 输入混洗

c++ - 如何开始使用 Visual C++ 编写 DLL?

java - 对于实现多个接口(interface)的具体类,该类的客户端如何遵循依赖倒置?