過載雙目運算子和過載單目運算子

2021-08-02 05:33:09 字數 1639 閱讀 1995

new 和delete是單目運算子。

strcmp函式將兩個字串進行比較,相等返回0;小於返回負數;大於返回正數。

strcpy的用法:

函式原型:char  *strcpy(char * est.const char *src)

功能是從src位址開始且含有null結束符的字串複製到以dest位址開始的字串中,並返回指向dest的指標。dest的記憶體長度要大於src的記憶體長度,否則會產生溢位。

因此兩個字串在相互賦值的時候如下:

char *p;

char *str="hello";

p=new char[strlen(str)+1];

strcpy(p,str);

c++中提供的非標準類string中的s是小寫的。complex也是c++中的非標準類,表示複數,第乙個字母是小寫的。

過載雙目運算子的時候可以借助於已經完成的過載運算子函式來做接下來的運算子過載函式。

過載單目運算子:只有乙個運算量

單目運算子過載函式作為成員函式時:

成員函式引數可以省略,因為成員函式中有預設引數*this,也就是當前物件。也就是說單目運算子的過載函式的引數為空。

不需要使用友元函式和一般函式。原因在於:對於運算子過載函式來說,它必須有乙個引數,並且在所有的引數當中必須包含乙個

該類的物件,該類的物件也就是當前物件,所以不需要別的元素,所以不用友元函式和一般函式。

對於單目元素運算子的過載,比如取反-,例子如下:

s=-x;

這句程式實際上是s=x.operator-();

所以單目運算子的過載函式的特點是沒有引數的成員函式。而我們可以知道的是普通的單目運算子都是比如取反一樣,符號在前,運算量在後,這樣的都是無引數的,而前置++也和普通的前置運算子一樣,所以也是無參的;但是我們需要區分前置++和後置++,而後置++並不是和普通單目運算子一樣符號在前運算量在後,所以後置++的過載函式的引數不為空,而是int。

以time類的前置++為例:

j=++i 是將i加1,然後將i的值取出來賦值給j

j=i++ 將i值取出來賦值給j,然後i加1

上面兩種,當前物件i都要加1,但是返回值不一定。

time類中的前置++的實現如下:

但是對於後置++來說,它和前置++是相同的,因此定義過載函式的時候無法進行區分。因此

c++中規定,後置++的過載函式的引數不為空,而是int,以time類的後置++為例,如下:

對於上面的後置++,可以看到在過載函式中生成了乙個新的time物件temp,這個temp使用複製的方式通過呼叫預設複製建構函式進行初始化的,

而這個函式結束之後,temp離開了作用域就會被解析釋放掉。

對於前置++和後置++,因為後置++實現的過程中需要建立新物件、釋放物件,所以它的效率不如前置++。因此,盡量使用前置++。

過載雙目運算子

include include using namespace std class string 定義預設建構函式 string char str 建構函式過載 friend bool operator string string1,string string2 friend bool operat...

中雙目運算子 運算子過載

這節講c 中的運算子過載。方法有過載,運算子也有過載,設想一下,我們用加號計算int型別的資料,返回的也是int型別,這很正常,因為在數學中加號就是用來計算數字的。但是當我們用加號計算兩個string型別的資料時,給我們返回的則是兩個string資料連線在一起,難道加號應用於不同的場景,編譯器就會自...

C 運算子過載之過載單目運算子

單目運算子只有乙個運算元,但是其過載方法類似於雙目運算子,在這裡以過載單目運算子 為例,介紹單目運算子的過載 注意 和 運算子有兩種使用方式,前置自增運算子和後置自增運算子,它們的作用是不一樣的,為了區分他們,c 約定,在自增 自減 運算子過載函式中,增加乙個int型別的形參,就是後置自增 自減 運...