コピー コンストラクタと代入演算子の主な違いは、コピー コンストラクタは既存のオブジェクトのコピーを元のオブジェクトの値に影響を与えずに作成するのに役立つコンストラクタの一種であり、代入演算子はプログラム内の変数に新しい値を代入するのに役立つ演算子である点です。
コンストラクタは、オブジェクトを作成するときに初期化するための特別なメソッドです。
クラス名と同じ名前を持ち、戻り値の型はありません。
プログラマはコンストラクタを書くことで、クラスのインスタンス変数に初期値を与えることができます。
プログラム中にコンストラクタが存在しない場合は、デフォルトのコンストラクタが呼び出されます。
コピーコンストラクタは、既存のオブジェクトのコピーを作成するのに役立つコンストラクタの一種です。
一方、代入演算子は、変数に新しい値を代入するのに役立ちます。
コピーコンストラクタとは
プログラミングでは、元のオブジェクトに影響を与えずに、別のオブジェクトのコピーを作成する必要がある場合があります。
このような状況では、コピー コンストラクタが便利です。
このコンストラクタを使用すると、同じクラスの既存のオブジェクトの複製を作成できます。
以下の例を参照してください。
図1:コピーコンストラクタを使ったプログラム
Triangle クラスは base と height という二つのインスタンス変数を持っています。
8行目では、パラメータ化されたコンストラクタがあります。
このコンストラクタは2つの引数をとります。
これらの値はインスタンス変数 base と height に代入される。
13行目にはコピーコンストラクタがあります。
引数はTriangle型。
新しいオブジェクトのベース値はインスタンス変数 base に代入される。
同様に、新しいオブジェクトの高さの値はインスタンス変数heightに代入される。
さらに、calArea というメソッドがあり、面積を計算して返す。
mainメソッドでは、t1 と t2 はTriangleオブジェクトです。
t1オブジェクトはt2オブジェクトの生成時に渡されます。
コピーコンストラクタが呼び出され、t2オブジェクトが生成されます。
したがって、t2 オブジェクトの底辺と高さは、t1 オブジェクトの底辺と高さと同じになります。
最後に、両方のオブジェクトは同じ面積を持ちます。
アサインメント演算子とは
変数に新しい値を代入するには、代入演算子が便利です。
代入演算子は「=」です。
c = a + b という記述がある場合、a と b の和が c という変数に代入される。
図2:代入演算子を使ったプログラム
Numberクラスはnumというインスタンス変数を持っています。
7行目にはパラメータ無しのコンストラクタがあります。
しかし、9行目にはパラメータ付きコンストラクタがあります。
これは引数をとり、代入演算子を使ってインスタンス変数に代入しています。
12行目には、数値を表示するためのdisplayというメソッドがあります。
mainメソッドでは、num1とnum2がNumber型の2つのオブジェクトになっています。
num1とnum2を表示することで、それらのオブジェクトへの参照が得られます。
num3はNumber型です。
24行目で、num1がnum3に代入演算子で代入されています。
したがって、num3 は num1 オブジェクトを参照していることになります。
ですから、num3 を表示すると num1 の参照が得られます。
代入演算子とそのバリエーションは次のとおりです。
演算子 | 機能 | 例 | ||
= | 右オペランドを左オペランドに代入する | z = x +y |
+= | 右オペランドを左オペランドに加え、その結果を左オペランドに代入する | z += y は z = z +y と等価です |
– = | 左オペランドから右オペランドを減算し、結果を左オペランドに代入します。 | |
z -= y は次の式と同じです。 | ||
z = z -y と等価です。 | ||
右オペランドと左オペランドを乗算して、結果を左オペランドに代入します。 | ||
z Ⓐ*=y は次の式と同じです。 | ||
z = z *y | と同じです。 | |
/= | 左オペランドを右オペランドで割って、答えを左オペランドに代入します。 | |
z / = y は次の式と同じです。 | ||
z = z/y と同じです。 | ||
%= | 2つのオペランドのモジュラスを取り、左オペランドに答えを代入します。 | |
z % = y は以下と等価です。 | ||
z = z % y と等価です。 | ||
<<= | 左シフト AND 代入演算子| z << 5 は次の式と等価です。 | |
z= z <<5 | と同じです。 | |
>>= | 右シフト AND 代入演算子 | z >>5 は次のものと同等です。 |
z= z>>5 | です。 | |
&= | ビット演算子 AND 代入演算子 | z&=5 は次のように等価です。 |
z = z&5 | と同じです。 | |
^= | ビットごとの排他的 OR および代入演算子 | z ^=5 は次のものと同等です。 |
z = z^5 | です。 | |
= | ビットごとの包括的な OR および代入演算子 |
コピーコンストラクタと代入演算子の違い
定義
コピーコンストラクタは、既存のオブジェクトのコピーとして新しいオブジェクトを作成するための特殊なコンストラクタです。
これに対して、代入演算子は、変数に新しい値を代入するために使用する演算子です。
これらの定義は、コピーコンストラクタと代入演算子の基本的な違いを説明するものです。
オブジェクトによる機能性
コピーコンストラクタと代入演算子の大きな違いは、オブジェクトを扱う機能にもあります。
コピーコンストラクタは既に存在するオブジェクトで新しいオブジェクトを初期化するのに対し、代入演算子はあるオブジェクトの値を既に存在する別のオブジェクトに代入します。
使用方法
コピーコンストラクタは既存のオブジェクトのコピーを作成するのに役立ち、代入演算子は変数に新しい値を代入するのに役立ちます。
ここもコピーコンストラクタと代入演算子の違いです。
結論
コピーコンストラクタと代入演算子の違いは、コピーコンストラクタは既存のオブジェクトのコピーを元のオブジェクトの値に影響を与えずに作成するのに役立つコンストラクタの一種であり、代入演算子はプログラム内の変数に新しい値を割り当てるのに役立つ演算子であることです。