在C++中,函數(shù)對象(也稱為仿函數(shù)或functor)可以通過使用虛函數(shù)實現(xiàn)多態(tài)處理。虛函數(shù)是在基類中聲明的,可以在派生類中重寫。當使用基類指針或引用調(diào)用虛函數(shù)時,會根據(jù)對象的實際類型調(diào)用相應的重寫版本。這里是一個簡單的示例:
#include <iostream>
// 基類:函數(shù)對象
class FunctionObject {
public:
// 虛函數(shù),用于多態(tài)處理
virtual int execute(int a, int b) {
return a + b;
}
};
// 派生類1:重寫execute函數(shù)
class DerivedFunctionObject1 : public FunctionObject {
public:
int execute(int a, int b) override {
return a * b;
}
};
// 派生類2:重寫execute函數(shù)
class DerivedFunctionObject2 : public FunctionObject {
public:
int execute(int a, int b) override {
return a - b;
}
};
int main() {
// 使用基類指針指向派生類對象
FunctionObject* functionObject1 = new DerivedFunctionObject1();
FunctionObject* functionObject2 = new DerivedFunctionObject2();
// 調(diào)用多態(tài)函數(shù)
std::cout << "Result of functionObject1: " << functionObject1->execute(3, 4) << std::endl;
std::cout << "Result of functionObject2: " << functionObject2->execute(3, 4) << std::endl;
// 釋放內(nèi)存
delete functionObject1;
delete functionObject2;
return 0;
}
在這個示例中,我們定義了一個基類FunctionObject
,其中包含一個虛函數(shù)execute
。然后我們創(chuàng)建了兩個派生類DerivedFunctionObject1
和DerivedFunctionObject2
,它們分別重寫了execute
函數(shù)。在main
函數(shù)中,我們使用基類指針指向派生類對象,并通過基類指針調(diào)用多態(tài)函數(shù)。輸出結果將根據(jù)對象的實際類型調(diào)用相應的重寫版本。