2016-06-18 6 views
1

、章クラス(I)、オーバーロードコンストラクタ:デフォルトのコンストラクタ:クラスのコンストラクタ、オーバーロードされたコンストラクタとオブジェクトの初期化<a href="http://www.cplusplus.com/doc/tutorial/" rel="nofollow">C++ tutorial</a>から

しかし、この例でも、特別な種類のコンストラクタを紹介します。デフォルトのコンストラクタはパラメータを取らないコンストラクタであり、オブジェクトが宣言されても引数で初期化されていないときに呼び出されるため、特殊です。上記の例では、rectbに対してデフォルトのコンストラクタが呼び出されています。でrectBがさえ括弧の空のセットで構成されていないか注意してください - 実際には、空のカッコは、デフォルトのコンストラクタを呼び出すために使用することはできません。

Rectangle rectb; // ok, default constructor called 
Rectangle rectc(); // oops, default constructor NOT called 

括弧の空集合のになるだろうからですRectcは、オブジェクト宣言ではなく関数宣言です。引数をとらず、Rectangle型の値を返す関数です。だから、

、私が理解から:

class someclass { 
    public: 
     someclass() { 
      std::cout << "Default constructor" << std::endl; 
     } 
     someclass(int arg) { 
      std::cout << "Constructor that uses passed argument (" << arg << " in this case)" << std::endl; 
     } 
}; 


int main() { 
    someclass object1; 
    //outputs "Default constructor" 

    someclass object2(1294); 
    //outputs "Constructor that uses passed argument (1294 in this case)" 
} 

しかし、どのように私はsomeclass object();として呼び出されるコンストラクタを定義していますか?私の考えはsomeclass(void) {}(これについてはわからない)または引数のデフォルト値(someclass(int arg = 1294) {})を使用していましたが、このケースはどのように正しく処理されましたか?

+2

あなたはしません。 'someclass object();'はそのチュートリアルのように関数宣言です。これは決してオブジェクトのインスタンス化ではありません。 –

答えて

0

あなたは、建設の詳細な方法を使用することができます:コンパイラは引数を取らず、工assインスタンスを返す関数の宣言であると考えているため

someclass object1 = someclass(); 

someclass object();は呼び出しません。

関連する問題