C 運算子過載 類型別的轉換

2021-06-18 14:49:50 字數 1199 閱讀 9081

運算子過載

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而上面所寫的那樣,而且即使是這樣寫那也不正確的,因為運算子過載中有幾個運算子的返回值是有格式的 約定 ...