研究員堆垛,初始化數據成員引用++
考慮以下兩個簡單的類在頭文件:
Class CC
{
public:
CC(int& value);
C& operator=(const C& other);
{
cout<<" From copy constructor ";
}
int m_cc;
};
Class AA
{
public:
AA(CC& refCC);
CC m_cInstance;
}
以下是在cpp文件。
CC:CC(int& value): m_cc(value)
{
cout<<" Constructor of CC" <<endl;
m_cc++;
}
AA:AA(CC& refCC): m_cInstance(refCC)
{
cout<<" The value of m_cc in refCC is: "<< refCC.m_cc;
cout<<" The address of m_cc in refCC is: "<< &refCC.m_cc;
cout<<" The address of refCC is: "<< &refCC;
cout<<" The value of m_cc in m_cInstance is: <<m_cInstance.m_cc;
cout<<" The address of m_cc in m_cInstance is: <<&m_cInstance.m_cc;
cout<<" The address of m_cInstance is: <<&m_cInstance;
}
我用上述兩個聲明中follwing方式的簡單類,在我的main.cpp文件:
INT cvalue = 1000; CC refCC(cvalue);
AA aaObj(refCC);
這裏是程序的輸出:
Constructor of CC
The value of m_cc in refCC is: 1001
The address of m_cc in refCC is: 0x12ff20
The address of refCC is: 0x12ff20
The value of m_cc in m_cInstance is: 1001
The address of m_cc in m_cInstance is: 0x12ff14
The address of m_cInstance is: 0x12ff14
這裏有幾點看法:
注意,在實例AA m_cInstance的地址是從refCC的地址不同。
雖然CC的實例在AA的構造函數中通過引用(refCC)傳遞,但成員變量「m_cInstance」本身是單獨實例。當創建「refCC」 CC的即使兩個不同的實例中,實例CC的
構造被調用一次存在於程序攜帶相同的狀態。
被覆蓋的賦值運算符永遠不會被調用。
我的問題很簡單:
是如何「m_cInstance」在AA的構造而不會CC或CC定義的賦值操作符的構造函數的調用創建?
如果CC包含一個句柄作爲成員變量磁盤上的文件?它在「m_cInstance」中的行爲是什麼?
謝謝,
De Costo。
1.你應該剪切和粘貼您的實際代碼的聲明。你的構造函數有語法錯誤。 2.'operator ='不是一個拷貝構造函數,它是一個賦值操作符。而且你是正確的,你的代碼永遠不會使用它。它使用拷貝構造,但是你沒有定義拷貝構造函數。 (CC)CC:CC(int&value):: m_cc(value)'應該像'CC :: CC(int&value):m_cc(value)'你在這裏輸入了代碼嗎? –
「AA:AA(CC&refCC):m_cc(refCC)」行不會編譯,因爲在類「AA」中沒有成員「m_cc」。因此,您不會發布您詢問的代碼。詢問代碼X和郵政編碼Y是非常愚蠢的。 –
@Chris:代碼已更正。 –