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 peoplefriend 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...