自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

深入解析C++五種構(gòu)造函數(shù):從默認(rèn)到移動(dòng)構(gòu)造

開發(fā)
想象一下,在C++的王國(guó)里住著一個(gè)構(gòu)造函數(shù)家族。這個(gè)家族有四個(gè)成員,他們都有各自的特長(zhǎng),一起幫助我們創(chuàng)建對(duì)象。

想象一下,在C++的王國(guó)里住著一個(gè)構(gòu)造函數(shù)家族。這個(gè)家族有四個(gè)成員,他們都有各自的特長(zhǎng),一起幫助我們創(chuàng)建對(duì)象。讓我們通過一個(gè)披薩店的例子來認(rèn)識(shí)這個(gè)有趣的家族吧! 

默認(rèn)構(gòu)造函數(shù) - 基礎(chǔ)款披薩師傅

在C++的世界里,默認(rèn)構(gòu)造函數(shù)就像一位只會(huì)制作基礎(chǔ)款披薩的師傅????,他總是默默無聞地為你準(zhǔn)備好一個(gè)9寸的奶酪披薩??。當(dāng)你什么都不說時(shí),他就會(huì)自信地拿出他的經(jīng)典作品,雖然簡(jiǎn)單,但絕對(duì)美味??。這位師傅雖然不花哨,但在你需要時(shí)總能派上用場(chǎng),像一位可靠的老朋友??♂?。所以,當(dāng)你需要一個(gè)能吃的披薩時(shí),別忘了這位基礎(chǔ)款披薩師傅的存在哦!???

class Pizza {
public:
    // 默認(rèn)構(gòu)造函數(shù)
    Pizza() {
        size = 9;  // 9寸披薩
        topping = "cheese";  // 默認(rèn)奶酪配料
    }
private:
    int size;
    string topping;
};

// 使用默認(rèn)構(gòu)造函數(shù)
Pizza myPizza;  // 得到一個(gè)9寸奶酪披薩

帶參構(gòu)造函數(shù) - 點(diǎn)餐小能手

想象一下,這位帶參構(gòu)造函數(shù)就像一位超級(jí)貼心的點(diǎn)餐小能手 ??!當(dāng)你走進(jìn)披薩店,不想要普普通通的披薩時(shí),ta就是你的最佳幫手!無論你想要巨無霸尺寸 ??,還是獨(dú)特口味 ??,這位點(diǎn)餐小能手都能完美記住你的要求,就像有個(gè)小本本 ?? 記錄著你的每個(gè)心愿~

class Pizza {
public:
    // 帶參構(gòu)造函數(shù) - 你說啥就是啥 ??
    Pizza(int s, string t) : size(s), topping(t) {
        cout << "收到!馬上為您制作" << size << "寸的" << topping << "披薩!??" << endl;
    }
private:
    int size;      // 披薩尺寸 ??
    string topping; // 獨(dú)特配料 ?
};

// 心情不錯(cuò)?來個(gè)超大夏威夷吧!??
Pizza hawaiianPizza(12, "菠蘿火腿");  // 這個(gè)搭配好像有點(diǎn)爭(zhēng)議呢 ??

有了這位點(diǎn)餐小能手,你再也不用擔(dān)心吃到不合口味的披薩啦!想要什么尺寸、什么配料,只要一說,立刻就能幫你安排妥妥的 ??!就像有個(gè)專屬訂制師,隨時(shí)待命,為你打造完美披薩體驗(yàn) ??!

拷貝構(gòu)造函數(shù) - 復(fù)制大師

哎呀,這位復(fù)制大師可是披薩店里的"影分身之術(shù)"專家呢!?? 想象一下,當(dāng)客人說"我要一個(gè)跟他一模一樣的披薩"時(shí),復(fù)制大師就會(huì)施展魔法 ?,把原版披薩的每個(gè)細(xì)節(jié)都完美復(fù)刻下來 - 從尺寸到配料,就連芝士的位置都分毫不差!就像照鏡子一樣,連雙胞胎都要自嘆不如呢 ??♂?

class Pizza {
public:
    // 復(fù)制大師的獨(dú)門秘技 ??
    Pizza(const Pizza& other) {
        size = other.size;
        topping = other.topping;
        cout << "噠噠!? 復(fù)制魔法完成啦!" << endl;
    }
    // ...其他廚藝秘訣
};

