天天看點

函數調用運算符重載

如果類重載了函數調用運算符,則我們可以像使用函數一樣使用該類的對象。因為這樣的類同時也能存儲狀态,是以與普通函數相比它們更加靈活。

例如:

這個類隻定義了一種操作:函數調用運算符,它負責介接受一個int類型的實參,然後傳回該實參的絕對值。

我們使用調用運算符的方式是令一個absInt對象作用于一個實參清單,這一過程看起來非常像調用函數的過程:

即使absObj隻是一個對象而非函數,我們也能“調用”該對象。調用對象實際上是在運作重載的調用運算符。在此例中,該運算符接受一個int值并傳回其絕對值。

注意:函數調用運算符必須是成員函數,一個類可以定義多個不同版本的調用運算符,互相之間應該在參數數量或類型上有所差別。(重載)

如果類定義了調用運算符,則該類的對象稱為函數對象。因為可以調用這種對象,所有我們說這些對象的“行為像函數一樣”。

含有狀态的函數對象類

和其他類一樣,函數對象類除了operator()之外也可以包含其他成員。函數對象類通常含有一些資料成員,這些成員被用于定制調用運算符中的操作。