3

私はC++を使用していくつかのコードを書き始めており、実験として書いている単純なタスクマネージャープログラムからこの単純なクラスメソッドを持っています。

void Task::setText(string text)
{
    if(text.length() > MIN_LENGTH)
    {
        this->text = text;
    }
}

ご覧のとおり、このメソッドは、クラス属性の長さが、私が示したコードの上で定義されtextた変数よりも長い場合、メソッドに渡された属性に設定します。MIN_LENGHTしたがって、メソッドに渡された文字列に対して条件がtrueと評価されない場合は、何かを行う必要があります。

私が購入したC++の本では、エラー処理は説明されておらず、代わりにassertどこでも使用されています。式がfalseの場合、assertはプログラムを中止するだけであり、これは入力検証を目的としているため、より良いアプローチを探しました。

この検索により、C++の例外が発生しました。そこでは、から継承するクラスを作成して例外を作成する方法について説明しますexception

良いOOPプラクティスは、すべてのクラスがプログラム内の他のクラスから独立している必要があることを示しています。では、作成したこの例外クラスをどこに配置すればよいでしょうか。同じヘッダーで、タスククラスを?それともtask.cpp、クラスのすべてのメソッドを定義する場所に配置する必要がありますか?

たぶんこれはばかげた質問ですが、安全を確保し、最初から優れたソフトウェアアーキテクチャの慣行に従いたいだけです。

4

3 に答える 3

6

推奨事項1:本を完全に読む必要があります。

すべてのエラーの場合に例外をスローする必要があるというのは真実ではありません。例外は、関数/メソッドを1000回呼び出すごとよりも少ない頻度で発生するはずです。ここでは1000は魔法の値ではありません。特に、他の数値が適切な場合があります。

言い換えると。答える必要のある最初の質問:このエラーが発生する頻度。これが頻繁に発生する可能性がある場合は、戻り値(boolまたはenumまたはint)がより適切なアプローチです。

例外を使用することにした場合は、から派生させることをお勧めしますstd::exception。プロジェクトの例外を別のファイルに配置する必要があります。いくつかのクラス、おそらく3〜10について考えてみてください。何百もの異なる例外クラスを作成するのではなく、何が起こったかの詳細を説明するデータフィールドを例外クラス内に配置することをお勧めします。

于 2012-10-05T22:20:29.303 に答える
1

例外クラスは、別の.h.cppファイルに含めることができます。そうすれば、他の何かに再利用できます。

私自身の経験則として:

アサーションは決して起こらないことのためのものですが、100%確実であることを確認するためだけにチェックします

例外は、プログラムが本番環境にあるときに発生する可能性のあるエラー処理です。

于 2012-10-05T22:20:21.540 に答える
0

C ++標準ライブラリには、使用できる多くの例外クラスが用意されています。はじめに、それらを使用することができます。あなたの場合、当てはまるのは範囲エラーのようです。
それでも独自の例外クラスを実装する場合は、宣言して実装する場所は、それらが何のためにコーディングするかによって異なります。それらがクラス固有のエラーをコードしている場合は、それらをクラスファイルに入れることができます。複数のファイルからそれらを使用する必要がある場合は、それらを独自の.cpp/.hppカップルに入れてください。

于 2012-10-05T22:20:08.437 に答える