2010-08-24 33 views
5

我是C++新手。不要介意這個愚蠢的問題:C++默認構造函數是否總是被調用,如C++ Primer中所示?

在52頁的C++底漆第四版(斯坦利·李普曼),還有它說了一句:不管變量在哪裏定義

默認構造函數用於。

任何人都可以解釋一下嗎?這個陳述看起來好像缺少了一些東西。

+0

我認爲你需要給句子增加更多的上下文,因爲使用**默認構造函數並不總是這樣**總是...... – 2010-08-24 02:08:13

+4

他們說,沒有愚蠢的問題,但顯然他們錯了。這個網站的目的是,這樣的問題和答案不僅有助於那些真正在這裏提出特定問題的人,也有助於任何正在尋找相同或類似問題的答案的人。現在想一想。主題「C++新手:愚蠢的問題」有多大幫助。爲社區做點什麼。想想你在問什麼,並問得好,社區可能會幫助你。 – 2010-08-24 02:17:32

+0

哪章/節?我似乎無法找到這句話 – Chubsdad 2010-08-24 02:18:35

回答

2

推測你的意思是斯坦利李普曼?

無論如何,雖然我沒有方便的拷貝來檢查,我猜他的意思是,如果你有這樣的:

myclass X; 

...的X對象將使用默認的構造函數初始化,無論對象是全局的(在任何函數之外),局部於某個函數還是局部於某個函數內的某個其他範圍(例如,在for循環中)。

+0

這樣的聲音將是它的要義。如果沒有其他構造函數被請求,那麼將添加數組和堆變量/數組也是默認構造的。 – 2010-08-24 02:34:41

3

如果你有一個類Object

class Object 
{ 
public: 
    int x; 

    Object() { x = 5; } 
}; 

和實例化一個在這樣的函數:

void foo() 
{ 
    Object obj; 
    // obj.x == 5 
} 

默認構造函數將被使用。目的也採用默認的構造函數構造的,當你在另一個類中聲明他們並實例,其他類:

class AnotherObject 
{ 
public: 
    Object obj; 
}; 

void bar() 
{ 
    AnotherObject another; 
    // another.obj.x == 5 
} 
0

$ 12.1

默認構造函數(12.1),拷貝構造函數和拷貝賦值運算符(12.8),和析構函數(12.4)是特殊的成員函數。 當程序沒有明確聲明它們時,實現將隱含地聲明這些成員函數作爲類類型,除非在12.1中註明。這個實現將隱含地用定義它們,如果它們被使用,如12.1,12.4和12.8中所規定的那樣。程序不應該定義隱式聲明的特殊成員函數。程序可以顯式引用隱式聲明的特殊成員函數。 [例子:一個程序可以顯式調用,獲取隱式聲明的特殊成員函數的地址或形成指向成員的指針。

4

從書本身:

每個類也可以定義,如果類型的變量定義,但沒有提供一個初始化會發生什麼。一個類通過定義一個特殊的構造函數來實現,這個構造函數被稱爲默認構造函數。這個構造函數被稱爲默認構造函數,因爲它默認運行;「如果沒有初始化器,則使用此構造器。 無論定義變量的位置如何,都使用默認構造函數。

(my italics)。因此,你在書中的一個部分,他們已經談論了默認的構造函數(在其他一些答案中應該很明顯,默認構造函數絕對是而不是總是使用)。

本書所說的全部內容是,在使用默認構造函數的情況下,對變量進行定義(函數內部或外部,類內部或外部,括號內部循環,選擇語句或甚至裸括號等)。

相關問題