C 運算子過載詳解

2021-09-23 21:58:14 字數 1257 閱讀 2687

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...