回答編集履歴

2

記述を少し改善

2015/05/05 02:05

投稿

haru666
haru666

スコア1591

test CHANGED
@@ -40,7 +40,7 @@
40
40
 
41
41
  staticじゃない関数でも呼び出すことができますが、止めた方がいいでしょうね…
42
42
 
43
- 間に処理を挟み込ることを利用できるとは思いますが、値の加工とgetterのみに絞ったクラスを別途用意して、そちらをメンバにした方が適切な気がします。
43
+ 上記のように間に処理を挟めば加工後に値変更できないメンバ変数を利用できるとは思いますが、値の加工とgetterのみに絞ったクラスを別途用意して、そちらをメンバにした方が適切な気がします。
44
44
 
45
45
 
46
46
 
@@ -50,4 +50,8 @@
50
50
 
51
51
 
52
52
 
53
+ C++のconstは「値を書き換えないことの明示」しか実現されていません。
54
+
53
- C++のconstは「値を書き換えられない」ことのみしか実現されていませんから、クラスのメンバ変数にconstを付加して「定数」とすること自体正解なのか自分にはわかりません。このあたりのこは勉強しなしてているわけではないので、直感でが…
55
+ staticではないクラスのメンバ変数にconstを付加して「定数」とすること自体正解なのか自分にはわかりません。そうする、クラスサイズが無駄に増えちゃいますね。と逆から考えると、んとなくメンバ変数にconstを付加してreadonlyのために使うとうのも、無しではない気はしま
56
+
57
+ このあたり、勉強しなおして書いているわけではないので、私の直感の話ですが。

1

誤投稿のため

2015/05/05 02:05

投稿

haru666
haru666

スコア1591

test CHANGED
@@ -1,15 +1,53 @@
1
1
  一応初期化子の代入時に処理を挟むことができるので値の加工自体はできます。
2
+
3
+ ```lang-<ここに言語を入力>
4
+
5
+ class ConstValueHolder
6
+
7
+ {
8
+
9
+ private:
10
+
11
+ const int _value;
12
+
13
+ static int ModifyValue(int value)
14
+
15
+ {
16
+
17
+ return value * 2; // 加工
18
+
19
+ }
2
20
 
3
21
 
4
22
 
23
+ public:
24
+
25
+ ConstValueHolder(int value) :
26
+
27
+ _value(ModifyValue(value))
28
+
29
+ {
30
+
31
+ ;
32
+
33
+ }
34
+
35
+ };
36
+
37
+ ```
5
38
 
6
39
 
7
40
 
41
+ staticじゃない関数でも呼び出すことができますが、止めた方がいいでしょうね…
8
42
 
9
- ただ、privateメンバのreadonlyな扱い明示化した理由如何ですが、クラスの規模が大きいなら処理を値の加工とgetterのみに絞ったクラスを実装してメンバにした方が適切な気します。
43
+ 間に処理挟み込めることを利用できるとは思すが、値の加工とgetterのみに絞ったクラスを別途用意して、そちらをメンバにした方が適切な気します。
10
44
 
11
- C#だとそのあたりの希望にこたえるべくreadonlyとconstが明確に分けられているんですけどね。```lang-<ここに言語を入力>
12
45
 
13
- コード
14
46
 
15
- ```
47
+ privateメンバのreadonlyな扱いを明示化したいという考え方はあると思います。
48
+
49
+ C#ではその希望にこたえるべくreadonlyとconstが分けて実装されているぐらいですしね。
50
+
51
+
52
+
53
+ C++のconstは「値を書き換えられない」ことのみしか実現されていませんから、クラスのメンバ変数にconstを付加して「定数」とすること自体正解なのか自分にはわかりません。このあたりのことは勉強しなおして書いているわけではないので、直感ですが…