為什麼要有運算子過載
先看乙個例子:
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.雙...