2017-09-05 10 views
3

私はしばらく疑問に思っていたことがあります。皆さんがあなたの考えを分かち合うことを願っています。私は最初にこの問題を半年前に発見しました。私はPLCによって制御されたロボットをプログラミングしました。構造化テキストでは、クラスからオブジェクトを返すためにget関数を使用しました。このようにして、ゲッターとセッターを使って、そのクラスのメンバ/変数に必要なことは何でもできます。これは、深い嘘つきのオブジェクトから何かを得るために別の機能を行う必要がなかったので、私に多くの仕事を節約しました。「組み込み」の変数やオブジェクトを取得するためにゲッターに許可されているか、一般的に使用されていますか?

私は今Qt C++で何かをプログラミングしていますが、私はこの問題に直面しています。私は今私が完全に明らかになっているかどうかはわかりません(英語の母国語ではないし、専門用語も有能ではない)ので、例を挙げて明確にしようとします。 私は配列/ベクトルクラスの学校の複数のオブジェクトを持っているとしましょう。各オブジェクトには、クラスを持つ独自の配列があります(私はプログラミングクラスではなく、生徒とのクラスを意味します)。各クラスは学生との独自の配列を持ち、もちろん名前、学生ID、年齢などを持ちます。

Now私は無作為の学生の名前を取得したいと思います。 Qt C++では、次のようなことをします:

私はいくつかのget関数を使って特定のクラスのオブジェクトを返すことができました。このようにすれば、クラス内のオブジェクトや変数を簡単に操作できます。 私はこの質問をしています:これは行く方法ですか?学校では、ゲッターやセッターの使用が重要であるため、他の人にしたくないときや変数を操作できないように教えてくれました。しかし、私がゲッターを使ってclassVector内のクラスを返すとき、私はそこで何かを操作することができます。

一般的なことは誰でも教えてください。また、for-loopsを使用してベクター内の特定のオブジェクトを見つけるのが普通のこともありますか?とても感謝しております!

乾杯、 マルタイン

+0

このリンクをお送りいただきありがとうございます。https://stackoverflow.com/questions/32625274/public-variables-bad-practice-vs-getters-and-setters-functions – NathanOliver

+0

このリンクをお送りいただきありがとうございます。それは本当に私が尋ねた質問とよく似ています。だから私が正しく理解すれば、誰もがその問題について同じことを考えないのではないか?しかしゲッターやセッターを使用しているとき、人々はどのようにこのような考えをしていますか? – MartijnKor

+0

一般的にはあなたのもののように見えます。本当に私があなたがすべきことは、あなたの「学校」に別の「student_list」を持っていて、登録されているすべての生徒がいて、そのリストから無作為な生徒を選ぶことができるということです。 – NathanOliver

答えて

1

私は理解している場合は、あなたはカプセル化を維持する方法で、(それらを読んで)オブジェクトにアクセスできるようにしたいです。あなたは、例えば、内部オブジェクトへのconst参照を返すゲッターを定義することにより、それを達成することができます。:

const std::vector<Class>& getClassVector() const { return class_vector; } 

今、あなたはそれを修正できずに、基礎となるオブジェクトへのaccesssを持っています。

たぶん、それは分裂する髪の毛であり、あなたはそれを知っているかもしれませんが、セッター/ゲッターは、人々がいつでも呼び出すことができ、変数とそれを防ぐことはできません。それらはそこにありますので、制御された方法で任意の変更を実行することができます(例えば、設定しようとしている値が期待した範囲内にあるかどうかをチェックし、そうでない場合は処理したり、設定している、オブジェクトの状態を切り替える、可能性のあるデータ競合を防ぐなど)。

関連する問題