本章介紹了定義和使用類的許多重要方面,其中的一些內容可能較難理解,但隨著實踐經驗的不斷增加,您將逐漸掌握它們。
一般來說,訪問私有類成員的唯一方法是使用類方法。c++使用友元函式來避開這種限制。要讓函式成為友元,需要在類宣告中宣告該函式,並在宣告前加上關鍵字 friend。
c++擴充套件了對運算子的過載,允許自定義特殊的運算子函式,這種函式描述了特定的運算子與類之間的關係運算子函式可以是類成員函式,也可以是友元函式(有一些運算子函式只能是類成員函式)。
要呼叫運算子函式,可以直接呼叫該函式,也可以以通常的句法使用被過載的運算子。
對於運算子op,其運算子函式的格式如下:
operatorop( argument-list)
argument-list表示該運算子的運算元。如果運算子函式是類成員函式,則第乙個運算元是呼叫物件,
它不在 argument-list i中。例如,本章通過為 vector 類定義 operator+()成員函式過載了加法。如果up、right和 result都是 vector物件,則可以使用下面的任何一條語句來呼叫向量加法:
result = up.
operator
+(right)
;result up + right;
在第二條語句中,由於運算元up和 right的型別都是 vector,因此c++將使用 vector的加法定義。
當運算子函式是成員函式時,則第乙個運算元將是呼叫該函式的物件。例如,在前面的語句中,up物件是呼叫函式的物件。
定義運算子函式時,如果要使其第乙個運算元不是類物件,則必須使用友元函式。這樣就可以將運算元按所需的順序傳遞給函式了。
最常見的運算子過載任務之一是定義《運算子,使之可與cout一起使用,來顯示物件的內容。
要讓ostream物件成為第乙個運算元,需要將運算子函式定義為友元;要使重新定義的運算子能與其自身拼接,需要將返回型別宣告為 ostream&。下面的通用格式能夠滿足這種要求:
ostream operator
<<
(ostream &os,
const c_name & obj)
然而,如果類包含這樣的方法,它返回需要顯示的資料成員的值,則可以使用這些方法,無需在operator<<()中直接訪問這些成員。
在這種情況下,函式不必(也不應當)是友元。
c++允許指定在類和基本型別之間進行轉換的方式。首先,任何接受唯一乙個引數的建構函式都可被用作轉換函式,將型別與該引數相同的值轉換為類。如果將型別與該引數相同的值賦給物件,則c++將自動呼叫該建構函式。
例如,假設有乙個 string類,它包含乙個將char*值作為其唯一引數的建構函式,那麼如果bean是 string物件,則可以使用下面的語句:
bean =
"pinto"
;//converts type char to type string
然而,如果在該建構函式的宣告前加上了關鍵字 explicit,則該建構函式將只能用於顯式轉換
bean =
string
("pinto");
//converts type char *to type string explicitly
要將類物件轉換為其他型別,必須定義轉換函式,指出如何進行這種轉換。
轉換函式必須是成員函式。將類物件轉換為 typename型別的轉換函式的原型如下:
operator
typename()
;
注意,轉換函式沒有返回型別、沒有引數,但必須返回轉換後的值(雖然沒有宣告返回型別)。
例如,下面是將 vector轉換為 double型別的函式:
vector::
operator
double()
經驗表明,最好不要依賴於這種隱式轉換函式。 1 6 C 類和物件
day 6 類和物件 1,類類內部包含類的特徵和類的行為 1,特徵 在類中的表現形式為字段 字段 訪問修飾符 資料型別 欄位名 字段預設修飾符為private 類的預設修飾符為internal,在本程式集可以訪問,他的許可權比public小一點 程式集 exe 可執行檔案 和.dll 2,行為 在類...
C 類中靜態成員使用總結
在c 中,靜態成員是屬於整個類,而不是某個物件的,靜態成員變數只儲存乙份供所有物件共有。所以在所有物件中都可以共享它。使用靜態成員變數實現多個物件之間的資料共享不會被破壞隱藏的原則,保證了安全性還可以節省記憶體。靜態成員的定義或者宣告要加個關鍵字static。靜態成員可以通過雙冒號來使用即 類名 靜...
C 知識總結 P01 型別系統
程式語言的型別系統有靜態型別與動態型別之分。靜態型別的程式語言在編譯期間會進行型別檢查,如果編譯期間發現型別不匹配或型別未知,編譯器就會報出對應的語法錯誤 動態型別的程式語言在執行期間才會確定常量變數型別,因而更加靈活。靜態型別與動態型別各有優勢。靜態型別的程式語言要求程式設計人員為每乙個變數指定型...