十五 C 運算子過載

2021-10-13 09:18:41 字數 3465 閱讀 6864

目錄

運算子過載概念

語法:過載+友元

常用運算子過載

加號運算子過載

前置後置自增(++)運算子過載

前置++運算子過載

後置++運算子過載

左移運算子(<<)過載

指標運算子過載

賦值運算子過載

關係運算子過載

函式呼叫運算子過載

在c++中,可以定義乙個處理類的新運算子。這種定義很像乙個普通的函式定義,只是函式的名字由關鍵字operator及其緊跟的運算子組成。差別僅此而已。它像任何其他函式一樣也是乙個函式,當編譯器遇到適當的模式時,就會呼叫這個函式。

定義過載的運算子就像定義函式,只是該函式的名字是operator@,這裡的@代表了被過載的運算子。函式的引數中引數個數取決於兩個因素。

友元函式是乙個全域性函式,和我們上例寫的全域性函式類似,只是友元函式可以訪問某個類私有資料。

**例項:

#define _cri_screure_no_warnings

#define _crt_screure_no_warnings

#include#includeusing namespace std;

class person

; person(int a, int b) :m_a(a), m_b(b)

//+號運算子過載 成員函式

//person operator+(person &p)

// int m_a;

int m_b;

};//利用全域性函式 進行+號運算子過載

person operator+(person& p1, person& p2) //二元

person operator+(person& p1, int a) //過載的版本

void test01()

int main()

#define _cri_screure_no_warnings

#define _crt_screure_no_warnings

#include#includeusing namespace std;

class myinteger

//前置++過載

myinteger& operator++()

int m_num;

};ostream& operator<< (ostream& cout, myinteger& myint)

void test01()

int main()

#define _cri_screure_no_warnings

#define _crt_screure_no_warnings

#include#includeusing namespace std;

class myinteger

//後置++過載

myinteger operator++(int)

int m_num;

};ostream& operator<< (ostream& cout, myinteger& myint)

void test01()

int main()

#define _cri_screure_no_warnings

#define _crt_screure_no_warnings

#include#includeusing namespace std;

class person

person(int a, int b)

private:

int m_a;

int m_b;

};ostream& operator<< (ostream& cout,person& p1)

void test01()

void showage()

~person()

int m_age;

};//智慧型指標

//用來託管自定義型別的物件,讓物件進行自動的釋放

class smartpointer

//過載->讓智慧型指標物件像person *p一樣去使用

person* operator->()

//過載*

person& operator*()

~smartpointer() }

private:

person* person;

};void test01()

int main()

#define _cri_secure_no_warnings

#define _crt_secure_no_warnings

#include#includeusing namespace std;

//乙個類預設建立 預設構造、析構、拷貝 operator=賦值運算子(進行簡單的值傳遞)

class person

int m_a;

};void test01()

class person2

//過載=賦值運算子

person2& operator=(const person2 &p)

this->pname = new char[strlen(p.pname) + 1];

strcpy(this->pname, p.pname);

return *this;

} ~person2() }

char* pname;

};void test02()

int main()

#define _cri_secure_no_warnings

#define _crt_secure_no_warnings

using namespace std;

#include#include// ==

class person

bool operator==(person &p)

return false;

}public:

string m_name;

int m_age;

};void test01()

else }

int main()

#define _cri_secure_no_warnings

#define _crt_secure_no_warnings

using namespace std;

#include#include//()過載

class myprint

};void test01()

class myadd

};void test02()

int main()

C 運算子過載 過載特殊運算子

賦值運算子用於同類物件間的相互賦值。賦值運算子只能被過載為類的非靜態成員函式,不能過載為友元函式和普通函式。對於使用者自定義的類而言,如果沒有過載賦值運算子,那麼c 編譯器會為該類提供乙個預設的過載賦值運算子成員函式。預設賦值運算子的工作方式是按位對拷,將等到右邊物件的非靜態成員拷貝給等號左邊的物件...

C 運算子過載賦值運算子

自定義類的賦值運算子過載函式的作用與內建賦值運算子的作用類似,但是要要注意的是,它與拷貝建構函式與析構函式一樣,要注意深拷貝淺拷貝的問題,在沒有深拷貝淺拷貝的情況下,如果沒有指定預設的賦值運算子過載函式,那麼系統將會自動提供乙個賦值運算子過載函式。賦值運算子過載函式的定義與其它運算子過載函式的定義是...

C 運算子過載轉換運算子

為什麼需要轉換運算子?大家知道對於內建型別的資料我們可以通過強制轉換符的使用來轉換資料,例如 int 2.1f 自定義類也是型別,那麼自定義類的物件在很多情況下也需要支援此操作,c 提供了轉換運算子過載函式 它使得自定義類物件的強轉換成為可能。轉換運算子的生命方式比較特別,方法如下 operator...