2016-08-09 7 views
6

私はC++を新しくしています。とても愚かな質問をして申し訳ありませんが、C++の例外処理メカニズムのthrow文と混同しています。C++例外と混同する

  • 以下のコードでは、名前が のクラス名に一致する関数を呼び出すのはなぜですか?
  • コンストラクタですか?
  • class Exceptのインスタンスを作成していますか?

私はそこの構文を理解していないです。

class A 
{ 
public: 
    class Except{}; 
    void foo() { throw Except(); } 
}; 

int main() 
{ 
    A a; 
    try 
    { 
    a.foo();  
    } 
    catch(Except E)//exception handler 
    { 
    cout << "Catched exception" << endl;  
    } 
} 
+1

はいデフォルトのコンストラクタを使用して「例外」のインスタンスを作成していますが、引数はありません。 – CoryKramer

+7

あなたが学んでいるように。 const参照、例えば 'catch(const Except&E)'で例外をキャッチします。 –

答えて

5

それはコンストラクタですか?

はい。

Exceptクラスのインスタンスを作成していますか?

もう一度。これらのステートメントはどちらも真です。 classnameは、クラスの名前である

classname(arguments) 

は、適切なクラスのコンストラクタに任意argumentsを渡し、このクラスのインスタンスを構築します。

もちろん、コンストラクタは名前がクラス名と同じクラスメソッドです。それで、あなたの質問の両方が同じ答え、「はい」を持っているのです。

これは、クラスの一時インスタンスを作成します。通常、classnameは、このクラスのインスタンスを表す変数を宣言するために使用されますが、この構文は、式の末尾(通常は)で破棄されるクラスの一時インスタンスを作成します。クラスのインスタンスを別の関数に渡すだけであれば、別の変数は必要ありません(例外を投げることもこのカテゴリに当てはまります)。

+0

確認済み...ありがとうございました。 – user2746926