[解決済み] パブリックデータメンバーとゲッター、セッター
質問
私は現在、QtとC++で作業しています。私はプライベートデータメンバーとパブリックメンバー関数を持っているクラスを持っています。私はクラスで利用可能なデータメンバのためのパブリックゲッターとセッターを持っています。
今、私の質問は、私たちのクラスでデータメンバのゲッターとセッターがある場合、これらのデータメンバをプライベートとして作ることに何の意味があるのでしょうか? Baseクラスでプライベートなデータメンバを持つことは論理的に聞こえることに同意します。しかし、それ以外に、プライベートメンバーを持っていて、そのゲッターとセッターを行うことは、私にとって論理的なものであるとは思えません。
あるいは、代わりに はすべての変数をパブリックにして、ゲッターとセッターを全く必要としないようにすることができますか?それを持つことは良い習慣ですか? プライベートメンバがデータの抽象化を保証することは知っていますが、ゲッターとセッターを持つことは、実際にはそれらの変数に非常に簡単にアクセスすることを可能にします。これに関するどんなポインタでも歓迎します。
どのように解決するのですか?
どちらでもありません。あなたは物事を行うメソッドを持つべきです。もしそのうちの1つが特定の内部変数に対応するのであれば、それは素晴らしいことですが、クラスのユーザーにそれを知らせるものは何もないはずです。
プライベートなデータはプライベートなので、好きなときに実装を置き換えることができます(完全なリビルドも可能ですが、それは別の問題です)。いったん精霊を瓶から出してしまうと、それを押し戻すことは不可能であることに気づくでしょう。
編集: 別の回答に対して行ったコメントの続きです。
私がここで言いたいのは、あなたは間違った質問をしているということです。ゲッター/セッターの使用やパブリック メンバーを持つことに関して、ベスト プラクティスは存在しません。あるのは、あなたの特定のオブジェクトと、それがどのように特定の現実世界のもの(またはゲームの場合はおそらく想像上のもの)をモデル化するかについて、何がベストであるかということだけです。
個人的には、ゲッター/セッターは2つの悪のうちでより少ないものです。なぜなら、いったんゲッター/セッターを作り始めると、人々は、どのデータが見えるべきで、どのデータが見えないべきかという批判的な目でオブジェクトを設計するのをやめてしまうからです。パブリックメンバーでは、すべてをパブリックにする傾向があるので、さらに悪いことです。
その代わりに、オブジェクトが何をするのか、そして何かがそのオブジェクトであることが何を意味するのかを検討します。そして、そのオブジェクトへの自然なインタフェースを提供するメソッドを作成します。その自然なインターフェイスは、ゲッターとセッターを使用していくつかの内部プロパティを公開することを含むので、それはそれでよいでしょう。しかし、重要な部分は、あなたが前もってそれについて考え、設計上正当な理由のためにゲッター/セッターを作成したことです。
関連
-
[解決済み】C++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】C-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み] Visual Studioでゲッターとセッターを生成するにはどうしたらいいですか?
-
[解決済み] C#の略記法ゲッターとセッター
-
[解決済み] なぜゲッターとセッター/アクセッサーを使うのですか?
-
[解決済み】静的定数文字列(クラスメンバ)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み] [Solved] Error C1083: Cannot open include file: 'stdafx.h'
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません