2015-05-09 130 views

回答

7

在C++中構造函數是一種特殊的類成員函數,當這個類的一個對象實例化 執行。

構造函數通常用於將 類的成員變量初始化爲適當的默認值,或者允許用戶將這些成員變量初始化爲所需的任何值。

所以,當你打電話給你有一個已經實例化的對象,這樣的構造不創建對象,也沒有創建的對象變量,它只是用來初始化對象中的變量構造函數(或使在使用這個對象之前你想要的一些任務)。

編輯:另外:

構造函數執行它的順序工作:

  1. 它調用基類和成員的構造函數中 聲明的順序。
  2. 如果類是從虛擬基類派生的,它將初始化對象的虛擬基指針。
  3. 如果類具有或 繼承虛擬函數,它初始化對象的虛擬 函數指針。虛擬函數指針指向類的 虛擬函數表,以啓用虛擬函數的正確綁定 調用代碼。
  4. 它在其函數體中執行任何代碼。

檢查這些鏈接,瞭解更多的相關信息:

http://www.learncpp.com/cpp-tutorial/85-constructors/

https://msdn.microsoft.com/en-us/library/s16xw1a8.aspx

https://isocpp.org/wiki/faq/ctors

-1

英語是一門不精確的語言,直覺是粉飾服務良好次要細節無關緊要。

如果您的任務是「創建T」(默認初始化)對象「,那麼您將使用T()來完成此操作。或根據需要的其他變化(例如new T())。

說調用構造函數創建(臨時)對象是字面上正確的。魔術發生在你調用構造函數的地方和你輸入構造函數的地方之間是一個不值得關注的細節。

題外話:我認爲「創建一個對象」也是由C++標準中定義的技術術語,可能會或可能不會與「創造」的直觀概念的分歧。在您輸入構造函數之前或者在構造函數成功退出之後,我沒有一個可以方便地通過此技術定義來判斷對象是否被「創建」的引用。

+1

「這簡直是正確的說,調用構造函數創建一個(臨時)對象。」 - 不,這不對。 'T()'不是對構造函數的調用。 C++ *確實有辦法調用構造函數(當構造函數調用另一個構造函數時),並且在使用該構造函數時,不會創建任何對象。 – hvd

+0

@Hurkyl你再次困惑我.. :(以上答案在閱讀你的答案之前是明確的.. !!對不起 – UnKnown

2

class a{int a = 0;int b = 0;} a obj = new a(); 在上面的代碼中 你obj是創建內存OBJ在堆棧中分配,然後構造器 代碼執行

+0

它是任何構造函數的默認函數在堆上分配所需內存爲它的成員然後通過該引用指針訪問它實際上被命名爲對象。 –

相關問題