前回のポインタ渡しはCの機能でした。そしてポインタ渡しは全く以って正しい手法で、C++でも使用可能です。
しかし、C++には更に安全な参照があります。
参照は、ポインタの構文をより直感的に、かつ安全にしたものと言えます。

参照渡しとは、オブジェクトのアドレスを関数へ渡す手法です。
……ここまではポインタと同じなのですが、構文が違います。
ポインタ渡しでは、オブジェクトのアドレスを受け取る関数の仮引数には型名*を指定しました。
参照渡しでは、オブジェクトのアドレスを受け取る関数の仮引数には型名&を指定します。

EnemyCharacter型のオブジェクトのアドレスを受け取るPowerUP2関数を書きましょう。


参照では、.演算子を使用します。
この構文が非常に重要で、参照では->や*を使用する必要が一切ありません。

参照渡しを行うには、オブジェクトのアドレスを受け取る関数の仮引数に&を指定すればよいだけです。それだけで、値渡しと全く同じように操作を行うことができます。

main関数からPowerUP2関数を呼び出してみます。


main関数側からも、Enemy1オブジェクトを渡す際に、なんらかの演算子を付けていません。
ポインタと違い、&演算子を付ける必要がないのです。
なぜなら、関数側に&が付いている時点でアドレスを関数へ渡すことが明白だからです。
よって、オブジェクト名を指定するだけで、そのオブジェクトのアドレスがコンパイラによって関数へ渡されます。

参照渡しの優れた点は、構文が値渡しとほとんど同じである点です。
違うのは、仮引数を指定するところだけで、C++では仮引数へ&を付けるか否かで値渡しか参照渡しかが決定されます。

main関数からのオブジェクトの渡し方が値渡しと同じな為、関数名を変える必要があります。main関数の処理から見れば、値渡しも参照渡しも同じ構文だからです。

オブジェクトを関数へ渡す時は、是非参照渡しを使用して下さい。煩わしいデストラクタのことを考える必要がなくなるばかりか、値渡しとほとんど同様の構文を使用することで、*を付けるか否かや、->か.かを考える必要がなくなります。