クラスや構造体について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ペキロゲン

クラスや構造体について

#1

投稿記事 by ペキロゲン » 14年前

 現在C++にてシューティングゲームを作っており、初めは龍神を参考にしていましたが、クラスを学んで以降はプログラムを少しずつ変えていっています。
そこで質問なのですが、現在はクラスと構造体の両方が混ざってるのですが、構造体はもう使わない方がよろしいのでしょうか?
 とりあえず敵のクラスを例にすると、今までは敵の座標や角度やスピード、HPやフラグ等と言ったパラメータは構造体にまとめて書いていましたが、クラスは構造体より便利だからそれならクラスを使った方が良い、そういう変数は外部で勝手に書き換えられないように何でもpublicにはしない方が良い等と聞きました。
 またその場合はクラス内でもpublicには書かず、やはり全部privateかprotecedに書いた方がよろしいのでしょうか?
 そうすると、他のクラスでそれらの変数の受け渡しをする際、変数一つ一つに対して自身の値を返す関数と受け渡す関数を作らないといけなくなり、かなりめんどくさくなるような気がします。
 クラスを使うなら構造体はもう使わない方が良いか、変数は出来る限りprivateにした方が良いか教えてください!

たかぎ
記事: 328
登録日時: 14年前
住所: 大阪
連絡を取る:

Re: クラスや構造体について

#2

投稿記事 by たかぎ » 14年前

構造体というのは、クラスキーにstructを使った一種のクラスです。
おそらく質問の意図は、そういう話ではなく、Cと同様の構造体を使うべきかどうかということですよね?
もう少し条件を緩めて集成体を使うべきかどうかと考えてもよいかもしれません。

集成体を使った方が便利な状況というのは少なからずありますので、一切禁止にするのはやりすぎです。
また、データメンバはできるかぎりprivateにするかどうかですが、集成体にするのでなければ、publicやprotectedではなくprivateにするのが基本です。

アバター
GRAM
記事: 164
登録日時: 14年前
住所: 大阪

Re: クラスや構造体について

#3

投稿記事 by GRAM » 14年前

ペキロゲン さんが書きました:現在はクラスと構造体の両方が混ざってるのですが、構造体はもう使わない方がよろしいのでしょうか?
そんなことはないでしょう。
便利な時に便利なほうを使う。これでよいのではないでしょうか?
メンバ変数をどうするか(publicにするかprivateにするか)によって使い分ければいいと思います。
(たとえば自分はベクトルや座標データなどそもそもデータを直接書き換えるようなものは構造体にしています。)
ただpublic(protected)なメンバ変数とprivateなメンバ変数が同じクラス(構造体)に一緒にいるのは個人的には避けたいです

ペキロゲン さんが書きました:publicには書かず、やはり全部privateかprotecedに書いた方がよろしいのでしょうか?
たかぎさんもおっしゃっていますが、「publicにしない」ではなく「publicにもprotectedにもしない」ほうが基本だと思います。
継承を使ってしまえば派生クラスであたかもpublicなメンバのように自由に書き換えてしまえるからです。

ペキロゲン さんが書きました:そうすると、他のクラスでそれらの変数の受け渡しをする際、変数一つ一つに対して自身の値を返す関数と受け渡す関数を作らないといけなくなり、かなりめんどくさくなるような気がします。
変数一つ一つに対してアクセサを作るのはやりすぎでしょう。というのもそんなことをしてしまっては(チェック機構の埋め込み等はおいておいて)
ほとんどメンバをprivateにした意味がなくなってしまいます。
必要な時に必要なだけアクセサを作るというスタンスはどうですか?(場合によってはsetだけgetだけなど)

自分の結論だと
①別にクラスを使ったからと言って構造体とさよならする必要はない。ただし使い分けはするべき
②メンバ変数は基本的にprivate宣言するべきである

こんな感じですかね。

ぺキロゲン

Re: クラスや構造体について

#4

投稿記事 by ぺキロゲン » 14年前

返信大変おくれましたすみません;;

どうやら構造体を使わないは言いすぎだったみたいですね。
自分はクラスや構造体についても理解できてなかった部分が多かったみたいですが、
お二方のおかげで色々わかりました。ありがとうございます!

これからは場合に応じて使い分けていこうと思います^^;

閉鎖

“C言語何でも質問掲示板” へ戻る