在C++中,構造函數是一個在構件對象的時候調用的特殊的函數,其目的是對對象進行初始化的工作,從而使對象被使用之前可以處於一種合理的狀態。但是,構造函數的設計並不完美,甚至有些不合理的特性。比如說,限定構造函數名稱與類的名稱相同的條件。這些特性在構造C++編譯器的時候是值得引起注意的。還有,在今後C++的標准修訂或者制定其他面向對象的設計語言時候應當避免這些特性。這裡也提出了一些解決的方案。
C++中,任何類都有一個(至少有一個)構造函數,甚至在沒有構造函數被聲明的時候亦是如此。在對象被聲明的時候,或者被動態生成的時候,這些構造函數就會被調用。構造函數做了許多不可見的工作,即使構造函數中沒有任何代碼,這些工作包括對對象的內存分配和通過賦值的方式對成員進行初始化。構造函數的名稱必須與類的名稱相同,但是可以有許多不同的重載版本來提供,通過參數類型來區分構造函數的版本。構造函數可以顯式的通過用戶代碼來調用,或者當代碼不存在是通過編譯程序來隱式插入。當然,顯式地通過代碼調用是推薦的方法,因為隱式調用的效果可能不是我們所預料的,特別是在處理動態內存分配方面。代碼通過參數來調用唯一的構造函數。構造函數沒有返回值,盡管在函數體中可以又返回語句。每個構造函數可以以不同的方式來實例化一個對象,因為每個類都有構造函數,至少也是缺省構造函數,所以每個對象在使用之前都相應的使用構造函數。
因為構造函數是一種函數,所以他的可見性無非是三種public、private、protected。通常,構造函數都被聲明為public型。如果構造函數被聲明為private或protected,就限制了對象的實例化。這在阻止類被其他人實例化的方面很有效。構造函數中可以有任何C++的語句,比如,一條打印語句,可以被加入到構造函數中來表明調用的位置。