我是C++新手。不要介意這個愚蠢的問題:C++默認構造函數是否總是被調用,如C++ Primer中所示?
在52頁的C++底漆第四版(斯坦利·李普曼),還有它說了一句:不管變量在哪裏定義
默認構造函數用於。
任何人都可以解釋一下嗎?這個陳述看起來好像缺少了一些東西。
我是C++新手。不要介意這個愚蠢的問題:C++默認構造函數是否總是被調用,如C++ Primer中所示?
在52頁的C++底漆第四版(斯坦利·李普曼),還有它說了一句:不管變量在哪裏定義
默認構造函數用於。
任何人都可以解釋一下嗎?這個陳述看起來好像缺少了一些東西。
推測你的意思是斯坦利李普曼?
無論如何,雖然我沒有方便的拷貝來檢查,我猜他的意思是,如果你有這樣的:
myclass X;
...的X
對象將使用默認的構造函數初始化,無論對象是全局的(在任何函數之外),局部於某個函數還是局部於某個函數內的某個其他範圍(例如,在for
循環中)。
這樣的聲音將是它的要義。如果沒有其他構造函數被請求,那麼將添加數組和堆變量/數組也是默認構造的。 – 2010-08-24 02:34:41
如果你有一個類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
}
$ 12.1
默認構造函數(12.1),拷貝構造函數和拷貝賦值運算符(12.8),和析構函數(12.4)是特殊的成員函數。 當程序沒有明確聲明它們時,實現將隱含地聲明這些成員函數作爲類類型,除非在12.1中註明。這個實現將隱含地用定義它們,如果它們被使用,如12.1,12.4和12.8中所規定的那樣。程序不應該定義隱式聲明的特殊成員函數。程序可以顯式引用隱式聲明的特殊成員函數。 [例子:一個程序可以顯式調用,獲取隱式聲明的特殊成員函數的地址或形成指向成員的指針。
從書本身:
每個類也可以定義,如果類型的變量定義,但沒有提供一個初始化會發生什麼。一個類通過定義一個特殊的構造函數來實現,這個構造函數被稱爲默認構造函數。這個構造函數被稱爲默認構造函數,因爲它默認運行;「如果沒有初始化器,則使用此構造器。 無論定義變量的位置如何,都使用默認構造函數。
(my italics)。因此,你在書中的一個部分,他們已經談論了默認的構造函數(在其他一些答案中應該很明顯,默認構造函數絕對是而不是總是使用)。
本書所說的全部內容是,在使用默認構造函數爲的情況下,對變量進行定義(函數內部或外部,類內部或外部,括號內部循環,選擇語句或甚至裸括號等)。
我認爲你需要給句子增加更多的上下文,因爲使用**默認構造函數並不總是這樣**總是...... – 2010-08-24 02:08:13
他們說,沒有愚蠢的問題,但顯然他們錯了。這個網站的目的是,這樣的問題和答案不僅有助於那些真正在這裏提出特定問題的人,也有助於任何正在尋找相同或類似問題的答案的人。現在想一想。主題「C++新手:愚蠢的問題」有多大幫助。爲社區做點什麼。想想你在問什麼,並問得好,社區可能會幫助你。 – 2010-08-24 02:17:32
哪章/節?我似乎無法找到這句話 – Chubsdad 2010-08-24 02:18:35