首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++上下文中,抽象和接口有什么不同?

问在C++上下文中,抽象和接口有什么不同?
EN

Stack Overflow用户
提问于 2014-11-03 20:51:28
回答 6查看 1.3K关注 1票数 0

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

EN

回答 6

Stack Overflow用户

发布于 2014-11-03 21:26:19

正如您所说的,C++中的接口是使用抽象类实现的,其中只有和纯虚函数。纯虚函数必须被任何具体的(即非抽象的)派生类覆盖。通过将表达式=0添加到虚拟函数,我们表明虚拟函数是纯虚拟函数。抽象类是至少包含一个纯虚函数( one )的类。

例如:

代码语言:javascript
复制
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 
  };
票数 3
EN

Stack Overflow用户

发布于 2014-11-03 20:53:20

不,抽象类可以为方法提供默认行为;接口是纯虚的,不能。这从根本上是不同的。

行为和抽象类是一个名词

这没有任何意义。行为始终是动词。

抽象类和接口的要点是多态性:根据运行时类型的不同而有不同的行为。

票数 0
EN

Stack Overflow用户

发布于 2014-11-03 20:58:59

如果它的所有方法都是抽象的,并且没有数据成员,那么C++类实际上是and接口。但是,如果一个类至少有一个抽象方法,那么它就已经是抽象的了。仍然可以定义其他虚拟函数、非虚拟函数和数据成员。这些都不属于接口。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26714773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档