首先回憶下以前學的函式過載
函式過載
類中的函式過載
操作符過載(operator)
什麼是操作符過載?
大家都知道,在c裡,有'+,-,*,/'這些操作符,且它們的功能就是實現普通變數運算。
由於c++是物件導向的,遇到的變數大多都是物件,所以優化了c裡的操作符,使它們擁有了過載能力.能通過一定方式,使物件能進行'+,-,*,/'等運算.
操作符的過載是以函式的方式進行.
操作符過載定義
操作符過載,通過operator關鍵字在函式前定義:
[返回型別] operator [需要過載的操作符](函式引數)
作符過載有幾種方式 : 全域性操作符過載函式、全域性操作符過載函式
編譯器首先會判斷運算的若是物件,就會先從類裡尋找成員操作符過載函式,若沒找到,就會再去全域性裡尋找全域性操作符過載函式.
注意事項:
比如賦值(=)、下標()、下標()、呼叫(())和成員訪問箭頭(->):
test t3=t2; //相當於呼叫了: test t3.operator =(t2); 裡面會通過this指標來代替左側數t3
有些操作符既可以當做成員操作符過載函式,也可以當做全域性操作符過載函式,由於函式引數可以多個,便稱為二元操作符
比如加法(+),與(&&),或(||),逗號(,)等:
以加法(+)為例,當設為全域性操作符過載函式時,執行
test t3=t1+t2; //相當於呼叫了: test t3 = operator +(t1,t2);
以加法(+)為例,當設為成員操作符過載函式時,執行
test t3=t1+t2; //相當於呼叫了: test t3 =t1.operator +(t2); //裡面會通過this指標來代替左側數t1
多個過載的操作符過載函式
由於操作符過載函式帶引數,所以可以存在多個相同的操作符過載函式
例如:class test
;初步試驗
1.接下來,來個全域性操作符過載函式例子:
#include "stdio.h"
class test
int getx()
int gety()
friend test operator + (const test& t1,const test& t2);
//宣告友元函式,可以使用私有成員變數 };
test operator + (const test& t1,const test& t2) //過載
int main()
列印結果:
t3.x:3 t3.y:7
t4.x:4 t4.y:10
換成成員操作符過載函式例子:
#include "stdio.h"
class test
int getx()
int gety()
test operator + (const test& t2)
}; int main()
列印結果:
t3.x:3 t3.y:7
t4.x:4 t4.y:10
加深理解
由於c++裡,沒有複數的慨念,而在剛剛又學習了操作符過載,所以接下來便通過操作符過載來實現複數類
複數類應該具有
兩個成員
實部a 、虛部b
運算操作符
+ - : 結果 = 兩個實部進行加減,兩個虛部進行加減
* : 結果 = (a1+b1)(a2+b2)= (a1*a2 - b1*b2 )+( a2*b1 + a1*b2);
/ : 結果 =(a1+b1)/(a2+b2)= (a1*a2+b1*b2)/(a2* a2+b2* b2) +(b1*a2-a1*b2)/(a2* a2+b2* b2)
比較操作符:== ,!=
賦值操作符: =
求模成員函式 : 等於a^2+b^2的算術平方根
所以複數類的操作符過載共有以下幾個:
1.寫標頭檔案complex.h:
#ifndef __complex_h
#define __complex_h
class complex;
#endif
2.寫原始檔complex.cpp
#include "complex.h"
#include "math.h"
complex::complex(int a,int b)
complex complex::operator + (const complex& t)
complex complex::operator - (const complex& t)
complex complex::operator * (const complex& t)
complex complex::operator / (const complex& t)
bool complex::operator == (const complex& t)
bool complex::operator != (const complex& t)
complex& complex::operator = (const complex& t)
return *this;
}
double complex::getmodulus()
double complex::geta()
double complex::getb()
3.寫測試檔案test.cpp
#include "stdio.h"
#include "complex.h"
int main()
4.編譯執行
t3.a=3.000000 t3.b=9.000000
t3 modulus:9.486833
t4==t3: 1 //為真
t4!=t3: 0 //為假
t3==t1: 0 //為假
以上所述是小編給大家介紹的c++-操作符過載、並實現複數類詳解詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對我們**的支援!
本文標題: c++-操作符過載、並實現複數類詳解
本文位址: /ruanjian/c/254453.html
15 C 操作符過載 並實現複數類
首先回憶下以前學的函式過載 函式過載 類中的函式過載 操作符過載 operator 什麼是操作符過載?大家都知道,在c裡,有 這些操作符,且它們的功能就是實現普通變數運算。由於c 是物件導向的,遇到的變數大多都是物件,所以優化了c裡的操作符,使它們擁有了過載能力.能通過一定方式,使物件能進行 等運算...
操作符過載(複數類 陣列類 函式物件)
目錄 操作符過載與複數類 陣列操作符的過載 函式呼叫操作符 c 中的過載能夠以特殊形式的函式的擴充套件操作符的功能 通過operator關鍵字可以定義特殊的函式 operator的本質是通過函式過載操作符 type operator sign const type p1,const type p2 ...
C 類操作符過載筆記
不能改變操作符優先順序 不能改變操作符的結合性 不能改變操作符所需要的運算元 不能建立新的操作符 對於二元操作符過載,如果操作符左邊是類 那麼就在該類內部成員函式過載操作符即可 如果操作符左邊不是類,而是乙個常量,那麼就必須在類的外部定義乙個操作符過載函式 有乙個最基本條件 一定有乙個一元是乙個自定...