要對自定義類進行插入運算子和提取運算子過載,則過載函式既可以定義為類的成員函式,也可以定義為非

2021-06-01 00:47:44 字數 5353 閱讀 5411

1樓:最愛佳偶天橙

#include

using namespace std;

const int r=3, c=4;

class matrix

}void display()}};

int main()

定義student類儲存學生資訊(包括學號、姓名和成績),過載提取運算子和插入運算子實現學生資訊的 10

2樓:soring的春天

過載就是實際運算子的算術功能,比如說類a與類b,類a中有變數aa, 類b中有變數bb, 通常的搞法是a.aa + b.bb = xx, 過載後就是a+b = xx,

3樓:育知同創教育

多去複習下吧 這個不難 學到的知識是你自己的誰也拿不走

4樓:拷你妹

好好學習,別再糊弄老師了

c++中如何自定義過載運算子

5樓:匿名使用者

c++中預定義的運

算符其運算物件只能是基本資料型別,而不適用於使用者自定義型別(如類).

// 同上,內建的運算子 只能應用於內建的資料型別 ...比如 int char double .等等。

(一) c++不允許使用者自己定義新的運算子,只能對已有的c++運算子進行過載。

// 就是說只能過載內建的 + - * / 等運算子,不能自己創造運算子計算。 。

(二) c++允許過載的運算子c++中絕大部分的運算子允許過載.

不能過載的運算子只有5個:

(1) 成員訪問運算子.

(2) 作用域運算子∷

(3) 條件運算子?:

(4) 成員指標運算子*

(5) 編譯預處理命令的開始符號#

(三) 過載不能改變運算子運算物件(即運算元)的個數。

// 不能改變運算子運算物件, 比如+法運算子,那麼它有兩個運算元 ..當我們過載它的時候 也只能有兩個運算元 。

(四) 過載不能改變運算子的優先順序別。

// 過載完之後並不能改變它的優先順序別,比如 +號, 無論你怎麼設計過載函式. 它永遠不可能比()的優先順序高......

(五) 過載運算子的函式不能有預設的引數,否則就改變了運算子引數的個數,與前面第(3)點矛盾。

// 於上面3..同。

(六) 過載的運算子必須和使用者定義的自定義型別的物件一起使用,其引數至少應有一個是類物件(或類物件的引用)。也就是說,引數不能全部是c++的標準型別,以防止使用者修改用於標準型別資料的運算子的性質。

// 過載的引數不能全部是c++內建資料型別。 至少要有一個是自定義型別。因為如果我們定義的是兩個內建的型別 就會跟系統所定義的衝突。

因為當我們使用內建的運算子時,那麼編譯器其實也是呼叫的一個過載運算子進行計算。這是編譯器自動新增的。 如果我們也定義的相同 那麼肯定會產生衝突。

(七) 用於類物件的運算子一般必須過載,但有兩個例外,運算子「=」和「&」不必使用者過載。

① 賦值運算子(=)可以用於每一個類物件,可以利用它在同類物件之間相互賦值。

② 地址運算子&也不必過載,它能返回類物件在記憶體中的起始地址。

// 前面已經說過,c++內建運算子只能計算內建的資料型別 。所以當我們要使用自定義型別時 就必須要進行過載..

總之,當c++語言原有的一個運算子被過載之後,它原先所具有的語義並沒有消失,只相當於針對一個特定的類定義了一個新的運算子。

運算子過載可以使用成員函式和友元函式兩種形式。可以參考以下的經驗:

(1)只能使用成員函式過載的運算子有:=、()、、->、new、delete。

(2)單目運算子最好過載為成員函式。

(3) 對於複合的賦值運算子如+=、-=、*=、/=、&=、!=、~=、%=、>>=、<<=建議過載為成員函式。

(4) 對於其它運算子,建議過載為友元函式。

運算子過載的方法是定義一個過載運算子的函式,在需要執行被過載的運算子時,系統就自動呼叫該函式,以實現相應的運算。也就是說,運算子過載是通過定義函式實現的。運算子過載實質上是函式的過載。

過載運算子的函式一般格式如下:

函式型別 operator 運算子名稱 (形參表列)

過載為類成員函式時引數個數=原運算元個數-1

(後置++、--除外)

// 當過載為類成員函式時,引數個數等於原來的運算元-1 ..比如 物件a +物件b ..我們過載的時候需要兩個運算元 a 和b 但我們傳遞過去一個就可以了 , 比如 a+b 我們只需要把b傳遞過去就可以了。

因為當呼叫過載運算子時 就是a呼叫的過載運算子,那麼它就是當前物件 它就是這時的this 指標 ..而且類成員函式只能使用兩個類中成員...

過載為友元函式時 引數個數=原運算元個數,且至少應該有一個自定義型別的形參。

//與上面沒多大區別,但它卻可以呼叫非類中物件.. 比如呼叫一個物件a+1 ..注意的是即使定義為友元函式,它的運算元也必須有一個為自定義型別。

看一個例項:

#include

using namespace std;

class ***plex //複數類宣告

//建構函式

***plex operator + (***plex c2); //+過載為成員函式

***plex operator - (***plex c2); //-過載為成員函式

void display(); //輸出顯示覆數

private: //私有資料成員

double real; //複數實部

double imag; //複數虛部

};***plex ***plex::operator +(***plex c2) //過載函式實現

***plex ***plex::operator -(***plex c2) //過載函式實現

void ***plex::display()

這段** 修改一下... 改為 ***plex friend ***plex::operator +(***plex c2 ***plex c3)

那麼同樣也可以完成相同的功能..而且還更容易擴充..因為從上面得知..

