91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

教你如何優雅地拒絕自作多情的C++

發布時間:2020-06-14 15:01:25 來源:網絡 閱讀:2780 作者:林世霖 欄目:編程語言

教你如何優雅地拒絕自作多情的C++一個含義中立的行為,放在不同的人眼里,就有不一樣的解釋。就像你幫學妹打開水,如果她喜歡你,那你就是冬天里溫柔貼心的暖男,如果她不喜歡你,那你就是路邊上自作多情的逗比。

教你如何優雅地拒絕自作多情的C++


類比到C++中,他會你不知情的情況下,自動為你準備好①無參構造函數、空析構函數、復制構造函數、賦值操作符函數等一系列基本類成員方法。你說他這是一種溫柔貼心呢,還是一種自作多情呢?


這沒有標準答案,事情的好壞取決于你所設計的類的需要。在大部分情況下,以上自動生成的類成員方法都是必不可少的,它們提供了一個類對象最起碼的特性。但在一些特別的時候,它們卻是我們想要擺脫的東西。


比如,你設計一個用來表達一個學生的類,如下


class student

{

    int ID;  // ×××

    string name; // 姓名

    char *data; // 其他信息

};


假如,我們認為以上四類自動生成的類方法都是自作多情,那么我們來看看都怎么躲避并拒絕這些路邊的逗比。


首先我們認為任何一個學生對象,都必須有ID和name,因此在定義學生對象的時候我們就要拒絕C++自作多情地自動生成①無參構造函數,這很簡單,我們只需要定義任意版本的類構造函數,就可以優雅地拒絕。


通過定義一個構造函數來優雅地拒絕C++自動生成的①無參構造函數

student::student(const int &id, const string &name)

{

    ID = id;

    this->name = name;

    data = new char[100];

}


其次我們認為任何一個學生對象在退出其作用域時,都應該釋放其所持有的資源,因此跟構造函數類似,我們可以通過自定義一個析構函數,來拒絕系統自動生成的②空析構函數。


通過自定義析構函數來優雅地拒絕C++自動生成的②空析構函數

student::~student( )

{

    delete [ ] data;

}


再次,我們不希望使用一個學生來初始化另一個學生,也不希望兩個學生對象的直接賦值,畢竟,沒有任何兩個人是一模一樣的(就算是同卵雙胞胎我們認為也不行),換句話說我們希望以下代碼不合法


student Jack(1234, "Jack");

student Rose(Jack);

student Mike = Jack; 


仔細分析一下上面的代碼,Rose(Jack)實際上是調用了Rose的默認拷貝構造函數,Mike = Jack實際上是調用了Mike的默認賦值操作符函數,emmmm... ... 假如,我們將這兩個逗比函數設置為私有private,那會怎樣?沒錯!這樣的話以上代碼就不合法了,look:


通過private權限來優雅地拒絕C++自動生成③復制構造函數和④賦值操作符函數

class student

{

    ... ...

private:

    student(const student &);

    student &operator=(const student &);

};


以上妙計,可不是林世霖我發明的土辦法,實際上這是C++官方標準和Boost庫通用的技巧,更進一步,我們可以定義一個專門包含private拷貝構造函數和private賦值操作符函數的特定類Uncopyable,并將之成為所有需要拒絕這些默認類成員方法的類的基類。


一個將③復制構造函數和④賦值操作符函數封印在private權限內部的神奇的基類

class Uncopyable

{

protected:

    Uncopyable(); // 允許派生類調用構造函數

    ~Uncopyable();

private:

    Uncopyable(const Uncopyable &);  // 阻止派生類

    Uncopyable &operator=(const Uncopyable &);

};


接下來,我們只需要讓student類繼承Uncopyable即可


class student : public Uncopyable

{

    ... ...

};


至此!我們就完美地拒絕了自作多情了C++啦!哦耶!




噓!聽說識別下面二維碼進入 微店秘籍酷 能上天遁地,不信你試試


教你如何優雅地拒絕自作多情的C++

教你如何優雅地拒絕自作多情的C++


微信原文:https://mp.weixin.qq.com/s?__biz=MzAxNzYzMTU0Ng==&mid=2651289178&idx=1&sn=9cbdc8745705bc3d3eb711bb94ba72f3&chksm=8011460fb766cf1946651e3fff0fd68edb2a6c9fca9070e576dc5f2e9b2b19b95918cfe47605#rd


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新平| 赤水市| 那曲县| 仲巴县| 昌江| 剑阁县| 柳江县| 奉化市| 上栗县| 景德镇市| 东方市| 津市市| 航空| 自治县| 明溪县| 台北市| 额尔古纳市| 花莲市| 大宁县| 乐陵市| 沾化县| 普格县| 凌云县| 丹棱县| 巴南区| 石泉县| 呈贡县| 麻城市| 黑龙江省| 新干县| 葫芦岛市| 南京市| 宣化县| 渭南市| 武穴市| 鄂伦春自治旗| 颍上县| 双江| 宜阳县| 拜城县| 含山县|