Think in CPP第十二章 操作符過載 5

2021-06-09 13:48:16 字數 1195 閱讀 6180

12.5.5 操作符->*和()的過載

在過載->*之前,要先過載()。()操作的型別是->*返回的型別。operator()用來建立所謂的函式物件(function object)。()必須作為成員函式來過載,且可以帶任意數量的引數,下面是乙個例子:

class lessthan  

int comp_val() const

void comp_val( int nval )

bool operator()( int value ) const;

private:

int _val;

}; inline bool

lessthan::operator()( int value ) const

int count_less_than( const vector&vec, int comp )

->*過載的例子

class dog  

int eat(int i) const

int sleep(int i) const

typedef int (dog::*pmf)(int) const;

// operator->* must return an object

// that has an operator():

class functionobject

// make the call using the object pointer

// and member pointer

int operator()(int i) const

}; functionobject operator->*(pmf pmf)

};

int main()

說明:w->*pmf返回的是functionobject物件,而functionobject過載了operator(),過載函式被呼叫,最終pmf指向的dog類中的方法被呼叫:

int operator()(int i) const
如果需要一些額外的操作的話,在此處加入**即可。

12.5.6 不能過載的操作符

以下操作符不能過載:

第十二章 檔案

文字檔案 文字檔案是一種由若干字元構成的檔案,可以用文字編輯器進行閱讀或編輯。以txt py html等為字尾的檔案都是文字檔案。2.二進位制檔案 二進位制檔案一般是指不能用文字編輯器閱讀或編輯的檔案。以 mp4 png等為字尾的檔案都是二進位制檔案,如果想要開啟或修改這些檔案,必須通過特定軟體進行...

第十二章 dp

動態規劃策略 將原始問題拆分為多個子問題,將子問題結果記錄,方便復用子問題的解 遞迴 記憶化 遞推 是動態規劃的一體兩面,本質都是一樣的 遞推減少了呼叫次數,空間上還能優化,一般選擇遞推方式 遞迴 記憶化 int memo maxn 將o 2 n o n intfibonacci int n 遞推 ...

第十二章 異常

一 異常的概念 錯誤 編譯器 異常 執行期,程式沒有正常按照期望執行 異常產生時,在對應位置產生異常型別物件,程式 暫停 如果上下文有異常處理程式,對應處理 沒有則 異常向上傳播 報錯退出 異常向上傳播 如果異常在函式中產生,會傳播給函式的呼叫者 如果異常在模組的頂級位置,會傳播給引用該模組的模組 ...