私は学校のプロジェクトに取り組んでいます。インストラクターは、すべてのコードが1つの.cppファイルに保存されていると主張しています。このファイル内に複数のクラスを定義したいと思います。私はこれを行う上で何か問題に遭遇するでしょうか?1つの.cppファイルで複数のクラスを定義することは可能ですか?
答えて
(javaのように)従う必要はありません。あなたは好きな名前のファイルにクラスを置いて名前を付けることが自由です(接尾辞の他に)。
ただし、それが良い慣行であるかどうかは別の質問です(そうではありません)。
これを追加するには、メインクラスの前に使用するクラスを配置する必要があること、またはコンパイラがそれらを見つけられないことを忘れないでください。この学校のプロジェクトは、拡張性の問題に苦しんでいる場合 – DaMacc
複数のクラスを1つのファイルに書き込む際に問題はありません。それはメンテナンススタイルの問題です。
単なるスケーラビリティ/保守性の問題;)厳密なルールはありません。
(あなたは前方宣言を使用しない限り)通常のC++の免責事項は、あなたのコンパイラが受け入れるという理由だけで、それはだという意味ではありません」、適用されるものの は、チャドは彼の仕事;-) –
はい、できます。これは簡単に確認できます。
class C
{
};
class D
{
};
int main(int argc, char**argv)
{
return 0;
}
のための給与をnegociateする必要がありますC++標準に従って許可されています」(この場合はもちろん完全に有効です) – jalf
はい、良い点です。 –
いいえあなたは問題に遭遇しません。 C++では、1つのファイルの中に複数のクラスを定義することができます。
複数のクラスを同じファイル内で宣言して定義することができます。
しかし、クラスが後で提供される別のクラスに依存する場合、注意する必要があります。クラスAが別のクラスBのメンバである場合、コンパイラはその完全な宣言を必要とするため(そのサイズを知るように)、ファイルの上位に配置する必要があります。しかし、このメンバがポインタ(しかし指し示されたクラスのサイズに依存しないサイズを持つ)であるならば、指し示されたクラスの単純な前方宣言だけで十分です。
#include
メカニズムでは、とにかく起こることです:プリプロセッサは、すべてのファイルをコンパイル中のファイルに「コピー・ペースト」します。コンパイラには、まったく同じです。
1つのファイルに複数のクラスを定義する際に問題はありません。
これは、生産システムのために特に良い習慣ではありませんが、それははいことができます宿題
の問題ではありません。これは、ネストされたクラスを作成できないため、サポートする必要があります。
class outside
{
public:
class nested
{
public:
static int x;
static int y;
int f();
int g();
};
};
通常、あなただけのクラスが非常に密接にリンクされている...場合は、単一のファイルに
を複数のクラスを置く必要があります。たとえば、あるクラスが独自のイテレータを定義している場合、そのイテレータクラスを反復処理に使用されているクラスと同じファイルに配置することが適切な場合があります。
クラスの1つは一般消費用であり、残りのクラスはそれを実装するために使用されます。たとえば、パブリッククラスに含まれる唯一のメンバーがプライベートクラスへのポインタである場合、 "pimpl"イディオムを使用する場合はこれが適用されます。この場合、private/hiddenクラスを使用するパブリッククラスに対応するソースファイルにprivate/hiddenクラスを配置することが適切な場合があります。どちらの場合も
、(例えば、イテレータ)と「プライベートヘルパー」「公共のヘルパーを」置くべきかどうかの決定(例えば、pimpl)クラスは、プロジェクト全体に対して一度作成し、一貫して従う必要があります。
私はあなたの答えが好きです。なぜなら、それは議論の余地があることです。反復子の例は、私は確かに同意します。私がこれを見たのは、私がアプリケーションの設定のためにQtのタブ付きダイアログウィンドウを作っていて、タブ用のクラスとクラスのクラスが必要なためです。私はファイルにタブを分割するためにもっと暖かく議論しているが、私は本当にそのための私のファイル構造の場所を持っていない。 – Lightbulb1
質問は、Java/C#スタイルのソース表現から来ています。 C++では、ソースコードのレイアウトは非常に異なります。 1つのソースユニット/ "cppファイル" /あなたが入れたい宣言を多く扱うことができます。しかし、ある時点で他のクラスにあなたのクラスに対処する方法を教える必要があるので、それは良い戦略ではありません。 C++では、クラスは分離された定義と宣言セクションを持つことができ、それらを異なるファイルに配置することができます。クラスの定義は、他のソースファイルと#include文で共有されるため、定義が必要なシナリオでこれらのクラスを使用できます。 1つのソースファイルでのみ使用されるクラスを扱う場合は、ソースファイルに直接隠すことができますが、他のクラスにそれらを接続する場合は、ヘッダファイルに定義を入れる必要があります。
コンパイル速度を改善するのに役立ちます。特に、コンパイル済みヘッダーを使用しているが、paresがC++標準の一部ではなく、すべてのコンパイラーが別の方法でそれらを扱うため、注意が必要です。 - あなたのコードの柔軟性。あなたの教師はこれらの事実を認識しておく必要があり...
はい、あなたは問題なくそれを行うことができます。複数のクラスまたはネストされたクラスのいずれかです。
- 1. クラスでTHを定義することは可能ですか?
- 2. tf.while_loopで複数の条件を定義することは可能ですか
- 3. 複数のクラスが1つの.cppファイルにあります
- 4. 関数を定義して、引数の1つを上書きすることは可能ですか?
- 5. RDFSでクラスのインスタンスを定義することは可能ですか?
- 6. 1つのファイルに複数のyamlファイルをインポートすることは可能ですか?
- 7. RailsのeRubyテンプレートで定数を定義することは可能ですか
- 8. MATLABクラス定義メソッドのハンドラを変更することは可能ですか?
- 9. 複数のsetContentViewを1つのクラスに含めることは可能ですか?
- 10. クラスをdouble型javaとして定義することは可能ですか?
- 11. 複数のランチャーアクティビティを持つことは可能ですか?
- 12. 複数のJOptionPaneダイアログを持つことは可能ですか?
- 13. Javascript/Node.JS - 複数の定義を持つvarを持つことは可能ですか?
- 14. mypy:複雑なタイプのショートカットを定義することは可能ですか?
- 15. Scalaで関数の定義を出力することは可能ですか
- 16. stdClassの下で関数を定義することは可能ですか
- 17. Sitecore - 1つのノードに複数のURLを設定することは可能ですか?
- 18. hapiでグローバルベースパスを定義することは可能ですか
- 19. 複数の定義エラー:ファイルに1つ、mocファイルに1つ。
- 20. 1つのgetche()関数で複数の入力を収集することは可能ですか?
- 21. 複数の抽象クラスを拡張することは可能ですか?
- 22. 1つの.hと.mのObjective-C複数のクラス定義
- 23. Android:ファイルの色定義をcolors.xmlに含めることは可能ですか
- 24. javascriptで未定義の変数を持つ関数を実行することは可能ですか?
- 25. ステップ定義クラスに非ステップメソッドを含めることは可能ですか?
- 26. コンストラクタへの関数ポインタを定義することは可能ですか?
- 27. constexpr関数への型エイリアスを定義することは可能ですか?
- 28. 複数のモジュールを1つのファイルに定義する
- 29. Jenkinsファイルのステージフェーズで複数の条件を定義することが可能な場合は、ステージフェーズ
- 30. 複数の関数間でsqlトランザクションを1つにすることは可能ですか?
あなたは、あなたが好きなヘッダーであなたのクラスを入れて、その後のgcc -Eを実行し、インストラクターに出力を送信することができます。 (a)インストラクターがそれを読むことを拒否し、(b)標準ヘッダーからのすべての挿入が盗作警報を引き起こすので、実際にはしないでください。しかし、その出力を一度見て、それがコンパイル可能であることに注意すると、ヘッダーで行うことができるcppファイルで好きなことをすることができます。 –
インストラクターが1つのファイルを提出するように要求している場合は、プログラミング言語でそのようなことが許されていると想定するのは妥当でしょうか?あなたはこの特別なことについてあなたのインストラクターを疑う必要がありましたか? –
@Rob:私たちは答えを知っていますが、インストラクターは頻繁に "再帰呼び出しを使用せずにループのみ"という条件を課すことを考慮してください。 "再帰呼び出しのみを使用し、ループは使用しない";一般的には「片手で背中を背中に吊り下げて吊り下げる」などです。健全な教授の理由は間違いありませんが、あなたの前提が必ずしも正しかったり妥当なものではないことを意味します;-) –