操作符過載應該設計成類成員函式還是普通非成員函式?

2021-06-21 12:50:03 字數 1392 閱讀 2032

四小點:

1.=,[ ],( ),->這四個操作符過載必須定義為類成員函式。

2.復合賦值操作符過載通常應定義為類成員函式。復合賦值操作符如*=,+=等。但是不一定得這麼做。

3.改變物件狀態或者與給定物件聯絡緊密的操作符,如++,---,*等,通常定義為類成員函式。

4.對稱操作符,如算術,相等,關係,位操作符,最好定義成普通非成員函式。

下面是自己n年之前寫過的乙個3d類:

#include using namespace std;

class vector3

vector3(const vector3 &rhs)

vector3& operator =(const vector3 &rhs)

return *this;

} void zero()

vector3 operator - () const

vector3& operator += (const vector3 &rhs)

vector3& operator -= (const vector3 &rhs)

vector3& operator *= (double a)

vector3& operator /= (double a)

void normalize() //標準化 }

void print() const };

bool operator ==(const vector3 &lhs, const vector3 &rhs)

bool operator !=(const vector3 &lhs, const vector3 &rhs)

vector3 operator + (const vector3 &lhs, const vector3 &rhs)

vector3 operator - (const vector3 &lhs, const vector3 &rhs)

vector3 operator * (const vector3 &lhs, double a) //標量右乘

vector3 operator * (double a,const vector3 &rhs) //標量左乘

vector3 operator * (const vector3 &lhs, const vector3 &rhs) //點乘

vector3 crossproduce(const vector3 &lhs, const vector3 &rhs) //叉乘

double vectormag(const vector3 &a) //求模

double distance(const vector3 &lhs, const vector3 &rhs) //求距離

int main()

過載函式呼叫操作符

函式呼叫操作符?函式呼叫操作符是 因此此操作符的函式過載是operator 過載函式呼叫操作符的類物件稱為函式物件或仿函式,因此我們可以像使用函式名一樣使用物件名。先看乙個簡單的例子。過載了函式呼叫操作符的乙個類 class area 上面的類中,操作符函式計算乙個面積,它是兩個整數實參的乘積。為了...

C 函式過載操作符

c 可以對操作符 operator 進行過載,一般定義在類的成員函式中,以下面的 為例.class point 定義乙個類模板 建構函式 point 析構函式 過載算術操作符 類似 point operator const point other 過載關係操作符 類似 bool operator c...

操作符過載(複數類 陣列類 函式物件)

目錄 操作符過載與複數類 陣列操作符的過載 函式呼叫操作符 c 中的過載能夠以特殊形式的函式的擴充套件操作符的功能 通過operator關鍵字可以定義特殊的函式 operator的本質是通過函式過載操作符 type operator sign const type p1,const type p2 ...