-轉換函式
運算子過載屬於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.可以用畫幾個盒子的方式來跟蹤乙個程式的變數 一門語言的語法就是一套規則,用於管理這種語言中的合法語句組織...