您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關C++類構造函數如何使用,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
所謂C++類是定義同一類所有對象的變量和方法的藍圖或原型,C++類體內的成員是需要開辟動態開辟堆內存的,如果我們不自定義拷貝構造函數而讓系統自己處理。
我們已經學習過了類的構造函數和析構函數的相關知識,對于普通類型的對象來說,他們之間的復制是很簡單的,例如: 自己定義的類的對象同樣是對象,誰也不能阻止我們用以下的方式進行復制,例如:
#include <iostream> using namespace std; class Test { public: Test(int temp) { p1=temp; } protected: int p1; }; void main() { Test a(99); Test b=a; }
普通對象和類對象同為對象,他們之間的特性有相似之處也有不同之處,C++類對象內部存在成員變量,而普通對象是沒有的,當同樣的復制方法發生在不同的對象上的時候,那么系統對他們進行的操作也是不一樣的,就C++類對象而言,相同類型的類對象是通過拷貝構造函數來完成整個復制過程的。
在上面的代碼中,我們并沒有看到拷貝構造函數,同樣完成了復制工作,這又是為什么呢?因為當一個類沒有自定義的拷貝構造函數的時候系統會自動提供一個默認的拷貝構造函數,來完成復制工作。
下面,我們為了說明情況,就普通情況而言(以上面的代碼為例),我們來自己定義一個與系統默認拷貝構造函數一樣的拷貝構造函數,看看它的內部是如何工作的!
代碼如下:
#include <iostream> using namespace std; class Test { public: Test(int temp) { p1=temp; } Test(Test &c_t)//這里就是自定義的拷貝構造函數 { cout<<"進入copy構造函數"<<endl; p1=c_t.p1;//這句如果去掉就不能完成復制工作了,此句復制過程的核心語句 }
上面代碼中的Test(Test &c_t)就是我們自定義的拷貝構造函數,拷貝構造函數的名稱必須與C++類名稱一致,函數的形式參數是本C++類型的一個引用變量,且必須是引用。 當用一個已經初始化過了的自定義C++類類型對象去初始化另一個新構造的對象的時候。
拷貝構造函數就會被自動調用,如果你沒有自定義拷貝構造函數的時候系統將會提供給一個默認的拷貝構造函數來完成這個過程。上面代碼的復制核心語句就是通過Test(Test &c_t)拷貝構造函數內的p1=c_t.p1;語句完成的。
如果取掉這句代碼,那么b對象的p1屬性將得到一個未知的隨機值;就上面的代碼情況而言,很多人會問到,既然系統會自動提供一個默認的拷貝構造函數來處理復制,那么我們沒有意義要去自定義拷貝構造函數呀。
以上就是C++類構造函數如何使用,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。