從這週開始,進入了c++下半部分的學習,這周學習的東西相對之前來說比較瑣碎,但都是值得注意的地方。
一、轉換函式
轉換函式是一種特殊型別的類成員函式。它定義了乙個由使用者定義的轉換,以便把乙個類物件轉換成某種其他的型別。
在類的宣告中,通過指定關鍵字operator,並在其後加上轉換的目標型別可以來宣告轉換函式,一般格式為:
operator type()
轉換函式的基本規則:
(1)轉換函式只能是成員函式,無返回值,空引數。
(2)不能定義到void的轉換,也不允許轉換成陣列或者函式型別。
(3)轉換常定義為const形式,原因是它並不改變資料成員的值。
具體的例子:
classfraction
operator
double() const
private
:
int m_numerator; //
分子int m_denominator; //
分母};
fraction f(
3, 5
);double d = 4 + f; //
呼叫operater double將f轉換成double
double d = 4 + f;
這一語句首先查詢fraction是否有過載操作符 operator + (double, fraction) 的函式,由於沒有,所以會呼叫轉換函式operator double() const
這裡主要是把 f 轉換成乙個double 值。
例子:
class建構函式雖然有two parameters(兩個形參),但只有one argument,且建構函式前面沒有explicit,所以叫做non-explicit-one-argument constructor。fraction
fraction
operator + (const fraction&f)
private
:
int m_numerator; //
分子int m_denominator; //
分母};
fraction f(
3, 5
);fraction d2 = f + 4; //
呼叫non-explicit ctor將4轉換成fraction(4, 1),然後再呼叫operator +
這裡主要是通過呼叫建構函式和通過過載操作符「+」,把4轉換成乙個fraction物件。
class上述的**會導致二義性的出現,即 可以將4轉換成fraction 也可以將f轉換成double,與4相加得到乙個double,然後再轉換成fractionfraction
operator
double() const
fraction
operator + (const fraction&f)
private
:
int m_numerator; //
分子int m_denominator; //
分母};
fraction f(
3, 5
);fraction d2 = f + 4; //
[error] ambiguous
為了使得編譯通過,可以將fraction d2 = f + 4;
改成double d2 = f + 4
class由於在建構函式前面增加了explicit關鍵字,所以不能將4轉換成fraction型別;也不能先將f轉換成double型別,與4相加後再將double轉換成fraction。fraction
operator
double() const
fraction
operator + (const fraction&f)
private
:
int m_numerator; //
分子int m_denominator; //
分母};
fraction f(
3, 5
);fraction d2 = f + 4; //
[error] convertion from double to fraction requested
explicit這個關鍵字基本只出現在建構函式前面,意思是需要明確地需要呼叫這個建構函式才能呼叫,不存在暗中、自動的轉換操作。
二、point-like class
(1)智慧型指標
關於point-like class 的設計,首先,其內必有一真正的指標,並且為了使得智慧型指標在使用時像正常指標一樣,其設計中必須對操作符 *和->進行過載。
第四周筆記
1.class的get set方法 提供相對安全方式訪問成員變數 2.class的建構函式 作用 初始化物件的屬性 特點 a.沒有函式返回值 b.函式名與型別相同 c.可以過載 d.例項乙個物件會自動呼叫建構函式 3.class的析構函式 作用 釋放物件給屬性分配空間 特點 a.無返回值 b.不能過...
第四周筆記整理(1)
boolean,byte,char,short,int,long,float,double boolean,byte,character,short,integer,long,float,double 整數型別資料均有快取機制,如果在該範圍內從快取陣列取出,不會例項化新的物件,預設範圍 128 12...
第二週筆記 c Boolan
一 關於 string 類的實現過程中所涉及的三大函式 拷貝建構函式 拷貝賦值函式 析構函式 以下為類體部分 class string private char m data 接下來是關於string類中建構函式 拷貝建構函式 拷貝賦值函式以及析構函式的具體定義,注意將以上函式寫成 inline 函...