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