回答編集履歴

2

追記

2016/12/18 15:07

投稿

Chironian
Chironian

スコア23272

test CHANGED
@@ -73,3 +73,45 @@
73
73
  「クラス型の変数をインスタンス化せずにそのprivateメンバにアクセスすること自体はできます。」について、何が可能なのか、実際にコンパイルに通るサンプル・コードを書いてみませんか?
74
74
 
75
75
  その活動だけでも色々と明らかになることが出てくると思います。
76
+
77
+
78
+
79
+ ---
80
+
81
+ 【質問の追記に対する回答です】
82
+
83
+ まず、コードの提示、お疲れ様です。
84
+
85
+
86
+
87
+ インスタンス化=newすることのように理解されていたのですね。
88
+
89
+ そのクラスに記憶領域を割り当ててコンストラクタを呼び出すこと=インスタンス化です。
90
+
91
+ ですので、ローカル変数として割り当てる時もインスタンス化の1つです。
92
+
93
+
94
+
95
+ > C++だとカプセル化ができますが、
96
+
97
+ ゲッター、セッターを使わずに
98
+
99
+ クラスのprivateメンバを直接、そのクラスのインスタンスから
100
+
101
+ 変更したり取得したりすることが可能です。
102
+
103
+
104
+
105
+ ゲッター/セッターもメンバ関数ですから「そのクラスのインスタンスから」と同じものです。
106
+
107
+
108
+
109
+ カプセル化は情報の隠蔽とも呼ばれ、クラスの外部からアクセスする必要の無いメンバにアクセスできなくするという考え方です。C++はprivateメンバがそれに該当します。不用意に壊される心配がないので安心感がかなり出ます。
110
+
111
+ 100行程度の小さなプログラムの時は鬱陶しいだけかも知れませんが、大きなプログラムで多くのメンバが関わる、長期間メンテナンスするような時はたいへんありがたい機能です。
112
+
113
+
114
+
115
+ もちろん、折角隠したメンバに対してゲッター/セッターを設けて全て公開するのは「愚か」な行為です。
116
+
117
+ 外部I/Fは少ない方が頑健なプログラムになりますので、公開するメンバを無暗に増やさないことは重要なことです。

1

微小変更

2016/12/18 15:06

投稿

Chironian
Chironian

スコア23272

test CHANGED
@@ -36,7 +36,7 @@
36
36
 
37
37
 
38
38
 
39
- また、そのクラスを使う人がアクセスする必要がない変数については取扱説明書に書く必要がないですね。ですのでドキュメントを減らすためにも使います。
39
+ また、そのクラスを使う人がアクセスする必要がない変数については取扱説明書に書く必要がないですね。ですのでドキュメントを減らすにも有用です。
40
40
 
41
41
 
42
42