国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

淺談C++ Explicit Constructors(顯式構(gòu)造函數(shù))

2020-05-23 13:54:38
字體:
供稿:網(wǎng)友

C++ 為類(Class)提供了許多默認(rèn)函數(shù)。如果自己沒有申明,編譯器會為我們提供一個copy構(gòu)造函數(shù)、一個copy assignment操作符和一個析構(gòu)函數(shù)。此外,如果沒有申明任何構(gòu)造函數(shù),編譯器會為我們申明一個default構(gòu)造函數(shù)。很像下面的Empty類:

class Empty{  public:    Empty();    Empty(const Empty &rhs);    ~Empty();    Empty& operator=(const Empty &rhs);};

就像Effective C++說的,如果不想使用編譯器自動生成的函數(shù),就應(yīng)該明確拒絕。

1.C++中的隱式構(gòu)造函數(shù)

如果c++類的其中一個構(gòu)造函數(shù)有一個參數(shù),那么在編譯的時候就會有一個缺省的轉(zhuǎn)換操作:將該構(gòu)造函數(shù)對應(yīng)數(shù)據(jù)類型的數(shù)據(jù)轉(zhuǎn)換為該類對象。

2.Explicit Constructors顯式構(gòu)造函數(shù)

為了避免上面提到的只有一個參數(shù)的構(gòu)造函數(shù)采用的缺省轉(zhuǎn)換操作,在構(gòu)造函數(shù)前,使用Explicit 關(guān)鍵字修飾即可。

3.如下面的例子:

#include <iostream>using namespace std;class B{  public:    int data;    B(int _data):data(_data){}    //explicit B(int _data):data(_data){}};int main(){  B temp=5;  cout<<temp.data<<endl;  return 0;}

程序第11行,將int轉(zhuǎn)換為B類型的對象,就是使用了隱式構(gòu)造函數(shù)。因為B中存在一個只有一個參數(shù)的構(gòu)造函數(shù),且參數(shù)類型也是int。

如果在構(gòu)造函數(shù)前加explicit ,表示為顯示構(gòu)造函數(shù),則第11行編譯不能通過。因為這時,就沒有隱式構(gòu)造函數(shù)啦。

以上這篇淺談C++ Explicit Constructors(顯式構(gòu)造函數(shù))就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網(wǎng)。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 抚顺县| 临沧市| 石家庄市| 莲花县| 陈巴尔虎旗| 瑞丽市| 改则县| 老河口市| 甘孜| 鹤峰县| 贡嘎县| 土默特左旗| 阿鲁科尔沁旗| 丹棱县| 公安县| 湖州市| 博野县| 开原市| 昭通市| 泰安市| 大同县| 南宁市| 云和县| 松阳县| 巴东县| 汉寿县| 奉节县| 紫阳县| 平谷区| 托克托县| 南丹县| 钦州市| 云霄县| 卫辉市| 崇仁县| 老河口市| 和林格尔县| 岳普湖县| 梨树县| 樟树市| 松溪县|