C++ 拷貝構造函數
1. 定義
(const &);
class A
{
int x,y;
public:
A();
A(const A& a)
{
x = a.x+1;
y = a.y+1;
}
}
其中,const是為了防止在函數中修改實參對象,可以省略。
拷貝構造函數也可以帶有其他參數,但這些參數必須要有默認值。
2. 調用
下面三種情況將會調用拷貝構造函數:
1)定義對象
2)把對象作為值參數傳遞給函數
3)把對象作為返回值
如果在類定義中沒有給出拷貝構造函數,則編譯程序將會為其提供一個隱式的拷貝構造函數,此時的拷貝構造函數跟Java中的克隆函數有點像。
當類定義中包含成員對象,成員對象的拷貝初始化可由成員對象類的拷貝構造函數來實現。
系統提供的隱式拷貝構造函數會去調用成員對象的拷貝構造函數,而自定義的拷貝構造函數則不會自動去調用成員的拷貝構造函數,這時,必須要在拷貝構造函數的成員初始化表中顯式指出。
class A
{
}
class B
{
int z;
A a;
public:
B();
B(const B& b): a(b.a)
{
z = b.z;
}
}
————————————————
C++拷貝構造函數(深拷貝,淺拷貝)
對於普通類型的對象來說,它們之間的複製是很簡單的,例如:
int a=88;
int b=a;
而類對象與普通對象不同,類對象內部結構一般較為複雜,存在各種成員變量。下面看一個類對象拷貝的簡單例子。
#include <iostream>
using namespace std;
class CExample {
private:
int a;
public:
CExample(int b)
{ a=b;}
void Show ()
{
cout<
閱讀更多 中國編程2025 的文章