// 以下三種情況都會(huì)召喚出復(fù)制大師:
Pizza originalPizza(12, "pepperoni");     // 原版杰作
Pizza copiedPizza = originalPizza;        // 方式1:使用 = 初始化
Pizza anotherPizza(originalPizza);        // 方式2:直接調(diào)用拷貝構(gòu)造
void makeOrder(Pizza p) { /*...*/ }       // 方式3:函數(shù)參數(shù)傳遞
makeOrder(originalPizza);                 // 這里也會(huì)觸發(fā)拷貝構(gòu)造

有趣的是,當(dāng)我們使用= 進(jìn)行初始化時(shí)(比如Pizza copiedPizza = originalPizza),這實(shí)際上是在調(diào)用拷貝構(gòu)造函數(shù),而不是賦值運(yùn)算!這是因?yàn)槲覀兪窃趧?chuàng)建新的披薩(對(duì)象),而不是把已經(jīng)做好的披薩換成另一個(gè)。這就像是在開新店時(shí),直接按照原店的配方和布局來裝修,而不是把原店搬過來。???

注意:不要把拷貝構(gòu)造(Pizza a = b)和賦值運(yùn)算(Pizza a; a = b)搞混了哦!賦值運(yùn)算是另一位大師 - 賦值運(yùn)算符(operator=)的專長(zhǎng)呢!??

不過這位大師也有個(gè)小小的困擾...當(dāng)需要復(fù)制的披薩特別多時(shí),一個(gè)個(gè)復(fù)制難免會(huì)很耗時(shí)耗力。這時(shí)候我們的快遞小哥就派上用場(chǎng)啦! ??

移動(dòng)構(gòu)造函數(shù) - 閃電快遞俠

