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

回答編集履歴

2

記述を少し改善

2015/05/05 02:05

投稿

haru666
haru666

スコア1593

answer CHANGED
@@ -19,9 +19,11 @@
19
19
  ```
20
20
 
21
21
  staticじゃない関数でも呼び出すことができますが、止めた方がいいでしょうね…
22
- 間に処理を挟み込ることを利用できるとは思いますが、値の加工とgetterのみに絞ったクラスを別途用意して、そちらをメンバにした方が適切な気がします。
22
+ 上記のように間に処理を挟めば加工後に値変更できないメンバ変数を利用できるとは思いますが、値の加工とgetterのみに絞ったクラスを別途用意して、そちらをメンバにした方が適切な気がします。
23
23
 
24
24
  privateメンバのreadonlyな扱いを明示化したいという考え方はあると思います。
25
25
  C#ではその希望にこたえるべくreadonlyとconstが分けて実装されているぐらいですしね。
26
26
 
27
+ C++のconstは「値を書き換えないことの明示」しか実現されていません。
27
- C++のconst「値を書き換えられない」ことのみしか実現されていませんから、クラスのメンバ変数にconstを付加して「定数」とすること自体正解なのか自分にはわかりません。このあたりのこは勉強しなしてているわけではないので、直感でが…
28
+ staticではないクラスのメンバ変数にconstを付加して「定数」とすること自体正解なのか自分にはわかりません。そうする、クラスサイズが無駄に増えちゃいますね。と逆から考えると、んとなくメンバ変数にconstを付加してreadonlyのために使うとうのも、無しではない気はしま
29
+ このあたり、勉強しなおして書いているわけではないので、私の直感の話ですが。

1

誤投稿のため

2015/05/05 02:05

投稿

haru666
haru666

スコア1593

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