我讀過這個問題「C++ Abstract Class: constructor yes or no?」和屬於它的答案。C++中的抽象類和構造函數
但根據回答,我知道我們需要構造函數來初始化它的數據成員,但是我可以使用它的成員函數,如我的派生類初始化數據成員,所以爲什麼它很重要定義一個構造函數?
我讀過這個問題「C++ Abstract Class: constructor yes or no?」和屬於它的答案。C++中的抽象類和構造函數
但根據回答,我知道我們需要構造函數來初始化它的數據成員,但是我可以使用它的成員函數,如我的派生類初始化數據成員,所以爲什麼它很重要定義一個構造函數?
默認的構造函數定義和成員初始化使關於適當的設置條件(有效狀態)的類自包含。
使用setter方法來操作類實例對於類客戶端是可選的(包括繼承類)。
您可能會考慮添加更多構造函數簽名,客戶端可以使用一次調用初始化類成員,並且不要求這些應用額外的setter調用。
這取決於具體的用例,最後更方便和語義正確。
是的,添加更多的構造函數簽名對於客戶端是有用的,如果他們要創建對象,但是在抽象類沒有辦法創建對象的情況下。 –
@M_E抽象類意圖被繼承,所以你在困擾什麼?如果你想擁有純粹的抽象接口,不要引入數據成員(而是虛擬的getter/setter方法)! –
@M_E:派生的構造函數_can和does_調用純虛擬基類的構造函數。總是。 –
兩個原因:
可能更多。
構造函數(如果調用)可以保證對象的正確初始狀態。安裝程序可能永遠不會被調用? – StuartLC