#include
using namespace std;
class CPoint
{
public:CPoint(int xx, int yy){x = xx;y = yy;}CPoint(const CPoint &p){x = p.x;y = p.y;}
private:int x, y;
};
? ? ? ?首先,我們來看一個例子,在CPoint這個類中定義了兩個構造函數,第一個為普通的構造函數,第二個為拷貝構造函數,在拷貝構造函數中通過p.x來訪問被引用的對象p的私有數據成員x和y,這個例子可能會讓很多人有疑惑,你可能會想為什么拷貝構造函數的參數可以直接去訪問它自己的私有成員?那這個例子到底是錯的還是對的呢
?
? ? ? ?答案是對的,我們得明白C++的限定符是限定類的,不是限定對象的,只要是類型相同就能相互訪問。兩個是同類型的,因此可以直接訪問,但是需要指定一下是哪個對象。所?謂訪問權限(如public,private),是對“類”來說的,不是對“對象”來說的,private訪問權限是其它類不能訪問,而非這個類的不同對?象不能訪問。
?
? ? ? ?結論,拷貝構造函數本來就是用來把兩個相同類的對象賦值而已,那么被賦值的對象的類肯定和用來賦值的對象是一個類,所以在拷貝構造函數里面這樣用,一點問題也沒有!