教你如何優(yōu)雅地拒絕自作多情的C++-創(chuàng)新互聯(lián)

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

專注于為中小企業(yè)提供成都做網(wǎng)站、成都網(wǎng)站建設服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)臨海免費做網(wǎng)站提供優(yōu)質的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了近1000家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉變。

教你如何優(yōu)雅地拒絕自作多情的C++

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

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

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

class student

{

  int ID;  // ×××

  string name; // 姓名

  char *data; // 其他信息

};


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

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

通過定義一個構造函數(shù)來優(yōu)雅地拒絕C++自動生成的①無參構造函數(shù)

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

{

  ID = id;

  this->name = name;

  data = new char[100];

}


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

通過自定義析構函數(shù)來優(yōu)雅地拒絕C++自動生成的②空析構函數(shù)

student::~student( )

{

  delete [ ] data;

}

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

student Jack(1234, "Jack");

student Rose(Jack);

student Mike = Jack;


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

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

class student

{

  ... ...

private:

  student(const student &);

  student &operator=(const student &);

};


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

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

class Uncopyable

{

protected:

  Uncopyable(); // 允許派生類調(diào)用構造函數(shù)

  ~Uncopyable();

private:

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

  Uncopyable &operator=(const Uncopyable &);

};


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

class student : public Uncopyable

{

  ... ...

};


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

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


教你如何優(yōu)雅地拒絕自作多情的C++


教你如何優(yōu)雅地拒絕自作多情的C++

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

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

分享題目:教你如何優(yōu)雅地拒絕自作多情的C++-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://bm7419.com/article4/dihdoe.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、動態(tài)網(wǎng)站、外貿(mào)網(wǎng)站建設品牌網(wǎng)站建設、網(wǎng)站維護域名注冊

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化