[過去ログ]
【初心者歓迎】C/C++室 Ver.100【環境依存OK】 [無断転載禁止]©2ch.net (1002レス)
【初心者歓迎】C/C++室 Ver.100【環境依存OK】 [無断転載禁止]©2ch.net http://mevius.5ch.net/test/read.cgi/tech/1478440682/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
525: デフォルトの名無しさん [sage] 2017/03/30(木) 03:06:01.35 ID:6sTQLdA2 http://codepad.org/KMQH3TsZ ポインタをメンバに持たせた場合のget/setの書き方が分かりません getの方は、ポインタを返すときに返した先で値を変えられないようにconstを付けたのですが、 sizePlus10のような関数を呼びたい場合に、const_castを付けて呼ぶことになってしまいました 値の変更をするのでsetを通してやるのが良いと思うのですが、何か良い書き方ありますか? また、setの方は、一括で設定させることはできるのですが、 data->id、data->sizeの値を個別に設定したい場合、何か良い書き方はありますか? コメントの部分のようにsetメンバ関数を何個も書く方法しか思いつきません http://mevius.5ch.net/test/read.cgi/tech/1478440682/525
528: デフォルトの名無しさん [sage] 2017/03/30(木) 10:48:22.67 ID:JHpE2Dpf >>525 一般論として形でただ覚えるのではなくて意味を理解しよう 理解があやしいから設計の一貫性がなく混乱してるようにみえる ・Dataをポインタで所有するのはなぜ ・ゲッター/セッターを使ってアクセスするのはなぜ ・ゲッターで返す値にconstをつけるのはなぜ ・sizePlus10がData*を受けとるのはなぜ MyClassの設計方針にあわせるならsizePlus10をDataではなくMyClassを受けとるようにして void sizePlus10(MyClass & mc) { Data newdata = { mc.getData()->id, mc.getData()->size + 10 }; mc.setData(newdata); } あるいは別の関数を作って void MyClassSizePlus10(MyClass & mc) { Data newdata = *mc.getData(); sizePLus10(&newdata); mc.setData(newdata); } これが変だとか非効率だとか思うなら MyClassの設計が要求にあってないのでそっちを変更する http://mevius.5ch.net/test/read.cgi/tech/1478440682/528
529: デフォルトの名無しさん [sage] 2017/03/30(木) 20:11:34.52 ID:irpIFLVN >>528 おまえは質問の意図を理解しよう >>525 そのsetgetでいいんじゃない?ただそのgetは俺だったらreferにするな ついでにsetget両方使えるようにdata* operator->()みたいなの実装かな。というかむしろそっちでアクセスする方向にするな あとはattachdetach作っておいてm_dataを置換できるにようにしちゃうな その手のスマートポインタは至るとこで使われてるからこんなとこで聞かずにどっかのライブラリの参考にしたら? メンバのコピーはpragma pack1でstructしておいてmemcpy http://mevius.5ch.net/test/read.cgi/tech/1478440682/529
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.030s