c 學習筆記(八) 運算子過載的推演

2021-07-06 02:46:12 字數 1551 閱讀 1930

為什麼要有運算子過載

先看乙個例子:

public:

complex(int a, int b)

public:

int a;

int b;

};void test1()

complex c1(1, 2), c2(3, 4);

complex c3 = c1 + c2;

system("pause");

}

程式執行時會出錯。

原因 complex是使用者自定義型別。。編譯器根本不知道如何進行加減。

編譯器給你提供了一種機制,讓使用者自己去完成,自定義型別的加減操作。

這個機制就是運算子過載機制

當然我們也可以寫乙個全域性函式來完成相加運算:

//通過全域性函式完成物件加

complex add(complex &c1, complex &c2)

void test2()

complex c1(1, 2), c2(3, 4);

complex c3 = add(c1, c2);

system("pause");

}

注意:此時的成員變數都是pubic。

給全域性函式換個名字:

complex operator+(complex &c1, complex &c2)

void test3()

complex c1(1, 2), c2(3, 4);

complex c3 = operator+(c1, c2);

system("pause");

}

程式可以仍然沒有出錯,呼叫是把函式名字換成加號看看:

void test4()

complex c1(1, 2), c2(3, 4);

complex c3 = c1 + c2;

system("pause");

}

程式仍然可以執行沒有錯誤。

可是平時操作的類成員一般都是私有成員(private修飾的),怎麼讓類外全域性變數訪問呢?

剛剛學到的友元函式閃亮登場了,哈哈哈。。。

class complex

void printcom()

{ cout<

c 學習筆記 運算子過載

今天在看使用ceres擬合函式 的時候看到了運算子過載,由於c 當時沒學好現在也忘得差不多了,所以打算開始做乙個c 的學習筆記,看到哪寫到哪。今天看到的這段 如下 template bool operator const t const abc,t residual const 操作符過載的格式是 ...

C 學習筆記 運算子過載

自定義類可以過載運算子,大多數的運算子都是可以過載的,下表給出了那些運算子可以過載那些不可以過載。對於運算子的過載,我們需要明白運算子是如何呼叫的。非成員函式的運算子呼叫 d1 d2 表示式方式呼叫 operator d1,d2 等價的呼叫 成員函式的運算子呼叫方式 d1 d2 運算子呼叫 d1.o...

C 學習筆記,運算子的過載

運算子過載,就是賦予運算子新的功能,能夠對類的物件進行運算,從而讓程式更加簡潔直觀。運算子的過載是通過編寫運算子過載函式實現的 1.單目運算子 1.輸入輸出運算子的過載 stream operator istream os,a a ostream operator 案例 1.過載函式放在類外 2.雙...