いつもお世話になっております。
今回質問したいことはクラスを作るときにメンバ変数をどこまでプライベートに
するのがいいのかということです。
基本的にはprivateにするべきなんでしょうし、私もとりあえずはそうしています。
しかしMFC標準のクラスでもCPointだとxやyといったメンバはpublicですよね。
こういった単純なものはpublicでもいいのでしょうか?
そのあたりのことがまだよくわかっていません。
どうかご教授お願いします。
どこまでprivateにすればいいのでしょうか
Re: どこまでprivateにすればいいのでしょうか
以下は私がprivateとpublicを使い分ける時に考えていることなので、はっきりとこれが正しいとは言えませんが、参考としてどうぞ。
私は、使う人が頻繁に値を変更し、内部での動作への影響が小さい場合は「public」としていて、クラス内部で主に使用し、内部の動作に大きくかかわる変数に対しては「private」としています。
例えば、数学のVectorクラスがあったときは、座標変数x,y,zといったものは何度も書き換えることを想定していて、それがクラスの内部での動作を変えることは無いため「public」にします。
それに対して、リソースを管理するようなクラスなどで、保持するデバイスや、リソース管理の設定をメンバ変数に持つとしたら、それをpublicにしてしまい変化させてしまうと内部での動作が明らかにおかしくなってしまいますよね?
そのためこの場合は「private」にします。
基本的にはprivateを使用するのが好ましいですが、私は「そのクラスの作成者が何度も書き換えることを想定している場合ではpublicにしても良いと思っいます。」
publicにすべきものをprivateにして、それらの値を取得・設定するのにはSetやGetのような関数が必要となります。それらの関数の呼び出しでのコストパフォーマンスが気になるのであれば、inline関数を使うのも手だと思います。
私は、使う人が頻繁に値を変更し、内部での動作への影響が小さい場合は「public」としていて、クラス内部で主に使用し、内部の動作に大きくかかわる変数に対しては「private」としています。
例えば、数学のVectorクラスがあったときは、座標変数x,y,zといったものは何度も書き換えることを想定していて、それがクラスの内部での動作を変えることは無いため「public」にします。
それに対して、リソースを管理するようなクラスなどで、保持するデバイスや、リソース管理の設定をメンバ変数に持つとしたら、それをpublicにしてしまい変化させてしまうと内部での動作が明らかにおかしくなってしまいますよね?
そのためこの場合は「private」にします。
基本的にはprivateを使用するのが好ましいですが、私は「そのクラスの作成者が何度も書き換えることを想定している場合ではpublicにしても良いと思っいます。」
publicにすべきものをprivateにして、それらの値を取得・設定するのにはSetやGetのような関数が必要となります。それらの関数の呼び出しでのコストパフォーマンスが気になるのであれば、inline関数を使うのも手だと思います。
Re: どこまでprivateにすればいいのでしょうか
返信が大変遅れて申し訳ございません。
なるほど。その変数の性質に応じて柔軟に変えていくのですね。
xyzのような単純なものならともかく、そういった判断をしていくには
少し経験が必要かもしれませんね。
大変参考になりました。ありがとうございました。
なるほど。その変数の性質に応じて柔軟に変えていくのですね。
xyzのような単純なものならともかく、そういった判断をしていくには
少し経験が必要かもしれませんね。
大変参考になりました。ありがとうございました。