代入,コピーコンストラクタの挙動が分からない部分の挙動が知りたい。
コピーコンストラクタと代入コンストラクタのコードなのですが
二つの最初のif文のif(&x == this)
やif(&x != this)
などはどのような意味なのでしょうか? コピーのif(&x == this)
がtrueの時と if(&x != this)
falseの時はその後の処理はどうなるのでしょうか?
1(例)a.operator(b);
と解釈されるのでthisはbなのでしょうか?
2a = b = c;
となって時これはエラーになりますが、エラーにならない方法はありますか?
////////////////int main部///////////////////////////////
int main(){
C t(9,"TTT");
C x(4,"AAA");
C y = x;//コピー
t = x;//代入
}
//////////////////source.cpp部////////////////////////////////
void C::view()const
{
for (int i = 0; i < num; i++)
{
cout << " [" << i << "]: "<<vec[i];
}
cout << "\n\n";
}
/*コンストラクタ*/
C::C(int x = 0, string n = "no name") : num(x), vec(new int[x]), name(n)
{
for (int i = 0; i < num; i++)
{
vec[i] = 0;
}
}
/*コピーコンストラクタ*/
C::C(const C& x)
{
cout << "コピーコンストラクタ\n";
if (&x != this)
{
num = 0;
vec = NULL;
}
else {
num = x.num;
vec = new int[num];
for (int i = 0; i < num; i++)
{
vec[i] = x.vec[i];
}
}
}
/*代入コンストラクタ*/
C& C::operator = (const C& z)
{
cout << "代入コンストラクタ\n";
if (&z != this)
{
if (z.num != num)
{
delete[] vec;
num = z.num;
vec = new int[num];
}
for (int i = 0; i < num; i++)
{
vec[i] = z.vec[i];
}
}
return *this;
}
/*ostream&*/
string C::to_string()const
{
ostringstream os;
os << "要素数: " << num << "\n";
for(int i = 0; i<num; i++)
{
os << " [" << i << "]: " << vec[i]<<"\n";
}
return os.str();
}
ostream& operator <<(ostream& os, C& x)
{
os << x.to_string();
return os;
}