程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++復習筆記---淺談拷貝構造函數和賦值構造函數

C++復習筆記---淺談拷貝構造函數和賦值構造函數

編輯:C++入門知識

1.拷貝構造函數的形式
對於類X,如果它的函數形式如下
a) X&
b) const X&
c) volatile X&
d) const volatile X&
且沒有其他參數或其他參數都有默認值,那麼這個函數是拷貝構造函數
X::X(const X&);是拷貝構造函數
X::X(const X&,int val = 10);是拷貝構造函數
 
2.一個類中可以存在超過一個拷貝構造函數
class X {     
public:     
  X(const X&);     
  X(X&);            // OK  
};
編譯器根據實際情況調用const拷貝構造函數或非const的拷貝構造函數
 
3.默認的拷貝構造函數行為
a)先調用父類的拷貝構造函數
b)如果數據成員為一個類的實例,則調用該類的拷貝構造函數
c)其他成員按位拷貝
 
4.默認的賦值構造函數行為
a)先調用父類的賦值構造函數
b)如果數據成員為一個類的實例,則調用該類的賦值構造函數
 c)其他成員按位拷貝  www.2cto.com
 
5.提供顯示的拷貝和賦值構造函數
基本的原則是子類一定要調用父類的相應函數,參考方式
Derive(const Derive& obj):Base(obj)
{
…...
}
 
Derive& operator =(const Derive &obj)
{
if ( this == &obj )
return *this;
 
//方式一
Base::operator =(obj);
 
//方式二
static_cast<Base&>(*this) = obj;
return *this;
}

另外當你的成員變量有const或者引用,系統無法為你提供默認的拷貝和賦值構造函數,我們必須自己處理這些特殊的情況

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