8

私が書いているプログラムがありますが、大きすぎません。メイン関数とは別に、さまざまなタイミングでさまざまなタスクを呼び出す約 15 の関数があります。コードはすべて 1 つのファイルで問題なく動作し、現在もそのままです。

ただし、これらの関数を main とは別のファイルに配置する方がスマート/効率的/優れたプログラミングであるかどうか、またはそれがまったく重要であるかどうかについて、誰かアドバイスがあればと思っていました。はいの場合、なぜですか? いいえの場合、なぜですか?

私は C++ の初心者ではありませんが、専門家でもありません。そのため、この質問がばかげていると思われる場合は、遠慮なく教えてください。

御時間ありがとうございます!

4

8 に答える 8

7

それらの機能の大きさに依存します。ソース ファイルのコードの長さが数百行を超え始めた場合は、機能の一部を 1 つ (または複数) の別のファイルに抽出する必要があります。

関数をその責任や抽象化のレベルに基づいて個別のセットにグループ化できる場合は、それらの線に沿って個別の物理ファイル (およびもちろんクラス) に分割することをお勧めします。たとえば、一部の関数はファイル I/O で動作し、他の関数は何らかの計算を行います。または、一部の関数はファイル I/O 内で低レベルのビット反転作業を行いますが、他の関数は前者に基づいて構築され、より抽象的な機能を実装します。

コードを分割するもう1つの理由は、関数の一部が複数のクライアントで使用されている場合ですが、これは明らかにあなたのケースには当てはまりません。(ただし、アプリが将来さらに開発および拡張された場合、これはおそらく変更される可能性があります...)

于 2010-04-19T14:26:10.310 に答える
3

類似性に基づいて、コードを異なるファイルに分割することをお勧めします。複数のクラスがある場合は、クラスごとに分割できます。他のプログラムで使用できる関数がいくつかある場合は、移植性のためにそれらを独自のファイルに入れる必要があります。

于 2010-04-19T14:28:14.720 に答える
2

関数だけに言及したので、あなたのプログラムはオブジェクト指向ではないと思います。もしそうなら、.h/.cpp ペアごとに 1 つのクラスを持つことをお勧めします。あなたの場合、それらの関数を2つ以上のサブセットにグループ化できるかどうかによって異なります。もしそうなら、私は関連する関数を別々の .cpp モジュールにまとめ、それらのプロトタイプを含む対応する .h ヘッダーを常に持っています。

これらの 15 個の関数すべてを同じモジュールに含めることは、必ずしも正しくも正しくもありません。繰り返しますが、それらがすべて強く関連している場合、それらは同じモジュールに属している必要があります。決定するもう 1 つのルールは、モジュールのサイズそのものです。1000 行以上に成長したモジュールを管理するのは難しいと思います。このしきい値は、モジュールを分割する必要があるという警告サインです。これら 2 つのことは関連しており、通常、モジュールがこれほど大きくなると、おそらく 2 つ以上の異なる関数グループも含まれます。

于 2010-04-19T14:58:38.890 に答える
1

可能な限り、ヘッダーのみのクラスを使用することに長けています。コンパイラーはこの方法でより多くの最適化を実行できるため、より効率的です。コストは、コンパイル時間が長くなることです。ただし、プログラムが単一のソースファイルに完全に含まれているという同じ利点があります。

ただし、コードを再利用する場合は、論理ユニット間で分割するのが賢明です。依存関係や論理単位に関係なく、クラス間で体系的に分割することは、悪い習慣とさえ見なされる可能性があります(Javaのような他の言語では、選択肢があまりありません...)。

于 2010-04-19T14:31:32.403 に答える
1

探している関数を見つけるためにCtrl+Fを使用する必要が生じた場合は、おそらくファイルの分割を開始する時期であると言えます。

同様に、長い関数内の特定のコードを見つけるためにCtrl+Fを使用する必要がある場合は、複数の関数に分割する (またはより簡潔なコードを作成する) 時期に来ている可能性があります。

コードを調べるのに多くの時間を費やさなければならない場合、バグを追跡するのははるかに困難になります (そして、修正に時間がかかります)。

ただし、ファイルまたは関数を分割するときはいつでも、意味のある方法でそれらを分離するようにしてください。あなただけでなく、平均的な人間にも。自分のコードを見るのは自分だけだと考えるのはばかげています。数年ぶりにプロジェクトに戻ってきたら、おそらく今とは別人になるでしょう。

于 2010-04-19T19:29:00.877 に答える
1

各関数がかなり小さいと仮定すると、ファイル間で分割するのは意味がありません.IMO.

関数が数百行のコードである場合は、分割した方がよい場合があります。主に、プログラムを拡張する場合/拡張するときに簡単になるためです。

于 2010-04-19T14:26:08.453 に答える
0

コードの一部を他のアプリケーションで再利用すると思われる場合は、その部分を別のファイル(ヘッダーと実装)に分割します。

それ以外は、IMO、気にしないでください。

M。

于 2010-04-19T17:11:39.590 に答える
0

商業的に開発されたような大規模なプログラムでは、コードが複数のファイルにまたがっていると考える人もいるかもしれません。そのファイルのサイズを想像できますか! このような優れたプラクティスを小規模なプロジェクトにまで拡張することをお勧めします。

ただし、コードに関する限り、通常、物理コードがどこにあるかはまったく違いはありません。すべてが同じ場所 (共有ライブラリ/DLL または実行可能ファイル) に配置されるためです。

于 2010-04-19T14:56:23.483 に答える