程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++ Explicit Constructors(顯式構造函數)

C++ Explicit Constructors(顯式構造函數)

編輯:C++入門知識

 C++ 為類(Class)提供了許多默認函數。如果自己沒有申明,編譯器會為我們提供一個copy構造函數、一個copy assignment操作符和一個析構函數。此外,如果沒有申明任何構造函數,編譯器會為我們申明一個default構造函數。很像下面的Empty類:   復制代碼 1 class Empty{ 2     public: 3         Empty(); 4         Empty(const Empty &rhs); 5         ~Empty(); 6         Empty& operator=(const Empty &rhs); 7 }; 復制代碼    就像Effective C++說的,如果不想使用編譯器自動生成的函數,就應該明確拒絕。   1.C++中的隱式構造函數     如果c++類的其中一個構造函數有一個參數,那麼在編譯的時候就會有一個缺省的轉換操作:將該構造函數對應數據類型的數據轉換為該類對象。   2.Explicit Constructors顯式構造函數     為了避免上面提到的只有一個參數的構造函數采用的缺省轉換操作,在構造函數前,使用Explicit 關鍵字修飾即可。   3.如下面的例子:   復制代碼  1 #include <iostream>  2 using namespace std;  3 class B{  4     public:  5         int data;  6         B(int _data):data(_data){}  7         //explicit B(int _data):data(_data){}  8 };  9  10 int main(){ 11     B temp=5; 12     cout<<temp.data<<endl; 13     return 0; 14 } 復制代碼   程序第11行,將int轉換為B類型的對象,就是使用了隱式構造函數。因為B中存在一個只有一個參數的構造函數,且參數類型也是int。     如果在構造函數前加explicit ,表示為顯示構造函數,則第11行編譯不能通過。因為這時,就沒有隱式構造函數啦。    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved