運算子過載

2021-10-06 21:04:15 字數 3475 閱讀 3503

1.雙目運算子類成員函式過載

觀察下列程式,掌握雙目運算子的類成員函式過載方式。

#includeusing namespace std;

class complex

complex operator + (complex&); //運算子過載的成員函式原型

//運算子結果型別 operator @(參數列列); 其中,@表示運算子void print();

};/*運算子過載實現:

函式返回型別 類名::operator @(參數列列)

*/complex complex::operator+(complex& c)

void complex::print()

void main()

說明:+是雙目運算子,成員函式operator+(complex &c)的引數c是+的右運算元。在main函式中,c=a+b等價c=a.operator+(b);

編寫程式:(運算子過載的成員函式)

定義people類,具有資料成員name(姓名)、id(身份證號),均為字元陣列或string型別。定義成員函式:

(1)帶參建構函式,實現給資料成員賦初值;

(2)過載運算子==,實現物件比較(如果兩個people類物件的身份證id相等,則結果為1,否則結果為0)。

在main函式中,通過if語句測試程式正確性。

#include #include using namespace std;

class people

bool operator==(people& p);//過載的成員函式宣告

};bool people::operator==(people& p)

int main()

else

cout << "id不相等!" << endl;

return 0;

}

bool是布林型變數,也就是邏輯型變數的定義符,類似於float、double等。bool為布林型用作邏輯判斷,bool取值false和true,是0和1的區別;false可以代表0,但true有很多種,並非只有1。

2、雙目運算子的非成員函式的過載

class  complex;//需要類的原型宣告 vc++編輯器需要

complex operator+(int, complex);//需要友元普通函式宣告vc++編輯器需要

class complex

friend complex operator + (int, complex); //運算子過載普通友元函式原型

//函式返回值型別 friend operator @(參數列列); 其中@表示運算子

void print();

};/*運算子過載普通友元函式實現部分格式:

函式返回型別 operator @(參數列列) */

complex operator +(int c, complex d)

class people

friend bool operator==(people& p3, people& p);

};bool operator==(people& p3, people& p)

3、單目運算子的過載

#includeusing namespace std;

class complex

complex& operator++(); //字首形式原型

complex operator++(int); //字尾形式原型

void print();

};complex& complex::operator++()

complex complex::operator++(int c)

void complex::print()

void main()

注意:字首 ++ 函式返回的是*this,字尾++返回的是乙個區域性物件。

自增++運算子的過載

++字首運算子的過載原型(++a,a為物件)

complex& operator++(); //字首形式原型

++字尾運算子過載原型(a++,a為乙個物件)

complex operator++(int); //字尾形式  原型

例:程式設計:

定義point類,有座標_x,_y兩個私有資料成員。

對point類過載++(自增)、--(自減)運算子,實現對座標值的改變;

定義成員函式print,輸出成員_x,_y的值。用main函式驗證結果。

#include using namespace std;

class point

point(int _x, int _y);

~point()

point& operator++();//對應於a++

point& operator--();//對應於a--

point operator++(int);//對應於a++

point operator--(int);//對應於a--

void print();

private:

int x;

int y;

};point::point(int _x, int _y)

point& point::operator++()

point point::operator++(int)

point& point::operator--()

point point::operator--(int)

void point::print()

int main()

4程式設計:定義乙個矩陣類matrix

class matrix  ;

void matrix::input()

}void matrix::display()

}int& matrix::operator(int i)

void main()

總結:

1. 將複數的加減法這樣的運算過載為類的成員函式,除了使用了關鍵字operator外,運算子過載成員函式與類的普通成員函式沒有什麼區別。

2. 使用友元函式。即運算子過載為非成員函式

3. 一般在c++中只要定義非成員函式,就使用友元函式。(可以訪問私有成員)

4. 單目運算子分為前置++和後置++。所以規定:對於前置單目運算子,過載函式沒有形參;對於後置單目運算子,過載函式有乙個int型形參。

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

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

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

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

運算子過載

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