C++類對象的複製-拷貝建構函式

來源:互聯網
上載者:User

在學習這一章內容前我們已經學習過了類的建構函式和解構函式的相關知識,對於普通類型的對象來說,他們之間的複製是很簡單的,例如:

int a = 10;

int b =a;

自己定義的類的對象同樣是對象,誰也不能阻止我們用以下的方式進行複製,例如:

#include <iostream>
using namespace std;
class Test
{
public:
Test(int temp)
{
p1=temp;
}
protected:
int p1;
};
void main()
{
Test a(99);
Test b=a;
}

普通對象和類對象同為對象,他們之間的特性有相似之處也有不同之處,類對象內部存在成員變數,而普通對象是沒有的,當同樣的複製方法發生在不同的對象上的時候,那麼系統對他們進行的操作也是不一樣的,就類對象而言,相同類型的類對象是通過拷貝建構函式來完成整個複製過程的,在上面的代碼中,我們並沒有看到拷貝建構函式,同樣完成了複製工作,這又是為什麼呢?因為當一個類沒有自訂的拷貝建構函式的時候系統會自動提供一個預設的拷貝建構函式,來完成複製工作。

下面,我們為了說明情況,就普通情況而言(以上面的代碼為例),我們來自己定義一個與系統預設拷貝建構函式一樣的拷貝建構函式,看看它的內部是如何工作的!

代碼如下:

#include <iostream>
using namespace std;
class Test
{
public:
Test(int temp)
{
p1=temp;
}
Test(Test &c_t)//這裡就是自訂的拷貝建構函式
{
cout<<"進入copy建構函式"<<endl;
p1=c_t.p1;//這句如果去掉就不能完成複製工作了,此句複製過程的核心語句
}
public:
int p1;
};
void main()
{
Test a(99);
Test b=a;
cout<<b.p1;
cin.get();
}

上面代碼中的Test(Test &c_t)就是我們自訂的拷貝建構函式,拷貝建構函式的名稱必須與類名稱一致,函數的形式參數是本類型的一個引用變數,且必須是引用。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.