過載的運算子必須和使用者定義的自定義型別的物件一起使用. 也就是說至少有一個自定義型別..或者是它的引用..

如果我們使用成員運算子過載的話只能使用類中的物件成員..而使用友元運算子過載那麼我們則可以使用類外的資料..當我們需要使用的時候直接修改為 ***plex friend ***plex::

operator +(***plex c2 int a) 如這樣的形式就可以了。

6樓:匿名使用者

[c++]過載運算子 收藏

所謂過載,就是重新賦予新的含義。函式過載就是對一個已有的函式賦予新的含義,使之實現新功能。

運算子也可以過載

運算子過載是對已有的運算子賦予多重含義

必要性c++中預定義的運算子其運算物件只能是基本資料型別,而不適用於使用者自定義型別(如類)

(一) c++不允許使用者自己定義新的運算子,只能對已有的c++運算子進行過載。

(二) c++允許過載的運算子c++中絕大部分的運算子允許過載.

不能過載的運算子只有5個:

(1) 成員訪問運算子.

(2) 作用域運算子∷

(3) 條件運算子?:

(4) 成員指標運算子*

(5) 編譯預處理命令的開始符號#

(三) 過載不能改變運算子運算物件(即運算元)的個數。

(四) 過載不能改變運算子的優先順序別。

(五) 過載運算子的函式不能有預設的引數,否則就改變了運算子引數的個數,與前面第(3)點矛盾。

(六) 過載的運算子必須和使用者定義的自定義型別的物件一起使用,其引數至少應有一個是類物件(或類物件的引用)。也就是說,引數不能全部是c++的標準型別,以防止使用者修改用於標準型別資料的運算子的性質。

(七) 用於類物件的運算子一般必須過載,但有兩個例外,運算子「=」和「&」不必使用者過載。

① 賦值運算子(=)可以用於每一個類物件,可以利用它在同類物件之間相互賦值。

② 地址運算子&也不必過載,它能返回類物件在記憶體中的起始地址。

總之,當c++語言原有的一個運算子被過載之後,它原先所具有的語義並沒有消失,只相當於針對一個特定的類定義了一個新的運算子。

運算子過載可以使用成員函式和友元函式兩種形式。可以參考以下的經驗:

(1)只能使用成員函式過載的運算子有:=、()、、->、new、delete。

(2)單目運算子最好過載為成員函式。

(3) 對於複合的賦值運算子如+=、-=、*=、/=、&=、!=、~=、%=、>>=、<<=建議過載為成員函式。

(4) 對於其它運算子,建議過載為友元函式。

運算子過載的方法是定義一個過載運算子的函式,在需要執行被過載的運算子時,系統就自動呼叫該函式,以實現相應的運算。也就是說,運算子過載是通過定義函式實現的。運算子過載實質上是函式的過載。

過載運算子的函式一般格式如下:

函式型別 operator 運算子名稱 (形參表列)

過載為類成員函式時引數個數=原運算元個數-1

(後置++、--除外)

過載為友元函式時 引數個數=原運算元個數,且至少應該有一個自定義型別的形參。

將「+」、「-」運算過載為複數類的成員函式。

規則:實部和虛部分別相加減。

運算元:

兩個運算元都是複數類的物件。

#include

using namespace std;

class ***plex //複數類宣告

//建構函式

***plex operator + (***plex c2); //+過載為成員函式

***plex operator - (***plex c2); //-過載為成員函式

void display(); //輸出顯示覆數

private: //私有資料成員

double real; //複數實部

double imag; //複數虛部

}; ***plex ***plex::operator +(***plex c2) //過載函式實現

***plex ***plex::operator -(***plex c2) //過載函式實現

void ***plex::display()

{ cout<<"("real就是c1.real。

在將運算子函式過載為成員函式後,如果出現含該運算子的表示式,如c1+c2,編譯系統把它解釋為c1.operator+(c2)

即通過物件c1呼叫運算子過載函式,並以表示式中第二個引數(運算子右側的類物件c2)作為函式實參。運算子過載函式的返回值是***plex型別,返回值是複數c1和c2之和(***plex(c1.real + c2.

real,c1.imag+c2.imag))。

c定義類,封裝矩形的長寬,在定義類,繼承自定義的這

c 定義一個類圓circle或者定義一個矩形類rectangle,分別計算它們的周長和麵積.定義一個類圓circle或者定義一個矩形類rectangle,定義其資料成員和方法,圓有半徑,矩形有長和寬,定義兩個方法分別計算它們的周長和麵積.建立兩個物件,這兩個物件的資料不同,分別輸出顯示它們的周長和麵...

中怎麼自定義頁碼,WORD中怎麼自定義頁碼

進入頁尾 插入自 文集,選擇 第x頁共y頁 然後到頁碼上刪除 第 頁 共 頁 並在兩個頁碼之間輸入 即可!告訴你個笨辦法 先插入 第x頁共y頁 的樣式 然後刪掉裡面的字,再加個斜槓,變成 x y 然後就變成你要的那樣的格式了。我幫你試過了,不行,看來你只能用頁尾來自己打上去了 word中怎麼讓自編的...

php呼叫自定義函式,php自定義函式中怎麼呼叫類中方法

引用符號。不加引用時候,你傳進去的 a被複制了一份,然後你在函式裡面改變 a實際上是改變複製的那個,原來的那個不變,退出函式後 a還是原來那個值。加了引用符號后里面的 a就是外面的 a的引用,修改了函式裡面的 a就等於修改了外面的 a。function 是用來定義函式的,呼叫的時候不用functio...