操作符函式及過載(3)

2021-08-04 22:49:35 字數 2568 閱讀 5896

一.運算元與表示式

•運算元為左值

–complex lv (1, 2);

complex const rv (3, 4);

++lv;

–rv; // 錯誤

•表示式的值為左值,且為運算元本身(而非副本)

–complex a (1, 2), b (3, 4);

++++a; // ++(++a)

++a = b; // b->a

二.成員函式

•非常函式以支援左值型運算元,非常返回值以支援左值型表示式的值,返回自引用即運算元本身

–class complex 

};

三.全域性函式

•非常引數以支援左值型運算元,非常返回值以支援左值型表示式的值,返回引用型引數即運算元本身

–complex&

operator++

(complex&

opd)

一.運算元與表示式

•運算元為左值

–complex lv (1, 2);

complex const rv (3, 4);

lv++;

rv–; // 錯誤

•表示式的值為右值,且為運算元在運算前的副本

–complex a (1, 2), b (3, 4);

a++++; // 錯誤

a++ = b; // 錯誤

二.成員函式

•非常函式以支援左值型運算元,常返回值以支援右值型表示式的值,整型啞元引數以區別於前自增減

–class complex 

};

•對於後自增減表示式,編譯器在呼叫操作符函式時會多傳乙個整型引數,通過過載解析匹配到字尾操作符函式

–a++; // a.operator++ (0);

–++a; // a.operator++ ();

三.全域性函式

•非常引數以支援左值型運算元,常返回值以支援右值型表示式的值,整型啞元引數以區別於前自增減

–complex const

operator++ (complex& opd, int)

•對於後自增減表示式,編譯器在呼叫操作符函式時會多傳乙個整型引數,通過過載解析匹配到字尾操作符函式

–a++; // ::operator++ (a, 0);

–++a; // ::operator++ (a);

一.運算元與表示式

•左運算元為左值形式的輸出流(ostream)物件,右運算元為左值或右值

–complex lv (1, 2);

complex const rv (3, 4);

cout << lv;

cout << rv;

•表示式的值為左值,且為左運算元本身(而非副本)

–complex complex (1, 2);

cout << complex << endl;

–cout.operator<< (comlex).operator<< (endl);

::operator<< (::operator<< (cout, complex), endl);

二.全域性函式

•左運算元的型別為ostream,若以成員函式形式過載該操作符,就應將其定義為ostream類的成員,

該類為標準庫提供,無法新增新的成員,因此只能以全域性函式形式過載該操作符

•非常第一引數以支援左值型左運算元,常第二引數以支援右值型右運算元,非常返回值以支援左值型表示式的值,

返回引用型第一引數即左運算元本身

–ostream& operator

<< (ostream& lhs, complex const& rhs)

一.運算元與表示式

•左運算元為左值形式的輸入流(istream)物件,右運算元為左值

–complex lv (1, 2);

complex const rv (3, 4);

cin >> lv;

cin >> rv; // 錯誤

•表示式的值為左值,且為左運算元本身(而非副本)

–complex c1, c2;

cin >> c1 >> c2;

–cin.operator>> (c1).operator>> (c2);

::operator>> (::operator>> (cin, c1), c2);

二.全域性函式

•左運算元的型別為istream,若以成員函式形式過載該操作符,就應將其定義為istream類的成員,

該類為標準庫提供,無法新增新的成員,因此只能以全域性函式形式過載該操作符

•非常第一引數以支援左值型左運算元,非常第二引數以支援左值型右運算元,非常返回值以支援左值型表示式的值,返回引用型第一引數即左運算元本身

–istream& operator>> (istream& lhs, complex& rhs) 

操作符函式及過載(1)

在特定條件下,編譯器有能力把乙個由運算元和操作符共同組成的表示式,解釋為對乙個全域性或成員函式的呼叫,該全域性或成員函式被稱為操作符函式 通過定義操作符函式,可以實現針對自定義型別的運算法則,並使之與內建型別一樣參與各種表示式 一.成員函式 形如l r的雙目操作符表示式,將被編譯器解釋為 l.ope...

操作符函式及過載(2)

一.運算元與表示式 左右運算元均可為左值或右值 complex lv 1,2 complex const rv 3,4 lv rv rv lv 表示式的值必須是右值 complex a 1,2 b 3,4 c 5,6 a b c 錯誤二.成員函式 常函式以支援右值型左運算元,常引數以支援右值型右運算...

操作符函式及過載(4)

常用於在容器型別中以下標方式獲取資料元素 非常容器的元素為左值,常容器的元素為右值 一.函式操作符 如果乙個類過載了函式操作符,那麼該類的物件就可以被當做函式來呼叫,其引數和返回值就是函式操作符函式的引數和返回值 引數的個數 型別以及返回值的型別,沒有限制 唯一可以帶有預設引數的操作符函式 一.解引...