類的構造 析構 拷貝 賦值函式

2021-05-27 17:35:12 字數 816 閱讀 5107

讀《高質量程式設計指南》chapter 14總結

一般情況下,對於任意乙個類a,如果不顯示的宣告和定義,會自動生成預設的4個public inline函式

class a

1,初始化和賦值的區別:初始化是在建立物件時使用初始值直接填充物件的記憶體單元,因此不會有資料型別轉換,也不會產生臨時物件。而賦值是物件創造後任何時候都可以呼叫,但由於使用「=」運算子,會有型別轉換和產生臨時物件。

2,建構函式分為預設的建構函式,拷貝建構函式,其它帶引數的建構函式。

拷貝建構函式的第乙個引數是本類物件的引用,const引用等。並且沒有其它引數,或者其它引數都有預設值。

3,以string類為例來說明上面四個預設函式。

class string

string::string(const char *str=null)

else

string::~string()

string::string(const string ©)

string & string::operator=(const string &other)

return *this; }

4,拷貝建構函式和賦值函式的區別; 若有

string a("hello");          拷貝建構函式

string b("world");         ///拷貝建構函式

string c=a;                  拷貝建構函式,相當於c(a);給定義的物件c初始化a。易混淆。

c=b;                            賦值函式,兩者都已經定義

類的構造 拷貝 賦值 析構函式

賦值運算子 析構函式 總結構造 拷貝 賦值 析構函式是類的四個特殊成員函式,其特殊之處在於,即使我們沒有定義這些函式,編譯器也會自動提供預設函式,但如果我們提供了這些函式的顯式定義,那麼編譯器將不會再提供。這可能導致一些隱藏的問題,因此,我們需要對他們的實現進行充分的認識。假定有乙個類klunk,那...

c 建構函式 拷貝,賦值,析構

建構函式 可以參考 作用 為物件成員變數賦初始值。new運算子一起使用 注意 1.建構函式的命名必須和類名完全相同 2.沒有返回值,即不用在定義時加返回值型別 void int float之類的 3.建構函式不能被直接呼叫,必須通過new運算子在建立物件時才會自動呼叫 拷貝函式 可自定義 思路就是賦...

建構函式,拷貝建構函式,析構函式,賦值函式

class cgoods else mamount amount mprice price cgoods 析構函式 cgoods const cgoods src 拷貝建構函式 void operator const cgoods src 賦值函式 private char mpname int m...