歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++拷貝構造函數

C++拷貝構造函數

日期:2017/3/1 9:59:37   编辑:Linux編程

最近在復習C++的考試,對於上機中出現多的是構造函數\拷貝構造函數\虛函數等等接觸了很多,對它們的理解逐步的加深.

. 什麼是拷貝構造函數

首先對於普通類型的對象來說,它們之間的復制是很簡單的,例如:

int a = 100;

int b = a;

而類對象與普通對象不同,類對象內部結構一般較為復雜,存在各種成員變量。

下面看一個類對象拷貝的簡單例子。

#include <iostream>
using namespace std;

class CExample {
private:
 int a;
public:
//構造函數
 CExample(int b)
 { a = b;}

//一般函數
 void Show ()
 {
cout<<a<<endl;
}
};

int main()
{
 CExample A(100);
 CExample B = A; //注意這裡的對象初始化要調用拷貝構造函數,而非賦值
  B.Show ();
 return 0;
}

運行程序,屏幕輸出100。從以上代碼的運行結果可以看出,系統為對象 B 分配了內存並完成了與對象 A 的復制過程。就類對象而言,相同類型的類對象是通過拷貝構造函數來完成整個復制過程的。

下面舉例說明拷貝構造函數的工作過程。

#include <iostream>
using namespace std;

class CExample {
private:
int a;
public:
//構造函數
CExample(int b)
{ a = b;}

//拷貝構造函數
CExample(const CExample& C)
{
a = C.a;
}

//一般函數
void Show ()
{
cout<<a<<endl;
}
};

int main()
{
CExample A(100);
CExample B = A; // CExample B(A); 也是一樣的
B.Show ();
return 0;
}

CExample(const CExample& C) 就是我們自定義的拷貝構造函數。可見,拷貝構造函數是一種特殊的構造函數,函數的名稱必須和類名稱一致,它必須的一個參數是本類型的一個引用變量。

Copyright © Linux教程網 All Rights Reserved