有人告訴我,構造函數創建對象。但在互聯網上,我搜索的是當對象創建時執行的構造函數。你能解釋一下這個嗎?我是新的C++我們可以說構造函數創建對象嗎?
回答
在C++中構造函數是一種特殊的類成員函數,當這個類的一個對象實例化 執行。
構造函數通常用於將 類的成員變量初始化爲適當的默認值,或者允許用戶將這些成員變量初始化爲所需的任何值。
所以,當你打電話給你有一個已經實例化的對象,這樣的構造不創建對象,也沒有創建的對象變量,它只是用來初始化對象中的變量構造函數(或使在使用這個對象之前你想要的一些任務)。
編輯:另外:
構造函數執行它的順序工作:
- 它調用基類和成員的構造函數中 聲明的順序。
- 如果類是從虛擬基類派生的,它將初始化對象的虛擬基指針。
- 如果類具有或 繼承虛擬函數,它初始化對象的虛擬 函數指針。虛擬函數指針指向類的 虛擬函數表,以啓用虛擬函數的正確綁定 調用代碼。
- 它在其函數體中執行任何代碼。
檢查這些鏈接,瞭解更多的相關信息:
http://www.learncpp.com/cpp-tutorial/85-constructors/
英語是一門不精確的語言,直覺是粉飾服務良好次要細節無關緊要。
如果您的任務是「創建T
」(默認初始化)對象「,那麼您將使用T()
來完成此操作。或根據需要的其他變化(例如new T()
)。
說調用構造函數創建(臨時)對象是字面上正確的。魔術發生在你調用構造函數的地方和你輸入構造函數的地方之間是一個不值得關注的細節。
題外話:我認爲「創建一個對象」也是由C++標準中定義的技術術語,可能會或可能不會與「創造」的直觀概念的分歧。在您輸入構造函數之前或者在構造函數成功退出之後,我沒有一個可以方便地通過此技術定義來判斷對象是否被「創建」的引用。
class a{int a = 0;int b = 0;} a obj = new a();
在上面的代碼中 你obj是創建內存OBJ在堆棧中分配,然後構造器 代碼執行
它是任何構造函數的默認函數在堆上分配所需內存爲它的成員然後通過該引用指針訪問它實際上被命名爲對象。 –
- 1. 我們可以中斷在構造函數中創建對象
- 2. 我們可以說再見覆制構造函數嗎?
- 3. 我們可以解構任意的數據構造函數嗎?
- 4. Java - 我們可以在構造函數中聲明對象變量嗎?
- 5. 我可以爲Java類創建非顯式構造函數嗎?
- 6. 我們可以在外部類的構造函數中創建內部類的對象嗎?
- 7. 解構函數參數時可以創建一個對象嗎?
- 8. 構造函數創建const對象
- 9. C++對象創建和構造函數
- 10. 在構造函數中創建對象
- 11. 從構造函數創建對象
- 12. 複製構造函數調用默認構造函數以創建對象
- 13. 我們可以調用一個類的構造函數嗎?
- 14. 我們可以停止構造函數的運行嗎?
- 15. 我們可以創建對象到接口和抽象類嗎?
- 16. 可空INOUT構造函數創建可變對象
- 17. 構造函數鏈會在Java中創建多個對象嗎?
- 18. 創建對象數組以傳入構造函數
- 19. 對象構造函數可以返回null嗎?
- 20. 可以在構造函數內創建Pthreads嗎?
- 21. 可以在php類中創建構造函數doble嗎?
- 22. 可以爲構造函數創建包裝嗎?
- 23. 你可以從請求對象 - csrf構造函數異常構造csrf嗎?
- 24. 我可以獲得對函數內構造的對象的引用嗎?
- 25. 構建其他對象構造函數的對象構造函數
- 26. 我可以創建一個構造方法的對象,當我創建C#類
- 27. 我可以在創建對象之前計數屬性嗎?在構造函數中?
- 28. 我們可以在創建新對象時改變類名嗎?
- 29. 我們可以創建一個接口的對象嗎?
- 30. 我們是否可以在不使用構造函數的情況下創建perl對象
「這簡直是正確的說,調用構造函數創建一個(臨時)對象。」 - 不,這不對。 'T()'不是對構造函數的調用。 C++ *確實有辦法調用構造函數(當構造函數調用另一個構造函數時),並且在使用該構造函數時,不會創建任何對象。 – hvd
@Hurkyl你再次困惑我.. :(以上答案在閱讀你的答案之前是明確的.. !!對不起 – UnKnown