C 中類的建構函式理解(二)

2021-08-20 23:26:07 字數 1565 閱讀 5602

上次的筆記中簡要的探索了一下c++中類的建構函式的一些特性,這篇筆記將做進一步的探索。主要是複製建構函式的使用。

複製建構函式也稱拷貝建構函式,它只有單個形參,且該形參是對本類型別物件的引用。其作用有以下幾點:

1、根據另乙個同型別的物件顯示或隱式初始化乙個物件

2、複製乙個物件,將它作為實參傳遞給乙個函式

3、從函式返回時複製乙個物件

4、初始化順序容器中的元素

5、根據元素初始化列表初始化陣列元素

如同預設建構函式一樣,如果我們沒有顯示地定義複製建構函式,編譯器將為我們合成乙個複製建構函式。合成複製建構函式將新物件初始化為原物件的副本。編譯器對每個資料成員進行注意初始化。合成複製建構函式直接複製內建型別成員的值,對於類型別的成員,則使用該類的複製建構函式進行複製。如果某個類包含陣列型別的成員,那麼合成複製建構函式將複製陣列的每個元素。

測試**如下:

#include

#include

using

namespace

std;

class myclass

int a;

char c;

};int

main

()

執行結果如下:

class1中的成員都被複製到了class2中。合成複製建構函式使用的是淺拷貝的策略。也就是說,如果class1中有指標型別的成員,那麼使用合成的複製建構函式時,class2中對應的那個指標與class1中的指標指向的是同一片位址。

自己定義複製建構函式時,可將複製建構函式的引數設定為類型別的引用,通常用const修飾引數。儘管也可以接受非const引用的複製建構函式。

測試**如下:

#include

#include

using

namespace

std;

class myclass

myclass( const myclass& myclass)//複製建構函式

int a;

char c;

};int

main

()

上述**自定義了拷貝建構函式,儘管自定義的複製建構函式函式體為空,但這時系統不再合成複製建構函式,而是呼叫使用者自定義的,此時的執行結果如下:

由於自定義複製建構函式函式體為空,因此沒有完成複製。

修改複製構造函如下:

myclass( const myclass& myclass)

我們可以讓自定義的複製建構函式在複製時採用深拷貝的方式。此外,當沒有對當前的類過載執行符」=「時,下面這句話也是呼叫複製建構函式:

myclass class3 = class1;
這篇筆記寫得有點匆忙,之後有時間需要進一步完善。

C 建構函式理解

正確理解qt中建構函式 widget widget qwidget parent qwidget parent ui new ui widget include using namespace std class base base int val m num val 1 private int m...

php的建構函式理解

建構函式 是一種特殊的方法。主要用來在建立物件時初始化物件,即為物件成員變數 賦初始值,總與new運算子 一起使用在建立物件的語句中。特別的乙個類可以有多個建構函式 可根據其引數個數的不同或引數型別的不同來區分它們 即建構函式的過載 經常可以看到這樣 function construct param...

oracle中的開窗函式理解

開窗函式指定了分析函式工作的資料視窗大小,這個資料視窗大小可能會隨著行的變化而變化,舉例如下 over order by salary 按照salary排序進行累計,order by是個預設的開窗函式 over partition by deptno 按照部門分割槽 over order by sa...