ヘッダー と cpp ファイルの使いわけ


へたれ  2010-06-22 19:52:28  No: 71744

クラス、関数の内容で変わるかも知れませんが

関数のプログラム内容は "cppファイル" に書くべき?
"ヘッダーファイル" だけでも OK?

皆さんはどうしてますか?

環境:VC++6 Windows XP

--------------------------------------
プログラム例

//***************************
// ヘッダー だけの記述
//***************************

// hoge.h
class hoge
{
  int hogehoge()
  {
    return 1;
  }
}

//***************************
// ヘッダー と cpp に記述
//***************************

// hoge.h
class hoge
{
  int hogehoge();
}

// hoge.cpp
hoge::hogehoge()
{
  return 1;
}


仲澤@失業者  2010-06-22 21:37:50  No: 71745

自分は「原則として、できる限りヘッダーに記述」でやってます。

その理由
1.ヘッダーのclass内に記述された関数はインライン扱いに
    なるので、処理速度向上をやや期待できる。
2.クラス名をいちいち書かなくて良いので、コード量が減少。
    特にテンプレートなど。
3.前方参照、相互参照が、暗黙にはできなくなるので、より
    シンプルな関係のクラスに設計せざるを得なくなる。
4.メンバ関数の戻り値、引数の変更が1箇所だけになるので、
    すばやく対応できる。

デメリットとしては、
1.少しの変更が多くのソースに影響しやすいので、コンパイル時間が
    長くなりがち。
2.MFCのウイザードコードもできるだけヘッダーに展開しなおすので
    手間がかかる。
3.ヘッダーが長くなるので、そのクラスにどんな機能、関数があるのか
    把握しづらい。
4.インデントの関係でコードが右よりになりがち、デバッグのとき
    見づらい場合もある。


へたれ  2010-06-23 18:19:29  No: 71746

仲澤@失業者さん
ありがとうございます。

自分も最近はヘッダーファイルに書いてたんですが
これっていいのかな?
とか思っちゃいまして。。。

自分は仲澤ほど考えてなかったです。。。
仲澤さんの書いた
メリット
  2、4
デメリット
  3,4
位しか考えてなかったです。。。

参考にさせてもらいます。


?  2010-06-23 18:32:44  No: 71747

>1.ヘッダーのclass内に記述された関数はインライン扱いに
    なる
…絶対にそうなる?


仲澤@失業者  2010-06-23 19:21:14  No: 71748

>…絶対にそうなる?

インライン扱いだそうですが、

そもそもインラインとは、
「インライン化されることが確約されているわけではない」

という点を忘れてはなりません。
この条件はinlineキーワードで宣言しようが__forceinline
にしようが変わりません。

従って
「インライン扱いは確約されたが、インライン展開されるかどうかは不明」
ということです。
だから「やや期待できる」という表現になるわけです(vv;)。

あと、メリットに追加する項目としては

5.関数の修飾  virtual const public protected private 等が
    (その場に書いてあるので)すぐ分かる。

というのも入れても良いかも。


YuO  2010-06-23 20:52:33  No: 71749

私はヘッダにコードは出来る限り入れないですね。

作っている最中はヘッダにコードがあった方が書きやすいのかもしれませんが,使う時には実装コードが邪魔です。
あと,無名namespaceとかもヘッダに書くと大量増殖する都合上使えないなど,問題点も大きいです。

もちろん,templateなどのinline系のものはヘッダに書きますが。


maru  2010-06-24 02:40:49  No: 71750

> 皆さんはどうしてますか?
どうしてこんなことを聞いているんですか?
ファイルをヘッダ(.h)と実装(.c/.cpp)に分けている理由を考えれば
自明でしょ。
まあ、CPUが早くなったためにコンパイル時間が短くなってきているので
あまり気にしなくなっているのかな?


Na^2  2010-07-10 19:24:24  No: 71751

ヘッダにコードを書くのは違和感がありますが。
昔、クラス情報(おもに、クラス内変数)を別の管理下のクラスに送る時、
ヘッダに関数を入れるとその関数が動くので、一時期そんなことをしてました
が、やっぱ、ヘッダに処理を書くのは違和感あるなぁ・・・・

でもヘッダに書くとしたら、Set,Get系が限界。。。
やるのなら  XXX.h じゃなく XXX.cpp  で組み込みたい(単純に.hに処理を入れるのことに違和感があるだけかもね)


びびんば  2010-07-11 16:29:07  No: 71752

Java から入った人はヘッダにコードを書きたがる傾向にある気がします。


かもねぎ  2010-07-14 04:21:59  No: 71753

便利なマクロの代わりみたいなコードならヘッダー
思いつく例はintsafe.h とか・・・

それ以外は分けますね^^


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加