フェロースタッカー、初期化データメンバ参照は++
は、ヘッダファイルに次の2つの単純なクラスを考える:
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ファイルです。私は上記の二つが私のmain.cppをファイルにfollwing方法で、簡単なクラスを宣言した使用
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;
}
:
int型のcvalue = 1000; CC refCC(cvalue);
AA aaObj(refCC)。ここで
は、プログラムの出力です:インスタンスAAでm_cInstanceのアドレスが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のコンストラクタで参照(refCC)によってCCのインスタンスが渡されますが、メンバ変数 "m_cInstance"は単独のインスタンスです。 「refCC」が作成されるとCCに
インスタンスのコンストラクタは、CC 2つの異なるインスタンスが同じ状態を運ぶプログラム中に存在するにもかかわらず、一度呼び出されます。
オーバーライドされた代入演算子が呼び出されることはありません。
私の質問は簡単です:
「m_cInstanceは」CCのコンストラクタの呼び出しやCCで定義された代入演算子なしAAのコンストラクタで作成されてどのように?
そしてCCは、メンバ変数としてディスク上のファイルへのハンドルが含まれている場合
? "m_cInstance"での動作は何ですか?ありがとう、
1のような宣言を持っています。コンストラクタに構文エラーがあります。 2. 'operator ='はコピーコンストラクタではなく、代入演算子です。そしてあなたは正しいです、あなたのコードは決してそれを使用しません。コピー構成を使用しますが、コピーコンストラクターは定義していません。 –
'CC :: CC(int&value):: m_cc(value)'は 'CC :: CC(int&value):m_cc(value)'と同じでなければなりません。 –
クラス "AA"にメンバー "m_cc"がないので、 "AA:AA(CC&refCC):m_cc(refCC)"という行はコンパイルされません。したがって、あなたが求めているコードを投稿しているわけではありません。コードXとポストコードYについて質問するのはかなり愚かです。 –