C Primer Plus學習筆記(八)使用類

2021-08-27 23:55:13 字數 1735 閱讀 5813

-轉換函式

運算子過載屬於c++裡面的多型,可用於使用者自定義型別。

eg:

class

time

time

time::operator+(const

time &t) const

注:(1)運算子過載包括兩種,成員函式過載(類成員函式)和非成員函式過載(友元函式,以訪問類成員)。

(2)運算子過載引數個數不變,如對+過載後,引數仍為兩個。

(3)對於雙目運算子,成員函式引數個數為1,因為預設隱引數是物件本身。非成員函式引數為2。

常用過載運算子《示例:

ostream & operator<<(ostream & os, const time &t)

模板:

ostream & operator<<(ostream &os,const c_name &obj)

//說明:函式引數為引用是因為此時的cout傳入的是他本身而不是其拷貝,是必須的;

函式返回為引用的含義是返回的仍是傳入引數本身,從而可以為後續os<<..<<..鋪墊。

eg:

class person

person::person()

person::person(double m_weight)

在類的定義中,建構函式使用數值型別作為引數,則可以用於轉換。

person p;

p =11.2;//完全可以

注:只有建構函式只有乙個引數時才可以進行轉換,或者其他引數都提供預設值。如:

person::person(double a,double b = 11.2);

p = 11.2;//完全可以

可以進行二次型別轉換,如上述,可以用int引數代入,int先轉換為double再轉換為類物件。

關閉隱式轉換:

宣告建構函式時使用explicit關鍵字,則只能使用顯式強制轉換。(在標頭檔案宣告即可,cpp不需要)

//建構函式未使用explicit時:

p = 11.2;//可以

//使用後:

p = 11.2;//error

p = person(11.2);//correct

p = (person)11.2;//correct

注:所有轉換都必須避免二義性,如上述int轉換為double,如果還存在long型別建構函式,則轉換失敗。

使用轉換函式實現。注意轉換函式必須是類方法,不能指定返回型別,不能有引數。

模板:

operator

typename();

eg:

class person

person::operator

int()

person::operator

double()

用法:

person p1(1.1,1.2);

double a = p1;//隱式轉換

與建構函式轉換相同,可以用explicit來實現只能顯式轉換;二義性原則不能變。

c primer plus學習筆記

1.變數名命名規則 重要的 1 有含義 2 只能用字母字元 數字和下劃線 3 第乙個字元不能是數字 4 區分大小寫 5 不能用c 關鍵字 2.整型 1 無符合型別不能表負值 2 char short 16 int short long 32,int 和longlong 64,long c 11 寬度...

C PrimerPlus學習筆記

if語句中判斷恒等,將常量放前,防止由於 寫成 造成的難以查詢的bug。if 0 count 若寫成 0 count 會報錯,count 0 則不會命名空間 using namespace std cout one cout two std cout one std cout two using s...

C Primer Plus學習筆記

1.組合語言是特地的cpu設計所採用的一組內部指令的助記符,不同的cpu型別使用不同的cpu c給予你更多的自由,也讓你承擔更多的風險 自由的代價是永遠的警惕 2.目標 檔案 可執行檔案和庫 3.可以用畫幾個盒子的方式來跟蹤乙個程式的變數 一門語言的語法就是一套規則,用於管理這種語言中的合法語句組織...