拷貝建構函式和賦值操作符

2021-06-09 05:37:01 字數 812 閱讀 1101

類有預設的建構函式、拷貝建構函式、析構函式、賦值操作運算子=和取位址運算子&.

預設的賦值操作運算子和預設的拷貝建構函式類似,對於每個非static成員,都是執行逐個成員賦值(memberwise assignment),同時也是按位賦值(bitwise copy).即,只是簡單地將每個類成員的記憶體中的直接拷貝到對應的新的類的成員當中。

那麼,什麼時候需要賦值操作符,什麼時候需要拷貝建構函式呢?當用乙個物件例項去初始化另乙個物件時,需要拷貝建構函式;當將乙個物件例項賦值給另外乙個已經初始化過的物件例項時,需要賦值操作運算子。所以說,雖然他們二者功能有點類似,但是各自有自己使用的地方,各有各的用途。

c++有預設"+"號操作符,但是只是針對普通的內建資料型別,如果浮點數,整形數。而對於類型別的話,類是沒有預設的"+"號操作

符的。所以,類如果要想用加號操作符,就只能是自己去過載c++預設"+"號操作符了。

class point;

int main()

c++其實把操作符也看成是與函式同樣性質的實體了。因此,可以對操作符進行函式那樣的定義,之後,就可以自由地使用操作符了。

人們通常習慣將操作符放在兩個運算元的中間,所以c++採用了人性化的設計,編譯器會將表示式a+b轉譯為operator+(a,b),對函式的呼叫.

操作符可以過載為類的友元函式,也可以過載為類的成員函式。但是有些操作符只能是過載為類成員函式,如賦值操作符。

下面三種物件需要呼叫拷貝建構函式

1) 乙個物件作為函式引數,以值傳遞的方式傳入函式體

2) 乙個物件作為函式返回值,以值傳遞的方式從函式返回

3) 乙個物件用於給另外乙個物件進行初始化

賦值操作符和拷貝建構函式

最近開發乙個專案,用到了單例模式,標頭檔案大概如下 class crecguard crecguard private void guard void unguard private critical section cs template class csingleton 禁止建構函式 csing...

子類的拷貝建構函式和賦值操作符

在定義子類的拷貝建構函式和賦值操作符時,基本的原則是子類一定要呼叫父類的相應函式,以下定義了父類base類和子類derived類來說明兩個函式的寫法 class base public base virtual base base const base rhs base operator base ...

複製建構函式和賦值操作符 深拷貝,淺拷貝

首先,大家要知道,c 類有以下這些極為重要的函式 一 複製建構函式。二 賦值函式。我們先來講複製建構函式。什麼是複製建構函式呢?比如,我們可以寫下這樣的 string test1 test2 這是進行初始化。我們知道,初始化物件要用建構函式。可這兒呢?按理說,應該有宣告為這樣的建構函式 string...