運算子過載習題 解析

2021-10-08 02:32:54 字數 3819 閱讀 2250

1.c 2. b 3. c 4. c 5. b 6. a 7. a 8. a 9. d

operator/(c1, c2) ++x

1.通過運算子過載,只能改變運算子原有的______。

a.優先順序 b.運算元個數

c.運算元型別 d.結合性

c[解析]過載運算子時,運算子的優先順序、結合性或運算元數目不能改變,選項a、b、d是錯誤的;選項c正確。答案為c選項。

2.下列關於運算子函式的表述中,錯誤的是______

a.運算子函式的參數列可能是空的

b.運算子函式只能定義為類的成員函式

c.運算子函式的名稱是以operator為字首的

d.運算子函式的引數可以是物件

b[解析]過載大多數運算子時,其引數列表中包含引數,而過載型別轉換操作符時,其形參表必須為空,故運算子函式的參數列可能是空的,選項a正確;過載運算子是具有特殊名稱的函式,保留字operator後加上需要定義的運算子符號,選項c正確;過載運算子函式的引數是滿足該運算子運算的物件,選項d正確;對於算術運算子、相等運算子等,可以定義為非成員函式,而有些運算子函式不能定義為類的成員函式,如l/o操作符,選項b錯誤。答案為b選項。

3.下列關於運算子過載的表述中,錯誤的是______。

a.不能為運算子過載函式改變其運算子原有的優先順序

b.有的運算子只能作為成員函式過載

c.能夠為運算子過載函式改變其運算子原有的運算目數

d.有的運算子可以作為非成員函式過載

c[解析]過載運算子時,運算子的優先順序、結合性或運算元數目不能改變,選項a正確;賦值=、下標、呼叫()、和成員訪問箭頭->等運算子必須定義為類成員函式,將這些操作符定義為非成員函式會在編譯時標記為錯誤,選項b正確;對於算術運算子、相等運算子等,可以定義為非成員函式,選項d正確;過載運算子不能改變運算元數目,選項c錯誤。答案為c選項。

4.已知表示式++x中的「++」是作為成員函式過載的運算子,則與++x等效的運算子函式呼叫形式為______。

a.x.operator++(1) b.operator++(x)

c.x.operator++() d.x.operator++(x)

c[解析]本題考查的是字首自增運算子的過載。由於題意中「++」是作為成員函式過載的運算子,所以若要顯式的呼叫該運算子,需要使用該類的物件加上「.」運算子,即x.operator++();又因為為了區分字首運算子和字尾運算子,在呼叫字尾運算子時,需要給出乙個整型實參值,而字首運算子則不需要,所以++x等效的運算子函式呼叫形式為:x.operator++(),答案為c選項。

5.為類matrix過載下列運算子時,只能作為matrix類成員函式過載的運算子是( )。

a. + b. = c. << d. ++

b[解析]在c++中,=、、()、->以及所有的型別轉換運算子只能作為成員函式過載。

6. 有如下類定義

class myclass;

若要為myclass類過載流輸入運算子>>,使得程式中可以「cin>>obj;」形式輸入myclass類的物件obj,則橫線處的宣告語句應為( )。

a. friend istream& operator>>(istream& is, myclass& a);

b. friend istream& operator>>(istream& is, myclass a);

c. istream& operator>>(istream& is, myclass& a);

d. istream& operator>>(istream& is, myclass a);

a[解析]c++的輸入運算子>>作為非類成員函式過載。在乙個類中,可將輸入運算子>>宣告為友元函式,在類myclass過載輸入運算子>>的形式如選項a)所示。

7.若為fraction類過載前增1運算子++,應在類體中將其宣告為( )。

a. fraction& operator++();

b. fraction& operator++(int);

c. friend fraction& operator++();

d. friend fraction& operator++(int);

a[解析]在類fraction中過載前增1運算子++時,其宣告形式為fraction &operator++();在類fraction中過載後增1運算子++時,其宣告形式為fraction &operator++(int);。

8、如果表示式xy+z中,"「是作為友元函式過載的,」+"是作為友元函式過載的,則該表示式還可為

a. operator+(operator*(x, y),z)

b. x.operator+(operator*(x, y),z)

c. y.operator*(operator+(x, y),z)

d. x.operator+(operator*(x, y))

a[解析]c++中用成員函式過載xy為:x.operator(y),用友元函式過載xy為:operator(x,y),用成員函式過載x+y為:x. operator+(y),用友元函式過載x+y為:operator+(x,y)。

9. 有如下類定義:

class date

(ostream&stream, date&ddd); //運算子<<的宣告

private:

int year, month, day;

};若要使語句序列

date goodday;

cout<<goodday<<endl;

能夠正常執行,橫線處的內容應為

a.istream& operator << b.ostream& operator <<

c.friend istream& operator << d.friend ostream& operator <<

d[解析]本題考查的是輸出運算子<<的過載首先函式的第乙個形參型別為ostream&,所以返回值也應該是ostream&,以保證輸出運算子可以鏈結使用,選項a、c錯誤;由於l/o操作符的第乙個形參型別並不是date類型別,所以不能作為成員函式,必須使用友元函式,宣告前必須加關鍵字friend,選項b錯誤,選項d正確。

填空

1.已知類ben中將二元運算子「/」,過載為友元函式,若c1、c2是ben的兩個物件當使用運算子函式進行顯式呼叫時,與表示式c1/c2等價的表示為______。

operator/(c1, c2)

[解析]將兩個類ben物件c1, c2作為引數,顯示呼叫過載二元運算子「/」的形式為operator/(c1, c2)。

2、 表示式x.operator++()還可寫成______。

++x  

[解析]c++語言中用成員函式過載++x為x.operator++()用友元函式過載++x為:operator++(x)。

運算子過載之過載型別運算子

普通型別 類型別 呼叫對應的只有乙個引數 引數的型別就是這個普通型別 的建構函式 需求 boy boy1 10000 薪資 建構函式boy int boy boy2 rock 姓名 建構函式boy char 普通型別賦值給類型別其實很簡單,就是專門的對這個賦值的型別定義乙個建構函式。編譯器在執行 的...

運算子過載 賦值運算子的過載

有時候希望賦值運算子兩邊的型別可以不匹配,比如,把乙個int型別變數賦值給乙個complex物件,或把乙個 char 型別的字串賦值給乙個字串物件,此時就需要過載賦值運算子 注意 賦值運算子 只能過載為成員函式 賦值運算子過載例項示例 include include using namespace ...

運算子過載

c 中的運算子 1。大多數系統預定義運算子都能過載 不值得過載 不能被過載 2過載不能改變優先順序 不能改變結合性 不能改變運算子所需運算元的個數 過載後,可按這些運算子的表達方式使用 運算子過載的語法 一 通過運算子過載函式進行過載 1。運算子過載函式是成員函式 語法形式 type x opera...