第四周筆記 c Boolan

2022-09-13 21:33:22 字數 2534 閱讀 7967

從這週開始,進入了c++下半部分的學習,這周學習的東西相對之前來說比較瑣碎,但都是值得注意的地方。

一、轉換函式

轉換函式是一種特殊型別的類成員函式。它定義了乙個由使用者定義的轉換,以便把乙個類物件轉換成某種其他的型別。

在類的宣告中,通過指定關鍵字operator,並在其後加上轉換的目標型別可以來宣告轉換函式,一般格式為:

operator type()

轉換函式的基本規則:

(1)轉換函式只能是成員函式,無返回值,空引數。

(2)不能定義到void的轉換,也不允許轉換成陣列或者函式型別。

(3)轉換常定義為const形式,原因是它並不改變資料成員的值。

具體的例子:

class

fraction

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

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 +

建構函式雖然有two parameters(兩個形參),但只有one argument,且建構函式前面沒有explicit,所以叫做non-explicit-one-argument constructor。

這裡主要是通過呼叫建構函式和通過過載操作符「+」,把4轉換成乙個fraction物件。

class

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] ambiguous

上述的**會導致二義性的出現,即 可以將4轉換成fraction 也可以將f轉換成double,與4相加得到乙個double,然後再轉換成fraction

為了使得編譯通過,可以將fraction d2 = f + 4;改成double d2 = f + 4

class

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關鍵字,所以不能將4轉換成fraction型別;也不能先將f轉換成double型別,與4相加後再將double轉換成fraction。

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 函...