- ベストアンサー
クラスについて
C++を勉強中です。 本にかいてあるクラスの使い方はわかったのですが 自分でプログラムを作成していて 疑問に思ったことがあります。 クラスの変数をパブリックとかプライベートに しますよね。 使う意味はわかるし必要性もわかるのですが、個人で作っている時、 プライベートの変数って作っているのですか? オールパブリックのほうが作りやすいと思ってしまいます。 またそれならクラス自体必要ではなくなってしまいます。 ここをどう理解していけばいいのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
メソッドを用意しなくても直接参照/設定すれば、 ことが足りる場合は、パブリック/プライベートの選択は 個人の場合、難しいですね。(ルールは自分なので) あえて言えば、将来性をどの程度考慮するかでしょう。 あと、クラスの機能が変数主体(=従来の構造体のような使い方)から 機能主体(メソッドが充実)になれば、直接外部から参照/設定したい 変数は減ってきます。 そのとき、内部でしか使用しない変数は自然と プライベートになるでしょう。
その他の回答 (2)
- graphaffine
- ベストアンサー率23% (55/232)
tomojyuuさん、今晩は。「使う意味はわかるし必要性もわかる」とあるので、蛇足かもしれませんが、私自身の事を書きます。私は、個人的な趣味のための プログラムを作っています。 私は、メンバー変数をpublicにした事はありません。 クラスメンバーは整合性が取れてなければなりません よね。例えば、 class X { int* dataptr; int size; // dataptrの有効データ数を保持 }; このような場合、もしsizeをpublicにしていると、外部から変更できて、インスタンスの状態が不正になり得ますよね。 このため、私はpublicメンバーを持つクラスはまともなクラスとは思っておりません。 例え個人的なプログラムの場合で有ってもです。 多少作りにくいということは言えるかもしれませんが、それはまともなクラスを作るための当然のコストだと思っています。
お礼
回答ありがとうございます。 外部から変更しなければいい(自分のルール) と思ってしまうとプログラムが動けばよいと なってしまいますね。 graphaffineさんみたいな意見がでると思って いました。
- liar_adan
- ベストアンサー率48% (730/1515)
非常に本質的な質問だと思います。 たしかにパブリックにした方が作りやすいでしょう。 「オブジェクト指向」の観点からすると、なるべくプライベートにする方が望ましいのです。 ただ、個人で作る規模のプログラムにオブジェクト指向を採用すると、かえって効率が悪くなることがあります。 ここで「オブジェクト指向」の意味に戻って考えてみます。 オブジェクト指向は、大規模プログラミングのために開発された手法です。 小さいプログラムなら、オブジェクト指向でも、そうでなくても、プログラムは作れます。 大きいプログラムになるとオブジェクト指向が力を発揮します。 オブジェクト指向は一つの流儀です。 ある流儀にコミットする場合、 そこで言われたことはとりあえず意味がある、と思わないとやっていけないでしょう。 変数をプライベートにするのは「情報隠蔽」という、 オブジェクト指向の(実はそれ以前からの)、「作法」の一つです。 多数のプログラマが研究して、「そうした方がいい」と結論づけられました。 すぐにはわからないかもしれませんが、 情報隠蔽には意味があることは知っていてください。 将来、自分でプログラム設計をして、情報隠蔽を使ったときと使っていないときを比べれば、 どういう意味かわかるときが来ると思います。
補足
回答ありがとうございます。 大きいプログラムを分担で作る時、力を 発揮するのですね。
お礼
回答ありがとうございます。 非常にわかりやすい説明ですね。 ルールは自分なので...そうなんです。 そういうことがいいたかったのです。