最近在復習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) 就是我們自定義的拷貝構造函數。可見,拷貝構造函數是一種特殊的構造函數,函數的名稱必須和類名稱一致,它必須的一個參數是本類型的一個引用變量。