質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

226閲覧

クラスのデータメンバを管理する関数をまとめた関数について

ten9

総合スコア15

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/02/10 05:55

編集2018/02/10 06:00

クラスを書いていて、気になったことがあります。例を上げます。

C++

1class SomeThing{ 2 int num1; 3 int num2; 4 int num3; 5 ... 6public: 7 SomeThing(); 8 ~SomeThing(); 9 void setnum1(int); 10 void setnum2(int); 11 void setnum3(int); 12 ... 13};

クラスに多数のデータメンバがあり、これらに値を代入するためのメンバ関数(上の例だとsetnum1(int)他)を作るとします。このとき、これらのメンバ関数の中身が「単純に引数の値をデータメンバに代入する」という単純なもののとき、一つのメンバ関数としてまとめることはできるのでしょうか。例えば、テンプレートでsetParam<num1>(1)のようにすることはできるのでしょうか。また、メンバ関数ではない実装方法などはあるのでしょうか。
少し抽象的な質問になってしまったかもしれませんが、よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

僕ならできたとしてもやらない。意義があるとは思えないから。

許せるのはせいぜいこの程度かな。

C++

1class SomeThing{ 2 int num[3]; 3public: 4 set_at(int i, int value) { num[i] = value; } 5...

例えば、テンプレートでsetParam<num1>(1)のようにすることはできるのでしょうか。

できたとしてもやらない。privateであるはずのnum1を公開することになる。

また、メンバ関数ではない実装方法などはあるのでしょうか。

できたとしてもやらない。privateであるはずのメンバを公開することになる。

※ メンバがたっくさんあったらやりたくなるよねこんなこと。
やりたくなった時点で設計がおかしい。

投稿2018/02/10 06:05

編集2018/02/10 06:10
episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ten9

2018/02/10 06:12

確かに、僕の考えたものではカプセル化を脅かすものになってしまいますね...。ご指摘、ありがとうございます。データメンバが多くなってしまう時点で、構造体にまとめるなどして対策を取ろうと思います。 非常に勉強になります。回答、ありがとうございました。
guest

0

解決済だけどこんにちは。こんな物もあります。
https://codezine.jp/article/detail/7571
少々複雑ですが標準委員会に提出された実績のあるコードです。安全にgetter setterを省略できますよ。総合的にみてシンプルになるかは分からないけど…

投稿2018/02/12 17:26

westelh

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

westelh

2018/02/13 03:14

(まじか…著書お世話になってます…)
episteme

2018/02/13 08:56

まいどありー♪
ten9

2018/02/15 12:49

遅ればせながら読ませていただきました! 今後ともお世話になると思いますので、よろしくお願いします。
episteme

2018/02/15 12:56

ぃぇぃぇこちらこそ。 CodeZineにはぼちぼち書いてます、なんやかんやと80本ほど。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問