天天看點

淺談operator重載運算符

operator是什麼?

在檢視C++的thread定義的時候看到一個

淺談operator重載運算符

operator意思:運算符

百科解釋:operator是C#、C++的關鍵字,它和運算符一起使用,表示一個運算符函數,了解時應将operator=整體上視為一個函數名。

這是C++擴充運算符功能的方法,雖然樣子古怪,但也可以了解:

一方面要使運算符的使用方法與其原來一緻,

另一方面擴充其功能隻能通過函數的方式(c++中,"功能"都是由函數實作的)。

用途:

C++ 提供的運算符,通常隻支援對于基本資料類型和标準庫中提供的類進行操作,而對于使用者自己定義的類,如果想要通過這些運算符實作一些基本操作(如比較大小、判斷是否相等),就需要使用者自己來定義這個運算符的具體實作了。

例子

例如,我們設計了一個名為“person”的類,現在要判斷 person 類的兩個對象 p1 和 p2 是否一樣相等,比較規則是比較對象的年齡(person 類的資料成員“age”)大小。那麼,在設計 person 類的時候,就可以通過針對運算符進行重載,來使運算符==具有比較對象 p1 和 p2 的能力(實際上比較的内容是 person 類中的資料成員“age”)。

//簡單例子重載()運算符
class A 
{  
public:  
    int operator() ( int val )  
    {  
        return val > 0 ? val : -val;
    }  
};

int i = -1;
A func;
cout << func(i);
           

在對象建立時有三種方式一種是隐式建立,一種是顯式建立,還有就是new建立,其中new建立實作了兩件事: new開辟的空間在堆上,而一般聲明的"指針"變量存放在棧上。

1、調用operator new()函數配置設定記憶體(實際上是malloc實作);

2、調用構造函數: 調用 placement new 來實作。

繼續閱讀