オブジェクト
オブジェクトの型
クラスの定義とオブジェクトの生成の基本はわかっていただけたでしょうか
オブジェクトは構造体型変数のように「型」が存在しています
何の関係も無い、まったく違うクラスのオブジェクトを代入することはできませんが
同じクラスのオブジェクトであれば、オブジェクトレベルでの代入を行うことができます
class-name obj1 , obj2;
obj2 = obj1;
オブジェクトの代入は、全てのメンバがコピーされます
上の場合、obj1とobj2に物理的な関係はありません
obj2にobj1のメンバをそっくりそのままコピーしただけです
そのため、一方のメンバのデータを変更しても、もう一方のオブジェクトに影響はありません
#include <iostream>
using namespace std;
class Kitty {
public:
int i;
Kitty( int );
} p_obj(5) ;
Kitty::Kitty(int i) {
Kitty::i = i;
}
int main() {
Kitty obj(10);
cout << obj.i << '\n';
obj = p_obj;
cout << obj.i;
return 0;
}
しかし、この行為はあまり誉められたものではありません
もしメンバ変数がポインタで、あるメモリアドレスを指していた場合
二つの異なるオブジェクトが、まったく同じメモリアドレスを競合することになります
これによって、代入される前にオブジェクトが指していたメモリアドレスが解放されなくなったり
デストラクタで2度同じ領域を開放するなどの不具合が発生します
このようなミスは、C++のようなオブジェクト指向でありがちです