国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C++ operator關(guān)鍵字的使用(重載運(yùn)算符、仿函數(shù)、類型轉(zhuǎn)換操作符)

這篇具有很好參考價(jià)值的文章主要介紹了C++ operator關(guān)鍵字的使用(重載運(yùn)算符、仿函數(shù)、類型轉(zhuǎn)換操作符)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

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)起來;

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)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包