嘿!認(rèn)識(shí)一下這位超級(jí)快遞俠吧!??♂? 他可不是普通的外賣小哥,而是能以光速送披薩的超級(jí)英雄!?? 當(dāng)廚房做好一份"臨時(shí)"披薩時(shí),他不會(huì)傻傻地復(fù)制一份新的(那多浪費(fèi)時(shí)間?。。侵苯?"嗖~"的一下,閃電般把披薩轉(zhuǎn)移到你手中!?? 就像變魔術(shù)一樣,披薩從這邊消失 ?,瞬間出現(xiàn)在那邊,快到連影子都看不見!??

class Pizza {
public:
    // 閃電快遞俠的獨(dú)門絕技 ??
    Pizza(Pizza&& other) noexcept {
        size = other.size;                        // 記住披薩尺寸 ??
        topping = std::move(other.topping);       // 施展轉(zhuǎn)移魔法 ?
        cout << "披薩瞬間傳送成功啦!??" << endl;
        
        // 原來的披薩位置變空啦(畢竟已經(jīng)被傳送走了)??
        other.size = 0;
        other.topping = "";
    }
};

// 來看看快遞俠是怎么工作的
Pizza makePizza() {
    return Pizza(14, "supreme");  // 制作一個(gè)臨時(shí)披薩 ??
}

// 見證奇跡的時(shí)刻
Pizza myPizza = makePizza();  // 瞬間傳送!比光速還快!??

這位快遞小哥特別擅長(zhǎng)處理臨時(shí)訂單(臨時(shí)對(duì)象)。當(dāng)遇到這種情況時(shí),他不會(huì)像復(fù)制大師那樣重新制作一份,而是直接把現(xiàn)成的披薩轉(zhuǎn)移給你。這樣不僅速度快,還能節(jié)省資源! ??

小貼士: 移動(dòng)構(gòu)造函數(shù)通常會(huì)被標(biāo)記為 noexcept,表示承諾在轉(zhuǎn)移過程中不會(huì)拋出異常,這讓編譯器能夠放心地優(yōu)化代碼。就像快遞小哥向你保證:放心,包裹一定安全送達(dá)! ???

委托構(gòu)造函數(shù) - 團(tuán)隊(duì)協(xié)作小能手

想象一下,在這個(gè)繁忙的披薩店里,還有一位特別的成員 - 委托構(gòu)造小能手!他不直接制作披薩,而是善于"委托"其他師傅來完成工作。就像一個(gè)超級(jí)組織者,他知道每位師傅的特長(zhǎng),總能找到最合適的人選來完成訂單!??

class Pizza {
public:
    // 主廚的完整配方
    Pizza(int s, string t, bool extraCheese) : 
        size(s), topping(t), hasExtraCheese(extraCheese) {
        cout << "制作完整版披薩!" << endl;
    }
    
    // 委托給主廚,默認(rèn)加雙份芝士
    Pizza(int s, string t) : Pizza(s, t, true) {
        cout << "雙倍芝士版本真香!??" << endl;
    }
    
    // 懶人套餐:委托制作標(biāo)準(zhǔn)12寸雙倍芝士披薩
    Pizza() : Pizza(12, "cheese") {
        cout << "標(biāo)準(zhǔn)版披薩準(zhǔn)備完成!" << endl;
    }

private:
    int size;
    string topping;
    bool hasExtraCheese;
};

// 看看怎么使用
Pizza standardPizza;              // 制作標(biāo)準(zhǔn)12寸雙倍芝士披薩
Pizza cheesePizza(10, "cheese"); // 10寸雙倍芝士披薩
Pizza customPizza(14, "supreme", false); // 14寸至尊披薩,普通芝士

委托構(gòu)造函數(shù)就像是披薩店里的"傳話筒",它可以把客人的訂單轉(zhuǎn)交給更專業(yè)的師傅來完成。這樣不僅避免了重復(fù)的工作,還能確保每份披薩都符合統(tǒng)一的品質(zhì)標(biāo)準(zhǔn)。比如當(dāng)客人只說要一個(gè)披薩時(shí),委托構(gòu)造函數(shù)就會(huì)默默地幫你選擇最受歡迎的標(biāo)準(zhǔn)款式!

小貼士:使用委托構(gòu)造函數(shù)可以減少代碼重復(fù),提高代碼的可維護(hù)性。就像披薩店里的工作流程一樣,讓專業(yè)的人做專業(yè)的事!?????

總結(jié)

這五位構(gòu)造函數(shù)家族成員各有所長(zhǎng):

  • 默認(rèn)構(gòu)造函數(shù)負(fù)責(zé)基礎(chǔ)款
  • 帶參構(gòu)造函數(shù)處理定制需求
  • 拷貝構(gòu)造函數(shù)善于完美復(fù)制
  • 移動(dòng)構(gòu)造函數(shù)專注效率優(yōu)化
  • 委托構(gòu)造函數(shù)團(tuán)隊(duì)協(xié)作

了解他們的特長(zhǎng),在合適的場(chǎng)景選擇合適的成員,就能讓我們的程序更加高效優(yōu)雅! ??

責(zé)任編輯:趙寧寧 來源: everystep
相關(guān)推薦

2025-02-06 13:23:09

C++函數(shù)參數(shù)

2010-01-25 17:05:37

C++語言

2010-02-01 11:01:30

C++靜態(tài)構(gòu)造函數(shù)

2024-04-28 11:01:27

C++編程語言函數(shù)

2010-01-28 10:49:22

C++構(gòu)造函數(shù)

2023-11-28 11:51:01

C++函數(shù)

2022-07-26 00:36:06

C#C++函數(shù)

2010-01-27 17:16:52

C++構(gòu)造函數(shù)

2024-12-11 08:00:00

移動(dòng)語義C++

2010-01-22 11:13:16

C++靜態(tài)

2010-01-27 10:13:22

C++類對(duì)象

2010-01-27 16:10:32

C++靜態(tài)構(gòu)造函數(shù)

2010-01-25 14:00:27

C++類

2014-05-29 10:54:20

C++構(gòu)造函數(shù)

2010-01-25 14:43:00

C++構(gòu)造函數(shù)

2021-12-10 10:45:36

C++函數(shù)Stock

2010-02-02 17:39:31

C++構(gòu)造函數(shù)

2024-12-31 00:07:12

2009-08-13 17:30:30

C#構(gòu)造函數(shù)

2010-07-16 16:56:01

Perl構(gòu)造函數(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)