現在C++にてシューティングゲームを作っており、初めは龍神を参考にしていましたが、クラスを学んで以降はプログラムを少しずつ変えていっています。
そこで質問なのですが、現在はクラスと構造体の両方が混ざってるのですが、構造体はもう使わない方がよろしいのでしょうか?
とりあえず敵のクラスを例にすると、今までは敵の座標や角度やスピード、HPやフラグ等と言ったパラメータは構造体にまとめて書いていましたが、クラスは構造体より便利だからそれならクラスを使った方が良い、そういう変数は外部で勝手に書き換えられないように何でもpublicにはしない方が良い等と聞きました。
またその場合はクラス内でもpublicには書かず、やはり全部privateかprotecedに書いた方がよろしいのでしょうか?
そうすると、他のクラスでそれらの変数の受け渡しをする際、変数一つ一つに対して自身の値を返す関数と受け渡す関数を作らないといけなくなり、かなりめんどくさくなるような気がします。
クラスを使うなら構造体はもう使わない方が良いか、変数は出来る限りprivateにした方が良いか教えてください!
クラスや構造体について
Re: クラスや構造体について
構造体というのは、クラスキーにstructを使った一種のクラスです。
おそらく質問の意図は、そういう話ではなく、Cと同様の構造体を使うべきかどうかということですよね?
もう少し条件を緩めて集成体を使うべきかどうかと考えてもよいかもしれません。
集成体を使った方が便利な状況というのは少なからずありますので、一切禁止にするのはやりすぎです。
また、データメンバはできるかぎりprivateにするかどうかですが、集成体にするのでなければ、publicやprotectedではなくprivateにするのが基本です。
おそらく質問の意図は、そういう話ではなく、Cと同様の構造体を使うべきかどうかということですよね?
もう少し条件を緩めて集成体を使うべきかどうかと考えてもよいかもしれません。
集成体を使った方が便利な状況というのは少なからずありますので、一切禁止にするのはやりすぎです。
また、データメンバはできるかぎりprivateにするかどうかですが、集成体にするのでなければ、publicやprotectedではなくprivateにするのが基本です。
Re: クラスや構造体について
そんなことはないでしょう。ペキロゲン さんが書きました:現在はクラスと構造体の両方が混ざってるのですが、構造体はもう使わない方がよろしいのでしょうか?
便利な時に便利なほうを使う。これでよいのではないでしょうか?
メンバ変数をどうするか(publicにするかprivateにするか)によって使い分ければいいと思います。
(たとえば自分はベクトルや座標データなどそもそもデータを直接書き換えるようなものは構造体にしています。)
ただpublic(protected)なメンバ変数とprivateなメンバ変数が同じクラス(構造体)に一緒にいるのは個人的には避けたいです
たかぎさんもおっしゃっていますが、「publicにしない」ではなく「publicにもprotectedにもしない」ほうが基本だと思います。ペキロゲン さんが書きました:publicには書かず、やはり全部privateかprotecedに書いた方がよろしいのでしょうか?
継承を使ってしまえば派生クラスであたかもpublicなメンバのように自由に書き換えてしまえるからです。
変数一つ一つに対してアクセサを作るのはやりすぎでしょう。というのもそんなことをしてしまっては(チェック機構の埋め込み等はおいておいて)ペキロゲン さんが書きました:そうすると、他のクラスでそれらの変数の受け渡しをする際、変数一つ一つに対して自身の値を返す関数と受け渡す関数を作らないといけなくなり、かなりめんどくさくなるような気がします。
ほとんどメンバをprivateにした意味がなくなってしまいます。
必要な時に必要なだけアクセサを作るというスタンスはどうですか?(場合によってはsetだけgetだけなど)
自分の結論だと
①別にクラスを使ったからと言って構造体とさよならする必要はない。ただし使い分けはするべき
②メンバ変数は基本的にprivate宣言するべきである
こんな感じですかね。
Re: クラスや構造体について
返信大変おくれましたすみません;;
どうやら構造体を使わないは言いすぎだったみたいですね。
自分はクラスや構造体についても理解できてなかった部分が多かったみたいですが、
お二方のおかげで色々わかりました。ありがとうございます!
これからは場合に応じて使い分けていこうと思います^^;
どうやら構造体を使わないは言いすぎだったみたいですね。
自分はクラスや構造体についても理解できてなかった部分が多かったみたいですが、
お二方のおかげで色々わかりました。ありがとうございます!
これからは場合に応じて使い分けていこうと思います^^;