teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2016/12/18 15:07

投稿

Chironian
Chironian

スコア23274

answer CHANGED
@@ -35,4 +35,25 @@
35
35
 
36
36
  しかし、日本語では曖昧でもプログラミング言語であれば厳密に表現できますから、具体的にコードを書いて頂ければ、伝わる可能性が高くなります。
37
37
  「クラス型の変数をインスタンス化せずにそのprivateメンバにアクセスすること自体はできます。」について、何が可能なのか、実際にコンパイルに通るサンプル・コードを書いてみませんか?
38
- その活動だけでも色々と明らかになることが出てくると思います。
38
+ その活動だけでも色々と明らかになることが出てくると思います。
39
+
40
+ ---
41
+ 【質問の追記に対する回答です】
42
+ まず、コードの提示、お疲れ様です。
43
+
44
+ インスタンス化=newすることのように理解されていたのですね。
45
+ そのクラスに記憶領域を割り当ててコンストラクタを呼び出すこと=インスタンス化です。
46
+ ですので、ローカル変数として割り当てる時もインスタンス化の1つです。
47
+
48
+ > C++だとカプセル化ができますが、
49
+ ゲッター、セッターを使わずに
50
+ クラスのprivateメンバを直接、そのクラスのインスタンスから
51
+ 変更したり取得したりすることが可能です。
52
+
53
+ ゲッター/セッターもメンバ関数ですから「そのクラスのインスタンスから」と同じものです。
54
+
55
+ カプセル化は情報の隠蔽とも呼ばれ、クラスの外部からアクセスする必要の無いメンバにアクセスできなくするという考え方です。C++はprivateメンバがそれに該当します。不用意に壊される心配がないので安心感がかなり出ます。
56
+ 100行程度の小さなプログラムの時は鬱陶しいだけかも知れませんが、大きなプログラムで多くのメンバが関わる、長期間メンテナンスするような時はたいへんありがたい機能です。
57
+
58
+ もちろん、折角隠したメンバに対してゲッター/セッターを設けて全て公開するのは「愚か」な行為です。
59
+ 外部I/Fは少ない方が頑健なプログラムになりますので、公開するメンバを無暗に増やさないことは重要なことです。

1

微小変更

2016/12/18 15:06

投稿

Chironian
Chironian

スコア23274

answer CHANGED
@@ -17,7 +17,7 @@
17
17
 
18
18
  外部からアクセスされたくない変数を誰かが間違ってアクセスして何かを破壊するというバグを減らすことに有効ですので、そのために使います。
19
19
 
20
- また、そのクラスを使う人がアクセスする必要がない変数については取扱説明書に書く必要がないですね。ですのでドキュメントを減らすためにも使います。
20
+ また、そのクラスを使う人がアクセスする必要がない変数については取扱説明書に書く必要がないですね。ですのでドキュメントを減らすにも有用です。
21
21
 
22
22
  > C++が初心者なので、他言語との違いを含めてアドバイスください。
23
23