C++であるクラスのメンバ変数を書き換えるときに、get関数でメンバ変数のポインタを取得し、そのポインタを使って値を書き換えるのはよくあることですか?

C言語関連 | プログラミング183閲覧xmlns="http://www.w3.org/2000/svg">500

ベストアンサー

1

1人がナイス!しています

ThanksImg質問者からのお礼コメント

ありがとうございます!やはりあまり見ない方法なのですね…。 自分自身まだ経験が浅くオブジェクト指向について理解が甘いところもありましたので、色々と勉強になりました。ありがとうございます。 値の書き換えの特定にconst使う方法を教えていただき大変ありがたかったのでベストアンサーにさせていただきます。 他の回答者の皆様も色々と勉強させていただきました。ありがとうございます!

お礼日時:9/17 20:50

その他の回答(9件)

1

「getter/setterを設けるのなら例外は認めず すべてのメンバに対して設けること」 という設計方針ならありえることでしょう。 そういった場合は大抵アクセッサはprivate/public 等のアクセス規制の網目をかいくぐらせるという意味 ではなく、参照型オブジェクトの不用意なやりとりに よる諸問題(ダングリング等)を防止する機能を提供 するのでしょうから。 その設計方針の是非は兎も角その原則が設定されている というのであれば、例え「値型なので無駄・無意味」だと 感じても、業務での開発ならば従わざるを得ないのか もしれません。

1人がナイス!しています

この返信は削除されました

2

これが意味するのは、メンバーを public で公開するのと何ら変わりません。 どっちやねんと突っ込みを受ける作りです。 その上司は、オブジェクト指向の考え方を理解していないのでしょう。

2人がナイス!しています

2

多分特別な事情でなく、愚かな手抜きだと思います。 実際手抜きになっていないのですが… その方がコーディングしたかどうかは別として、初めにそう書かれたせいでリファクタリングする機会を先延ばしにされてたのではないかと推測します。 一旦検修が通ってしまうと、会社としては手をつけたがらないのはわかります。 日本国内は以前は動的解析重視でしたが、最近の開発時のコーディングポリシーは静的解析で規約的に正しいを重視へ変わってきています。 リファクタリングできる機会が有れば行った方が良いと思います。

2人がナイス!しています

1

getterしかないという時点で外部からの変更を拒否しているわけで、そこを無理矢理書き換えるのはおかしいですね。 さらにいうとgetterの中身が変数とは限らない(例え基底クラスでは変数を返していたとしても)わけで、 そういう場合にそんなことをしたら何が起きるかわかりませんね(大抵はアクセス違反で止まってくれると思いますが)

1人がナイス!しています

1

いいえ、まともな思考回路の持ち主ならまずやらないことです。それは「クラス」という概念への冒涜です。

1人がナイス!しています