簡體   English   中英

C ++概念和界面有什么區別?

[英]What is a difference between a C++ concept and an interface?

我的理解是C ++庫的概念是C ++,像Closeable這樣的接口是Java(根據鏈接源,概念是: 命名的需求集 )。

  1. 這個比喻是否正確?
  2. C ++接口 (即具有純虛方法的類)和C ++庫概念之間有什么區別?
  3. 一般來說,通過多重繼承相當於在Java中實現多個接口(沒有多重繼承)來實現C ++庫概念?
  1. 這不是一個完全類比,但概念類似於接口。 僅具有純虛擬成員函數的類與Java接口的類比更接近。 Java泛型可能是與C ++概念更接近的類比,但它們更受限制。 您只能使用它們來要求類型繼承特定的基類或接口(我可能是錯的)。 Haskell類型類與C ++概念非常類似。

  2. C ++接口是一個類。 實現接口意味着繼承接口並實現純虛擬成員函數。 概念是一組要求。 符合概念意味着符合要求的類符合所有要求。 可能需要特定表達式的有效性(必須具有名為iterator的成員類型別名)或行為( i++必須等同於It ip=i; ++i; return ip; )。

    接口的繼承可以而且必須在語言中定義,但是還沒有正式指定概念的語言支持。 已提出語言支持,但未包含在當前(C ++ 14)標准中。

    繼承是動態(運行時)多態,而概念與模板結合使用,模板是靜態(編譯時)多態。

  3. 不相同。 動態和靜態多態性是完全不同的東西。

  1. 不,這是錯的。 Java中的接口與C ++中的接口相同(每個方法都是虛擬純的類)。

  2. C ++概念推斷類功能而不是C ++接口定義類功能。

  3. C ++概念沒有什么可以處理繼承。 概念決定了一個類可以做什么,而不是一個類應該如何實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM