二元运算符的运算符重载
生活随笔
收集整理的這篇文章主要介紹了
二元运算符的运算符重载
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
運算符重載的兩種方式使用成員函數或者使用全局函數(友元函數)
不過是成員函數還是友元函數,最終使用方法是想用的,但是實現的過程不同,實現的代碼也不一樣
一個簡單的運算符重載
其實運算符重載的難點在于如何理解運算符重載的過程
運算符的實際其實也是一個函數只不過是C++編譯器在遇到運算符的時候會調用相應的函數,這運算符其實也是一個函數,在運算符重載的過程中只需要即將相應的函數進行相應的重載即可;
類成員函數進行運算符重載的過程很簡單只需要將全局函數的運算符重載的兩個引用換掉一個,使用this指針代替即可
#include <iostream> using namespace std;//重載一個復數的運算方式 //類成員函數完成運算符重載 class Complex { private:int a;int b; public: // friend Complex operator+(Complex &c1,Complex &c2);Complex(int a= 0,int b = 0){this->a = a;this->b =b;}void printCom(void){cout<< a << "+" << b << 'i'<< endl;}Complex operator+(Complex &c2){Complex tmp(this->a + c2.a,this->b + c2.b);return tmp;}Complex myAdd(Complex &c2){Complex tmp(this->a+ c2.a,this->b + c2.b);return tmp;} protected: private: };//把 operator+看成一個函數名 //C++編譯器 operator+只是一個+運算符的調用的函數 C++編譯器會根據具體的需要調用對應的運算符int main() {int a=0,b=0;int c;c = a+b;//C++編譯器應該給我們程序員提供一種機制//讓自定義的類型也能夠 進行運算符操作 ==>運算符重載機制Complex c1(1,2),c2(3,4);Complex c3(0,0);//c3 =c1 + c2; // c4= myAdd(c1,c2); // c4.printCom();////////////////////////////////////////////////////////////////////////////期望的寫法是 c4 = c1 +c2;//中間過程 //Complex c4 = operator+(c1,c2); //c4.printCom();//最終步奏//經過定位發現下面的函數會調用 ////////////////////////////////////////////////////////////////////////////Complex operator+(Complex &c1,Complex &c2)//{// Complex tmp(c1.a + c2.a,c1.b + c2.b);// return tmp;//}////////////////////////////////////////////////////////////////////////////函數//運算符的結果其實就是一個函數 只不過在程序員寫好之后C++編譯器會根據運算符的具體實現情況去尋找相應的實現函數Complex c4 = c1+c2; //+ 號運算符會調用上面的函數進行運算符重載c4.printCom();cout << "hello world!" << endl;system("pause");return 0; }類的友元函數完成運算符的重載
#include <iostream> using namespace std;//重載一個復數的運算方式 //類成員函數完成運算符重載 class Complex { private:int a;int b; public:friend Complex operator+(Complex &c1,Complex &c2);Complex(int a= 0,int b = 0){this->a = a;this->b =b;}void printCom(void){cout<< a << "+" << b << 'i'<< endl;}Complex myAdd(Complex &c2){Complex tmp(this->a+ c2.a,this->b + c2.b);return tmp;} protected: private: };//把 operator+看成一個函數名 //C++編譯器 operator+只是一個+運算符的調用的函數 C++編譯器會根據具體的需要調用對應的運算符 Complex operator+(Complex &c1,Complex &c2) {Complex tmp(c1.a + c2.a,c1.b + c2.b);return tmp; } int main() {int a=0,b=0;int c;c = a+b;//C++編譯器應該給我們程序員提供一種機制//讓自定義的類型也能夠 進行運算符操作 ==>運算符重載機制Complex c1(1,2),c2(3,4);Complex c3(0,0);//c3 =c1 + c2; // c4= myAdd(c1,c2); // c4.printCom();////////////////////////////////////////////////////////////////////////////期望的寫法是 c4 = c1 +c2;//中間過程 //Complex c4 = operator+(c1,c2); //c4.printCom();//最終步奏//經過定位發現下面的函數會調用 ////////////////////////////////////////////////////////////////////////////Complex operator+(Complex &c1,Complex &c2)//{// Complex tmp(c1.a + c2.a,c1.b + c2.b);// return tmp;//}////////////////////////////////////////////////////////////////////////////函數//運算符的結果其實就是一個函數 只不過在程序員寫好之后C++編譯器會根據運算符的具體實現情況去尋找相應的實現函數Complex c4 = c1+c2; //+ 號運算符會調用上面的函數進行運算符重載c4.printCom();cout << "hello world!" << endl;system("pause");return 0; }總結
以上是生活随笔為你收集整理的二元运算符的运算符重载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5G的来龙去脉及未来
- 下一篇: 客座编辑:刘克,男,博士,国家自然科学基