簡體   English   中英

我可以在抽象基類中定義構造函數嗎?

[英]Can I define a constructor in an abstract base class?

我想在C ++中編寫一個“接口”類,它是一個純粹的虛擬抽象基類。

我可以在這個接口類中定義構造函數嗎? 構造函數不能是純虛函數,但是如何為接口類定義構造函數呢?

編輯:我是否需要在這樣的接口類中使用虛擬析構函數?

實際上有兩個問題在一個:

  • ABC可以有一個ctor嗎? :當然可以! 想象一下,你有一個幾乎完整的類,私有數據,只缺少一個具體的方法。 這個方法應該是純虛擬的,使類抽象,但你仍然需要在ctor中初始化類數據。 Paul Rooney提出問題就是一個例子
  • 接口可以有ctor嗎? :不,它不能定義 接口是一個特殊的ABC,只包含純虛方法。 它沒有實現甚至不是部分實現,因此不需要ctor。 你已經注意到了

構造函數不能是純虛函數

TL / DR:如果你試圖在你的界面上添加一個構造函數,那么它不再是一個接口,而是一個簡單的抽象基類,完全允許它有一個。

C ++沒有接口的概念。 有具體的類和抽象類,僅此而已。 允許抽象類具有構造函數,數據成員和其他所有內容。 標記類抽象所需的唯一內容是單個純虛擬成員函數。

有些人使用“interface”一詞來表示沒有任何數據成員或非純虛成員函數的抽象類。 其他人使用略有不同的定義。 就語言而言,確切的定義沒有任何意義。 您可以擁有數據成員並定義構造函數,並仍然將您的類稱為接口,沒有人會向您發出引用。 或者你可以完全避開這個詞。

暫無
暫無

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

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