C++:什么是类接口? 我知道C++中没有接口关键字,但是它更像是一个设计模式。

C++:什么是类接口? 我知道C++中没有接口关键字,但是它更像是一个设计模式。,c++,design-patterns,interface,C++,Design Patterns,Interface,所以,如果我有一个苹果类,它包含关于苹果颜色、酸味、大小、吃和扔的信息和方法 苹果的界面会是什么样子? 你通常需要什么样的接口? 您只需在类中使用纯虚函数 class IApple { public: virtual ~IApple() {} // Define a virtual de-structor virtual color getColor() = 0; virtual sourness getSourness() = 0

所以,如果我有一个苹果类,它包含关于苹果颜色、酸味、大小、吃和扔的信息和方法

苹果的界面会是什么样子? 你通常需要什么样的接口?
您只需在类中使用纯虚函数

class IApple
{
    public:
      virtual ~IApple() {}  // Define a virtual de-structor

      virtual color     getColor()    = 0;
      virtual sourness  getSourness() = 0;
      virtual size      getSize()     = 0;
      virtual void      eat()         = 0;
};

您只需在类中使用纯虚函数

class IApple
{
    public:
      virtual ~IApple() {}  // Define a virtual de-structor

      virtual color     getColor()    = 0;
      virtual sourness  getSourness() = 0;
      virtual size      getSize()     = 0;
      virtual void      eat()         = 0;
};

接口是一组成员,例如在不同类之间共享的函数和变量,因此您可以访问接口的成员,而不必知道它首先是哪个类,只要它实现了接口,您就可以确保它具有成员


例如,您可以使用它在每个对象上迭代调用相同函数的不同对象。

接口是一组成员,例如在不同类之间共享的函数和变量,因此您可以访问接口的成员,而不必知道它首先是哪个类,只要它实现了接口,您就可以确保它具有成员


例如,您可以使用它在不同的对象之间迭代,在每个对象上调用相同的函数。

Martin的示例说明了一个接口。这是你的另一个问题-你通常需要它们做什么:

它们可以被提供此API的函数用作基类 接口可能是派生类整体功能的一小部分;派生类可以实现许多接口 可以在代码中使用指向容器中可能存在的接口的指针或引用,以将该代码与任何特定实现解耦,即作为使用虚拟函数/分派的运行时多态代码的基础 这有助于减少编译时间并打破循环依赖关系 实现可以由调用方或工厂方法提供 能够改变实现通常会使系统总体上更加灵活和可重用 有助于测试的实现可以分阶段进行 接口本身作为使用文档的一种形式可能有价值,有时我甚至会创建接口,如预期的模板策略参数所示,尽管实际上不需要从它们派生策略 一些设计模式通过在包含对象/代码的生命周期内更改实现来工作 它们可以作为类的一种注释或特征使用——即使不提供它们自己的任何实际行为——其他代码在决定适当的行为时检查接口是否是基础
马丁画了一个界面。这是你的另一个问题-你通常需要它们做什么:

它们可以被提供此API的函数用作基类 接口可能是派生类整体功能的一小部分;派生类可以实现许多接口 可以在代码中使用指向容器中可能存在的接口的指针或引用,以将该代码与任何特定实现解耦,即作为使用虚拟函数/分派的运行时多态代码的基础 这有助于减少编译时间并打破循环依赖关系 实现可以由调用方或工厂方法提供 能够改变实现通常会使系统总体上更加灵活和可重用 有助于测试的实现可以分阶段进行 接口本身作为使用文档的一种形式可能有价值,有时我甚至会创建接口,如预期的模板策略参数所示,尽管实际上不需要从它们派生策略 一些设计模式通过在包含对象/代码的生命周期内更改实现来工作 它们可以作为类的一种注释或特征使用——即使不提供它们自己的任何实际行为——其他代码在决定适当的行为时检查接口是否是基础
如果您喜欢时尚的代码,还可以使用纯虚拟析构函数。不需要类,结构就足够了,因为接口应该只有公共函数。。。你通常需要接口做什么?@Martin:有意思,我想你不喜欢NVI习语Non-Virtual Interface,它提倡将非虚拟的公共方法委托给纯虚拟的私有方法?@Matthieu M:对新用户来说,只需要使用最简单的技术。但是,是的,我一直在使用这种技术。但这取决于我们试图实现的内容。@CashCow:假设这是为一个拥有多种类型苹果的苹果农场主准备的。如果你喜欢时尚的代码,你也可以有一个纯虚拟析构函数。不需要类,结构就足够了,因为接口应该只有公共函数。。。你通常需要接口做什么?@Martin:有趣的是,我想你不喜欢NVI成语“非虚拟接口”,它提倡
是否将非虚拟公共方法委托给纯虚拟私有方法?@Matthieu M:对新用户只使用最简单的技术。但是,是的,我一直在使用这种技术。但这取决于我们试图实现的目标。@CashCow:假设它是为一个拥有多种类型苹果的苹果农场主设计的。苹果是一个抽象类吗,也就是说,你不能只有一个苹果,一个Braeburn或者一个Smiths奶奶?顺便说一句,你不能调用方法throw,因为它是保留的,所以你必须解决这个问题。苹果是一个抽象类,也就是说,你不能只有一个苹果,一个Braeburn或者一个Granny Smiths?你不能调用方法throw,因为它是保留的,顺便说一下,所以你必须解决这个问题。