• ベストアンサー

変数の隠蔽とは?

変数の隠蔽とは何か教えてください 隠蔽っていう日本語もいまいち分からないのですが^^;; お願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • natural
  • ベストアンサー率37% (419/1115)
回答No.1

classにおけるprivate等のことですね。 隠蔽とは即ち隠すことです。 何処から? classの外部からです。 classにおけるアクセス指定子には「private:」「protected:」「public:」の三種類があります。 このうちpublicは外部からのアクセスを全て許可する指定になりますから、構造体におけるメンバーと同様に外部からアクセスすることが出来ます。 次にprivateですが、基本的に外部からのアクセスをシャットアウトします。 つまり、この指定を受けたメンバーデータ(あるいはメンバー関数)は内部からのみのアクセスを許可します。 勿論、データからデータへのアクセスというのはありませんから、この場合同じclass内のメンバー関数からアクセスされることになります。 このようにすることによって、そのクラスで定義された、決まった手続き(class内のメンバー関数)のみを通してメンバーデータに変更を与える様に制限することが出来るのです。 即ち、これをデータの隠蔽と呼びます。 そして、最後に残ったprotectedについてですが、これもprivateに準じます。 最大の違いは、同じclass内のみではなく、そのclassの派生クラスにもアクセスが許可されている点です。 人間に例えてみましょう。(この場合自分=class) public・・・どんな人が触っても良いもの private・・・自分のみが触って良いもの private・・・自分以外に、子供や孫も触って良いもの と言った感じです。 例えで説明されるのを嫌う向きもあるようですので、その場合後半は無視なさって下さい。

noname#6448
質問者

お礼

なるほど。 例えがあって非常に分かりやすかったです。 ありがとうございました^^

その他の回答 (1)

  • natural
  • ベストアンサー率37% (419/1115)
回答No.2

すみません、前回の誤りの訂正と補足です。 まずは訂正から。 人間に例えて、の三番目はprotectedです。 失礼しました。 次に補足ですが、データの隠蔽による効能が説明不足でした。 先程も書きましたが、privateやprotectedを指定した場合、指定されたメンバーデータやメンバー関数にアクセスするものは、同じclassやそのclassの派生classのメンバー関数に限定されます。 これによって、予想しない変数の取り扱いを防ぐことが出来るのです。 例えば、100を超える値を設定をしてはいけないメンバーデータに対して101や200といった値を設定されることを確実に防ぐことが出来るのです。 これが構造体のメンバーやpublicで指定されたメンバーデータであったらどうでしょうか。 外部のどんな関数や式で使用されるか判りませんから、その結果誤った値が設定されることもあり得るわけです。 これが隠蔽による効能です。 それともう一つ補足を。 classを定義する際に何れのアクセス指定も受けていない部分はprivate扱いとなります。 これは、classのデフォルトの属性がprivateだからです。 (ちなみにclass内では、アクセス指定子が表記された部分から次のアクセス指定子が表記されるまでが、そのアクセス指定を受けた範囲になります。)

関連するQ&A