C++ 上下文中的抽象和接口有什么区别?

use*_*119 0 c++ design-patterns

C++ 中的接口被实现为抽象类,即纯虚方法。同样,C++中的抽象类也是同样的实现方式。我可以说接口和抽象在 C++ 中是相同的,除了接口可能是动词的概念 - 行为和抽象类是名词。我的理解对吗?我问这个问题是因为设计模式——以不同的方式谈论接口和抽象。另外,原因是JAVA有两个不同的关键字——interface和abstract。我们需要在java中实现一个接口。我们需要扩展抽象类。然而,在CPP中,我们只是继承抽象类,然后实现。

小智 5

正如您所说,C++ 中的接口是使用具有纯虚函数的抽象类实现的。纯虚函数必须由任何具体(即非抽象)派生类重写。通过在虚函数中添加表达式=0,我们表明该虚函数是纯虚函数。抽象类是至少包含一个纯虚函数的类。

例如:

class AbstractBase {
    public:
      const char* Hello() { return "Hello World!"; } // a normal non-virtual function    

      virtual void Method_1() {} // a normal virtual function

      virtual int Method_2() = 0; // a pure virtual function makes AbstractBase class not instantiable
  };  

class InterfaceBase {
    public:
      const char* Hello() = 0; // a pure virtual function    

      virtual void Method_1() = 0; // a pure virtual function

      virtual int Method_2() = 0; // a pure virtual function 
  };
Run Code Online (Sandbox Code Playgroud)