C ++概念和界面有什么区别?

时间:2016-01-19 10:31:30

标签: c++ interface virtual c++-concepts

我的理解是C++ library concept对于C ++来说像Closeable这样的接口是Java(根据链接源,概念是:命名的需求集)。 / p>

  1. 这个比喻是否正确?
  2. C ++接口(即使用纯虚方法的类)和C ++库概念之间有什么区别?
  3. 一般来说,是通过多重继承实现C ++库概念,相当于在Java中实现多个接口(没有多重继承)?

2 个答案:

答案 0 :(得分:1)

  1. 这不是一个完全类比,但概念类似于接口。仅具有纯虚拟成员函数的类与Java接口的类比更接近。 Java泛型可能是与C ++概念更接近的类比,但它们更受限制。您只能使用它们来要求类型继承特定的基类或接口(我可能是错的)。 Haskell类型类与C ++概念非常类似。

  2. C ++接口是一个类。实现接口意味着继承接口并实现纯虚拟成员函数。概念是一组要求。符合概念意味着符合要求的类符合所有要求。可能存在特定表达式有效性的要求(必须具有名为iterator的成员类型别名)或行为(i++必须等同于It ip=i; ++i; return ip;)。

    接口的继承可以而且必须在语言中定义,但是还没有正式指定概念的语言支持。已提出语言支持,但未包含在当前(C ++ 14)标准中。

    继承是动态(运行时)多态,而概念与模板一起使用,这是静态(编译时)多态。

  3. 不相同。动态和静态多态性是完全不同的东西。

答案 1 :(得分:0)

  1. 不,这是错的。 Java中的接口与C ++中的接口相同(每个方法都是虚拟纯的类)。

  2. C ++概念推断类功能而不是C ++接口定义类功能。

  3. C ++概念无法处理继承。概念决定了一个类可以做什么,而不是一个类应该如何实现。