ここから本文です

(C++)メソッドの機能分割を進めていくと,メソッドをヘッダファイルとソースファ...

yos********さん

2009/6/2511:16:16

(C++)メソッドの機能分割を進めていくと,メソッドをヘッダファイルとソースファイルに分けるメリットが感じられないのですが,そういうものでしょうか.

機能分割を進めれば,一つのメソッドは短くなり,その代わりメソッドの数は増えます.メソッドの数が多いと,メソッドの宣言と定義を分けるのは大変な手間です.

閲覧数:
1,920
回答数:
3
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

B-51さん

編集あり2009/6/2514:56:06

まあ、最近のコンパイラなら、ヘッダファイルにメソッドの実体を書いたところで、オブジェクトコードが重複して実行ファイルが肥大化するなんて事も無いので、好きなようにすれば良いと思いますけどね。

実際にJavaなんかはそういう方向性な分けですし、C++でもテンプレートを使う場合はヘッダファイルに全部書くのが標準ですし。

質問した人からのコメント

2009/7/2 09:10:53

簡潔な回答でしたのでベストアンサーとします.どんな回答でも,始めに結論を回答する,これが常套手段でしょう.

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

2009/6/2614:19:58

一体どのくらいの数について多い少ないといっているのかわかりませんが、それが負担になるくらい多いとすれば数十とか百とかのメソッドを持ってしまっているのでしょうか。で、この質問のような疑問を持つということは、それが特殊な例として出てくるのではなく日常的にそうなってしまっているということでしょうか?

私の思うところでは、ヘッダとソースを分けるメリットってモジュール(C++ならクラスと言っていいのかな)のインターフェースを明らかにすることです。とすれば、privateメソッドがいくら増えたとしてもそのメリットは減ずるものではないし、publicメソッドが増えるとしたら分割のメリット云々を論ずる以前にそもそも設計を間違えているんじゃないでしょうか。ユーティリティ的なクラスならともかく、通常のオブジェクトはそんなにたくさんのpublicメソッドを持つことは少ないと思います。

また、privateメソッドがやたら増えるとしたら、水平方向の「機能分割」ではなくて垂直方向に「階層化」をしっかりして機能をくくり出して新しいクラスにまとめるなどするべき状態なのかも知れません。

あとは、「機能分割」をしすぎで粒度が細かくなりすぎていないか、とか。むやみに分割するんじゃなくて「分析」してから設計していけばそんな無茶に細かくなることはないと思うのですけど。この辺の基準は感覚に頼ることになるのかな。

他に一般に言われるヘッダとソースの分離のメリットと言えば、ソースを修正した場合の再コンパイルの手間が修正したソースだけで済む、というのもあるでしょう。このメリットもメソッドの数とは無関係。

いずれにしても、メリットを考えてもなおデメリットの方が大きい、というほどのメソッド数があるのならば、それは設計を見直した方がいいのではないか、と思います。

nog********さん

編集あり2009/6/2514:53:25

class T{
int func(){return 0;}
}
のように、関数本体をクラス定義の中に入れてしまうと、これはインライン関数になります。
インライン関数は、「呼び出し」じゃなくて、それを使う場所に「埋め込まれ」ますので、コード(実行ファイル)が巨大化します。
かと言って、インライン関数にならないように(ヘッダファイルの中に)
class T{
int func();
}
int T::func(){return 0;}
と書くと、複数のソースでこれを#includeしたとき、多重定義エラーになるはずです。(まあstaticつければいいことではありますが)

>メンバ関数の static と通常の関数の static は意味が違うのでは。。。^^;
ありゃ。そういえばそうでした。じゃあ多重定義にならないようにするにはinlineしかないのか。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる