C++進(jìn)階系列目錄
C++ operator關(guān)鍵字的使用(重載運(yùn)算符、仿函數(shù)、類型轉(zhuǎn)換操作符)
C++11實(shí)用技術(shù)(一)auto與decltype的使用
C++11實(shí)用技術(shù)(二)std::function和bind綁定器
C++11實(shí)用技術(shù)(三)std::future、std::promise、std::packaged_task、async
定義
C++11 中,operator 是一個(gè)關(guān)鍵字,用于重載運(yùn)算符。通過重載運(yùn)算符,您可以定義自定義類型的對(duì)象在使用內(nèi)置運(yùn)算符時(shí)的行為。
operator重載用法一般可以分為以下三類:
- operator可以重載我們運(yùn)算符“±*/=”等;
- 還可以重載我們的函數(shù)調(diào)用運(yùn)算符"operator()";
- 還可以做類型轉(zhuǎn)換運(yùn)算符
operator重載運(yùn)算符
常見用法:
#include <iostream>
class MyNumber {
private:
int value;
public:
MyNumber(int num) : value(num) {}
int getValue() const {
return value;
}
// 重載加法運(yùn)算符 '+'
MyNumber operator+(const MyNumber& other) {
int sum = value + other.value;
return MyNumber(sum);
}
};
int main() {
MyNumber num1(5);
MyNumber num2(10);
MyNumber sum = num1 + num2; // 使用重載的加法運(yùn)算符進(jìn)行相加操作
std::cout << "Sum: " << sum.getValue() << std::endl;
return 0;
}
可以看到MyNumber sum = num1 + num2;看起來是對(duì)象相加,其實(shí)是進(jìn)入了重載的+運(yùn)算符,相加的是對(duì)象中的成員變量。
operator重載函數(shù)調(diào)用運(yùn)算符
class Adder {
public:
int operator()(int a, int b) {
return a + b;
}
};
// 使用函數(shù)對(duì)象進(jìn)行加法運(yùn)算
Adder add;
int result = add(3, 4); // 調(diào)用 operator(),返回結(jié)果 7
看起來add就和函數(shù)一樣,但其實(shí)不然,只是重載函數(shù)調(diào)用運(yùn)算符后,可以讓實(shí)例化的add對(duì)象像函數(shù)一樣使用。這也被稱為仿函數(shù)(這個(gè)詞算是非常形象了)。
operator類型轉(zhuǎn)換操作符
類型轉(zhuǎn)換操作符(type conversion operator)是一種特殊的類成員函數(shù),它定義將類類型值轉(zhuǎn)變?yōu)槠渌愋椭档霓D(zhuǎn)換。轉(zhuǎn)換操作符在類定義體內(nèi)聲明,在保留字 operator 之后跟著轉(zhuǎn)換的目標(biāo)類型。
class MyType {
public:
using fr_t = void(*)(int);
static void func(int a)
{
std::cout << "the value:" << a << std::endl;
}
operator fr_t() {
// 執(zhí)行適當(dāng)?shù)霓D(zhuǎn)換操作
// 將 MyType 轉(zhuǎn)換為 fr_t
return func;//這里是將函數(shù)指針賦給了fr_t
}
};
// 使用類型轉(zhuǎn)換運(yùn)算符進(jìn)行類型轉(zhuǎn)換
MyType obj;
obj(2); // 這里涉及到兩步動(dòng)作:一是調(diào)用 operator fr_t(),將 obj 轉(zhuǎn)換為 fr_t 類型;二是調(diào)用了fr_t(2)
原理:轉(zhuǎn)換函數(shù)必須是成員函數(shù),不能指定返回類型,并且形參表必須為空;返回值是隱含的,返回值是與轉(zhuǎn)換的類型相同的,即為上面原型中的函數(shù)指針類型fr_t,以及返回的函數(shù)func必須對(duì)應(yīng)起來;文章來源:http://www.zghlxwxcb.cn/news/detail-628292.html
obj(2);這行代碼的執(zhí)行過程有點(diǎn)難理解,可分為兩步:文章來源地址http://www.zghlxwxcb.cn/news/detail-628292.html
- 一是調(diào)用 operator fr_t(),將 obj 轉(zhuǎn)換為 fr_t 類型;
- 二是調(diào)用了fr_t(2); 這里fr_t函數(shù)指針已經(jīng)指向了func,所以可以直接調(diào)用。
到了這里,關(guān)于C++ operator關(guān)鍵字的使用(重載運(yùn)算符、仿函數(shù)、類型轉(zhuǎn)換操作符)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!