1
A
回答
2
$ 12.7/4構建和破壞[class.cdtor](由我粗體)
成員函數,包括虛擬功能(10.3),可稱爲施工或破壞(12.6.2)中 。當從構造函數或 析構函數直接或間接調用虛函數 時,包括在構造或銷燬類的非靜態數據成員期間以及調用 所應用的對象是對象(稱之爲x)正在建設或銷燬, 被調用的函數是構造函數或 析構函數的類中的最終覆蓋,而不是覆蓋更多派生類中的函數。 如果虛擬函數調用使用的顯式類成員訪問 (5.2.5)和對象表達是指與x 或該對象的基類的子對象中的一個的完整的對象而不是其 基類的子對象的x或一個,行爲是不確定的。 [實施例:
struct V { virtual void f(); virtual void g(); }; struct A : virtual V { virtual void f(); }; struct B : virtual V { virtual void g(); B(V*, A*); }; struct D : A, B { virtual void f(); virtual void g(); D() : B((A*)this, this) { } }; B::B(V* v, A* a) { f(); // calls V::f, not A::f g(); // calls B::g, not D::g v->g(); // v is base of B, the call is well-defined, calls B::g a->f(); // undefined behavior, a’s type not a base of B }
末端示例]
相關問題
- 1. 構造函數中的調用基構造函數和其他構造函數
- 2. 基礎構造函數未被調用
- 3. 爲什麼基礎移動構造函數的顯式調用實際上調用基礎構造函數?
- 4. 在構造函數或析構函數中調用的虛函數的行爲
- 5. 從基類構造函數調用派生類的虛函數?
- 6. 如何在其他構造函數中調用構造函數?
- 7. 首先調用虛擬基類的構造函數,然後按順序調用其他類的構造函數
- 8. C++ - 構造函數,其中使用的參數基類'構造函數
- 9. 基礎構造函數調用的靜態是什麼?
- 10. C++:從基礎構造函數調用函數?
- 11. 關鍵字'this'(Me)不可用調用基礎構造函數
- 12. 誤差的基礎構造函數(C#)
- 13. 在C++中調用基礎構造函數CLI
- 14. 如何將基礎構造函數數據用於同一個類中的另一個構造函數?
- 15. 在perl中調用基構造函數
- 16. 在java中調用繼承構造函數的構造函數
- 17. 在構造函數中調用類成員的構造函數
- 18. 在構造函數中調用不同類的構造函數?
- 19. 是標準sml基礎庫中的zip函數嗎?
- 20. 在構造函數中調用純虛函數給出錯誤
- 21. 如何避免在構造函數中調用虛函數?
- 22. 確定一個構造函數調用其基類的構造
- 23. 構圖中的構造函數調用
- 24. 如何從c#中的構造函數調用其他構造函數?
- 25. 繼承虛基類的構造函數
- 26. 構造函數重構中的虛擬方法調用
- 27. 從ServiceBase派生時,是否調用基礎構造函數?
- 28. 關於基類和派生類的構造函數調用
- 29. JavaScript構造函數中的函數調用原型函數
- 30. 調用構造函數的基礎工作不C#