運算子過載
1、運算子過載的格式如下:
operator op(argument-list)其中op必須是有效的c++運算子如:+ - * 等
下面是乙個過載+的例子:
#ifndef class_h
#define class_h
class time
#endif
...time time::operator+(time &t)
time time::operator+(double n)
void main()
2、上述例子試講運算子過載作為類的成員函式,還可以將過載運算子作為非成員函式來實現,這樣做的好處是不必考慮運算元的順序問題。
此時會用到友元函式,因為我們需要去訪問類的成員。
宣告 :friend time operator*(double n, const time & t); //不是類的成員函式,但是與累的成員函式許可權相同
定義 :time operator*(double n, const time & t) //不需要time::限定符
3、、運算子過載的限制
1)必須至少有乙個為使用者自定義的型別,這樣可以防止使用者為標準的c++型別過載
2)過載之後不能違反原來的運算子的運算規則
3)不能自創不存在的運算子
4)規定的不能過載的運算子:
sizeof . :: ?: typeid 以及一些強制轉換符
5)有一些只能通過成員函式進行過載:
=,(), ,->
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、1、
例如有如下的建構函式
time(double d); time(double d , int i=0);
此時可以這樣進行物件的初始化 time t = time(16.2); time t = 16.2;
它將自動去匹配建構函式,進行隱式轉換。。但是注意一點,能做這種轉換的建構函式只能接受乙個引數或者有預設的引數。
想要去除這種自動隱式轉換可以在建構函式宣告時加上explicit關鍵字 2、
那麼如何將類型別轉換為基本的資料型別呢? 使用者必須提供轉換函式才行
轉換函式必須為類成員函式 , 形式如下:operator typename();
定義過轉換函式以後,在進行如double d = t;的操作時,編譯器會自動的尋找轉換函式
C 型別轉換運算子過載
在c 中有乙個特殊的運算子過載方法 型別轉換運算子過載,形如 operator type code class cdemo operator int private int x int y code int tmain int argc,tchar argv 執行結果 即 x的值,int 對demo...
c 過載型別轉換運算子
型別轉換運算子 型別轉換運算子是類的一種特殊成員函式,負責將乙個類型別的值轉換成其他型別 乙個型別轉換函式必須是類的成員函式,不能有返回型別,形參列表也必須為空,通常是const的。operator type const class smallint 轉換源,為int型。可將算術型別轉換成small...
型別轉換 運算子過載
c 中沒有返回型別的函式有3個,建構函式 析構函式 型別轉換函式。operator const char const 如果是過載 的話,那應該寫成 const char operator const而上面所寫的那樣,而且即使是這樣寫那也不正確的,因為運算子過載中有幾個運算子的返回值是有格式的 約定 ...