基本的c + +問題我很確定。如果我有一個帶有不帶參數的構造函數的基類,並且只是初始化了一些受保護的成員,那麼派生類是否立即調用這個基構造函數,如果它與參數相匹配的話(如意,但不可能)有辦法迫使它從派生類自動調用基礎構造函數,而無需在派生類中明確告訴它這麼做?我問,因爲我正在寫各種包裝,有一些保護成員,我想初始化爲特定的值,然後我想派生和操作這個基類,以滿足我的需求,但我不喜歡外部用戶必須記住顯式調用基礎構造函數或在它們自己的構造函數中設置這些值。如何強制在派生類中調用基類構造函數?
回答
是的,默認的基礎構造函數總是被調用,除非另有明確說明。
例如:
class A
{
public:
A() { std::cout << "A"; }
};
class B : A
{
public:
B() {}
};
int main()
{
B b;
return 0;
}
將輸出:
A
通過 「明確規定,否則」 我的意思是,你可以在派生類中調用不同的構造函數:
class A
{
public:
A() { std::cout << "A"; }
A(int) { std::cout << "AAA"; }
};
class B : A
{
public:
B() : A(1) {} //call A(int)
};
int main()
{
B b;
return 0;
}
將輸出
AAA
重要,如果你沒有一個默認的構造函數(聲明瞭一個非默認的構造函數,而不是默認的一個)或默認的構造函數是不可見的(標記爲private
),你需要顯式調用派生類中的可用構造函數。
假設唯一的構造函數類A有一個整數作爲參數,然後派生類有一個構造函數,它也接收一個int。基礎構造函數會被偶然調用嗎?或者是一個構造函數,如果它沒有參數,那麼它只被認爲是默 – FatalCatharsis 2012-04-03 22:40:02
也是,最後的想法,如果它反之亦然,你在B中定義了一個帶有參數的構造函數,而在A中定義了一個無參數構造函數,A的構造函數會被調用嗎?也稱爲first,基類的默認構造函數或派生類的默認構造函數。 – FatalCatharsis 2012-04-03 22:59:13
如果您的基類有一個「默認構造函數」(一個不帶參數的構造函數;由您明確提供,或由編譯器隱式提供,因爲您沒有明確提供任何構造函數)類構造函數會自動調用它,除非您指定他們調用不同的構造函數。 (如果你的基類不是有一個「默認構造函數」,因爲你提供了一個或多個帶參數的構造函數,沒有不帶構造函數的構造函數,那麼它是一個編譯錯誤派生類的構造函數不能指出它所調用的基類構造函數)
- 1. 強制派生類使用基類的構造函數
- 2. 從調用派生類的基類構造函數在Java中
- 3. 在派生類中調用基類構造函數
- 4. 在派生類中調用基類構造函數
- 5. 在C++中調用的基類和派生類構造函數
- 6. 從基類構造函數調用派生類的虛函數?
- 7. 基類構造函數在派生類構造函數之前真的調用
- 8. 在派生類構造函數中複製基類
- 9. 如何從派生類複製構造函數調用基類複製構造函數?
- 10. 派生類構造函數調用
- 11. C# - 使所有派生類調用基類構造函數
- 12. 關於基類和派生類的構造函數調用
- 13. 派生類調用錯誤的基類構造函數
- 14. 基類如何可以禁用派生類的構造函數
- 15. 在派生類的函數中調用基類的構造函數
- 16. 強制派生類在MATLAB中調用基函數?
- 17. 在基類構造函數中使用派生類屬性
- 18. C#繼承:當我調用派生類構造函數時如何調用基類構造函數
- 19. 如何從無參數派生類調用參數化基類構造函數?
- 20. 任何方式在派生類中使用基構造函數?
- 21. 如何從派生自不同基類的類的構造函數中調用不同的派生類
- 22. 如何從派生類的實例調用基類非默認構造函數?
- 23. 從派生類中調用複製構造函數
- 24. 從派生構造函數調用基類方法
- 25. 從派生類調用重載基構造函數
- 26. 強制派生類來調用基函數
- 27. 設置基類屬性使用派生類的構造函數
- 28. 爲什麼派生類需要使用基類構造函數
- 29. 指針在基類構造函數派生類
- 30. 構造函數在基類和派生類
我有點迷失於你的問題的措辭,但如果基類有一個默認的/無參數的構造函數,它將被調用時如果未明確指定基類的初始化,則初始化派生類對象。 – birryree 2012-04-03 21:20:37