1、
如果程序員想允許不屬于當(dāng)前結(jié)構(gòu)的一個(gè)成員函數(shù)存取結(jié)構(gòu)中的數(shù)據(jù),那該怎么辦呢?他可以在s t r u c t內(nèi)部聲明這個(gè)函數(shù)為友元。注意,一個(gè)友元必須在一個(gè) s t r u c t內(nèi)聲明,這一點(diǎn)很重要,因?yàn)樗ê途幾g器)必須能讀取這個(gè)結(jié)構(gòu)的聲明以理解這個(gè)數(shù)據(jù)類型的大小、行為等方面的規(guī)則。
2、在C + +中,定義和初始化是同一概念,不能只取其中之一。
3、構(gòu)造函數(shù)和析構(gòu)函數(shù)是兩個(gè)非常特殊的函數(shù):它們沒有返回值。這與返回值為 v o i d的函數(shù)顯然不同。后者雖然也不返回任何值,但我們還可以讓它做點(diǎn)別的。而構(gòu)造函數(shù)和析構(gòu)函數(shù)則不允許。在程序中創(chuàng)建和消除一個(gè)對象的行為非常特殊,就像出生和死亡,而且總是由編譯器來調(diào)用這些函數(shù)以確保它們被執(zhí)行。如果它們有返回值,要么編譯器必須知道如何處理返回值,要么就只能由用戶自己來顯式地調(diào)用構(gòu)造函數(shù)與析構(gòu)函數(shù),這樣一來,安全性就被破壞了。
4、析構(gòu)函數(shù)的語法與構(gòu)造函數(shù)一樣,用類的名字作函數(shù)名。然而析構(gòu)函數(shù)前面加上一個(gè) ~,以和構(gòu)造函數(shù)區(qū)別。另外,
析構(gòu)函數(shù)不帶任何參數(shù),因?yàn)槲鰳?gòu)不需任何選項(xiàng)。下面是一個(gè)析構(gòu)函數(shù)的聲明:
class Y {
p u b l i c :
~ Y ( ) ;
} ;
5、一般說來,應(yīng)該在
盡可能靠近變量的使用點(diǎn)定義變量,并在定義時(shí)就初始化(這是對預(yù)定義類型的一種建議,但在那里可以不做初始化)。這是出于安全性的考慮,減少變量誤用的可能性。另外,程序的可讀性也增強(qiáng)了,因?yàn)樽x者不需要跳到程序頭去確定變量的類型。
6、函數(shù)重載,通過范圍和參數(shù),不能通過返回值
7、缺省參數(shù)是在函數(shù)聲明時(shí)就已給定的一個(gè)值,如果我們在調(diào)用函數(shù)時(shí)沒有指定這一參數(shù)的值,編譯器就會自動地插上這個(gè)值。我們可以把:
stash(int? Size);// zero? quantity
stash(int? Size,int? Quantity);
用一個(gè)函數(shù)聲明來代替
stash(int Size, int? Quantity=0);
這樣,s t a s h ( i n t )定義就簡化掉了——所需要的是一個(gè)單一的s t a s h ( i n t , i n t )定義。
現(xiàn)在這兩個(gè)對象的定義
stash? A(100),B(100,0);
將會產(chǎn)生完全相同的結(jié)果。它們將調(diào)用同一個(gè)構(gòu)造函數(shù),但對于 A,它的第二個(gè)參數(shù)是由編譯
器在看到第一個(gè)參數(shù)是整型而且沒有第二個(gè)參數(shù)時(shí)自動加上去的。
posted on 2006-12-06 16:07
happytian 閱讀(154)
評論(0) 編輯 收藏