2011-07-21 9 views
5

質問があります:C++でClassName instance()のクラスのインスタンスを作成するときに使用されるコンストラクタは何ですか?クラスのインスタンスを作成する

例:

#include <iostream> 

using namespace std; 

class Test 
{ 
private: 
    Test() 
    { 
     cout << "AAA" << endl; 
    } 

public: 
    Test(string str) 
    { 
     cout << "String = " << str << endl; 
    } 
}; 

int main() 
{ 
    Test instance_1(); // instance_1 is created... using which constructor ? 
    Test instance_2("hello !"); // Ok 

    return 0; 
} 

ありがとう!

答えて

11

トリッキー!デフォルトコンストラクタはprivateであるため、コンパイルが失敗することが予想されます。しかし、それはコンパイルされ、何も作成されません。理由?

Test instance_1(); 

...は単なる関数宣言です! (どちらがTestを返し、何もかかりません。)それは、変数を定義していないので、

+3

これは私が言っていたことですが、あなたは私にそれを打ち負かしました。これはC++の最も厄介な構文解析(http://en.wikipedia.org/wiki/Most_vexing_parse)です。 –

+0

最も厄介な構文解析は非常に適切な名前です!このタグhttp://stackoverflow.com/questions/tagged/most-vexing-parseの下にある質問は素晴らしい証拠です。 – tomasz

6

声明Test instance_1();は、全くのコンストラクタを呼び出すことはありません - その代わり、それはタイプTestのオブジェクトを返すinstance_1という関数を宣言しています。 0引数のコンストラクタを使用してインスタンスを作成するには、Test instance_1;を使用します。

+0

または新しいC++ 0xの構文 - >テストinstance_1 {}; – David

関連する問題