27 c c 程式設計師面試寶典 複製建構函式

2021-07-07 09:24:13 字數 1440 閱讀 2642

27.c/c++程式設計師面試寶典-複製建構函式

c++中物件的複製就如同「轉殖」,使用乙個已有的物件快速地複製出多個完全相同的物件。在c++中,類除了提供預設建構函式和析構函式外,編譯器還提供乙個預設複製建構函式,每當建立物件的複製時,都將呼叫複製建構函式。

面試題112  什麼是深複製與淺複製***

分析:淺複製又稱為淺拷貝,指的是在物件複製時,只是對物件中的資料成員進行簡單的賦值,預設複製建構函式執行的也是淺複製。淺複製的示例**如下:

#include

using namespace std;

class test

test(test &c_t)  //自定義的拷貝建構函式

public:

int p1; };

void main()

深複製又稱為深拷貝,對於物件中的動態成員,就不僅僅是簡單的賦值了,而是重新動態分配空間。深複製的示例**如下:

class rect

rect(const rect &r)

~rect()  //析構函式,釋放動態分配的空間

} private:

int width;

int height;

int *p; };

上面**中的rect1的p和rect2的p各自指向一段記憶體空間,但是它們指向的空間具有相同的內容。

【答案】如果乙個類擁有資源,當這個類的物件發生複製過程的時候,這個過程就可以叫做深複製,如果物件存在資源但在複製過程中並未複製資源就是淺複製。

面試題113   什麼是複製建構函式**

分析:複製建構函式又稱為拷貝建構函式,是一種特殊的建構函式,它由編譯器呼叫來完成一些基於同一類的其他物件的構建以及初始化。它存在唯一的乙個引數是不可變的。這個函式經常用在函式呼叫期間於使用者定義型別的值傳遞及返回。拷貝建構函式要呼叫基類的拷貝建構函式和成員函式。一般它使用常量方式呼叫,另外,它也可以用非常量方式呼叫。

在c++中,有3種物件需要複製的情況,這時,複製建構函式將會被呼叫,具體如下:

第一:乙個物件以值傳遞的方式傳入函式體;

第二:乙個物件以值傳遞的方式從函式返回;

第三:乙個物件需要通過另外乙個物件進行初始化。如果在前兩種情況下不使用複製建構函式的時候,就會導致乙個指標指向已經被刪除的記憶體空間。

對於第三種情況來說,初始化和賦值的不同含義是構造函式呼叫的原因。事實上,複製建構函式是由普通建構函式和賦值操作符共同實現的。複製建構函式的示例**如下:

#include

using namespace std;

class a

a() }

int main()

【答案】有3種情況會使用複製建構函式:

1)乙個物件以值傳遞的方式傳入函式體。

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

3)乙個物件需要通過另外乙個物件進行初始化。

C C 程式設計師面試寶典 2

9.關聯式資料庫的正規化 10.資料庫操作中的事務 事務的4個特性 11.數字矩陣的生成 對應的 如下 include include include define print arr2d arr,n else print arr2d arr,n 1 2 6 7 15 3 5 8 14 16 4 9...

程式設計師面試寶典 C C 記憶體分類

在進行c c 程式設計時,需要程式設計師對記憶體的了解比較精準。經常需要操作的記憶體可分為以下幾個類別。棧區 stack 由編譯器自動分配和釋放,存放函式的引數值 區域性變數的值等。其操作方式類似於資料結構中的棧。堆區 heap 一般由程式設計師分配和釋放,若程式設計師不釋放,程式節束時可能由操 作...

程式設計師面試寶典

據統計,80 的簡歷都是不合格的。不少人事管理者抱怨收到的許多簡歷在格式上很糟糕。簡歷應該如何做到在格式上簡潔明瞭,重點突出?求職信應該如何有足夠的內容推銷自己?如何控制長度,言簡意賅?相信讀了本章你會對簡歷的撰寫有乙個新的認識。2.1 簡歷注意事項 1 簡歷不要太長 一般的簡歷普遍都太長。其實簡歷...