c++ 預定義中的運算子的操作物件只侷限於基本的內建資料型別,但是對於我們自定義的型別(類)是沒有辦法操作的。但是大多時候我們需要對我們定義的型別進行類似的運算,這個時候就需要我們對這麼運算子進行重新定義,賦予其新的功能,以滿足自身的需求。
運算子過載的實質就是函式過載或函式多型。運算子過載是一種形式的 c++ 多型。目的在於讓人能夠用同名的函式來完成不同的基本操作。要過載運算子,需要使用被稱為運算子函式的特殊函式形式,運算子函式形式:operator p(argument-list)//operator
後面的p
為要過載的運算子符號。
不可以過載的運算子列表:
過載運算子函式特性:
類成員函式
友元函式
++, --
的前置過載和後置過載
後置過載需要加佔位引數int
過載<<
的鏈式規則
只能過載為非成員函式
注意點:
一般來說,單目運算子過載為類的成員函式,雙目運算子過載為友元函式
雙目運算子不能將=, (), ,->
過載為類的友元函式
如果運算子的第一次運算元要求為隱式型別轉換則必須為友元函式
友元函式過載運算常用於運算子的左右運算元型別不同的情況
// complex.h
#pragma once
#include
using
namespace std;
class
complex
// 拷貝建構函式
complex
(const complex& obj):re
(obj.re),im
(obj.im)
// 析構函式
~complex()
// +
complex operator+(
const complex&);
// -
complex operator
-(complex&);
// +=
complex&
operator+=
(complex&);
// -=
complex&
operator-=
(complex&);
// ==
bool
operator
==(complex&);
// 前置 --
complex&
operator--(
);// 前置 ++
complex&
operator++(
);// 後置 --
complex operator--(
int)
;// 後置 ++
complex operator++(
int)
;// <<
friend ostream&
operator
<<
(ostream& out,
const complex& obj)
;double
real()
const
double
imag()
const
private
:double re, im;
};
// complex.cpp
#include
"complex.h"
ostream&
operator
<<
(ostream& out,
const complex& obj)
complex complex::
operator+(
const complex & obj)
complex complex::
operator
-(complex &obj)
complex & complex::
operator+=
(complex &obj)
complex & complex::
operator-=
(complex &obj)
bool complex::
operator
==(complex &obj)
complex & complex::
operator--(
)complex & complex::
operator++(
)complex complex::
operator--(
int)
complex complex::
operator++(
int)
// main.cpp
#include
#include
"complex.h"
using
namespace std;
intmain()
輸出結果:
(0, 0) (2, -3)
(2, -3)
(4, -6)
(2, -3)
1(3, -2)
(3, -2) (4, -1)
4, -1
請按任意鍵繼續. . .
C 複數類運算子過載
實現運算子過載有兩種形式 過載為成員函式 過載為友元函式。includeusing namespace std class complex complex double r,double i complex const complex rhs complex operator const compl...
C 運算子過載,複數類
複數類 ccomplex c 的運算子過載 使物件的運算表現的和編譯器內建型別一樣。include using namespace std class ccomplex ccomplex operator const ccomplex src void show 運算子的過載 operator 前置...
運算子過載 複數類
1.普通運算子可以過載 2.型別過載1 防止實參被修改 2 接收隱式生成臨時物件 類內是this call的呼叫約定,成員方法隱藏this指標,指向一般為左運算元,所以只用傳右運算元即可 如下 class ccomplex 構造類內實現 的過載 右運算元型別為intconst ccomplex op...