list item過載運算子需要使用運算子函式,其宣告格式為operatorop(argument-list);
要求op必須是c++的有效運算子,且不能是./ .* / :: / ?:等;
(1)過載後的運算子至少有乙個引數為自定義型別;
(2)使用運算子時不能違反運算子原來的句法規則,不能修改運算子的優先順序,不能建立新的運算子;
(3)不能過載下面的運算子,sizeof/.成員運算子/ . * 成員指標運算子/::作用域解析運算子/?:條件運算子/typeid乙個rtti運算子/const_cast強制型別轉換運算子/dynamic_cast型別轉換運算子/reinterpret_cast型別轉換運算子/static_cast型別轉換運算子等;
(4)大多數運算子可以通過成員函式或非成員函式過載,但=賦值運算子/()函式呼叫運算子/下表運算子/->指標成員運算子只能通過成員函式過載;
(1)非成員函式的運算子過載方式不通過成員函式形式呼叫,要求至少有乙個引數為非基本型別;
雙目運算子,定義形式為operator x (oprd1,oprd2),使用為oprd1 x oprd2;
前置單目運算子,定義形式為operator x (oprd1),使用為x oprd1;
後置單目運算子,定義形式為operator x(oprd1,0),使用為oprd1 x;
(2)可以使用成員函式形式,也可以使用友元函式形式,基本上等價;成員函式一般預設*this作為左值;友元函式一般預設首先傳入的引數作為左值;
(1)雙目運算子,
成員函式形式,*this隱式傳入作為左值,顯示傳入的引數(有且僅有乙個)作為右值;
友元函式形式,顯示傳入的第乙個引數作為左值,第二個作為右值;
(2)單目前綴運算子,x var
成員函式形式,*this隱式傳入作為右值,引數列表為空,即不傳入引數
友元函式形式,顯示傳入第乙個引數作為右值,有且僅有乙個引數
(3)單目字尾運算子,var x
成員函式形式,*this隱式傳入作為左值,引數列表為(int),定義仍然為(int),不增加引數名,使用時預設右值;
友元函式形式,顯式傳入第乙個引數作為左值,第二個引數為int,定義仍然為(int),不增加引數名,使用時預設右值;
需要注意,只有本身可以作為單目運算子的運算子可以過載為單目運算子;
單目字尾運算子的預設右值只能使用(int);
C 運算子過載詳解
1.運算子過載定義 c 中預定義的運算子的操作物件只能是基本資料型別。但實際上,對於許多使用者自定義型別 例如類 也需要類似的運算操作。這時就必須在c 中重新定義這些運算子,賦予已有運算子新的功能,使它能夠用於特定型別執行特定的操作。運算子過載的實質是函式過載,它提供了c 的可擴充套件性,也是c 最...
運算子過載詳解
1.運算子過載定義 c 中預定義的運算子的操作物件只能是基本資料型別。但實際上,對於許多使用者自定義型別 例如類 也需要類似的運算操作。這時就必須在c 中重新定義這些運算子,賦予已有運算子新的功能,使它能夠用於特定型別執行特定的操作。運算子過載的實質是函式過載,它提供了c 的可擴充套件性,也是c 最...
C Base 運算子過載 括號運算子過載詳解
一 概念及基礎 圓括號運算子 也可以過載,過載之後物件就可以使用圓括號運算子了。括號運算子只能被過載為類的非靜態成員函式,不能過載為友元函式和普通函式。過載括號運算子函式的引數個數沒有限制,甚至沒有引數都可以。過載格式 返回值 operator 表示式表 二 簡單示例 include using n...