2016-04-12 7 views
0

私はデフォルトのコンストラクタの間で混乱しています。コードB ParentClass(int id)なぜこれはデフォルトのコンストラクタと見なされませんか?

なぜコードは「ISNないデフォルトコンストラクタとして考慮されるのに対し、A(int news)はデフォルトコンストラクタとはみなされない理由を私はコードAIで2つのコード、コードAとコードB

をしたことは理解していない コンパイルできますが、コードBはコンパイルできます。編集後

コード

class A{ 
public: 
    int s; 
     A(int news){ 
s = news; 
} 
    void print() 
    { 
    cout << s; 
    } 
}; 


int main() 
{ 
    A a; 
    a.print(); 

} 

コードB

class ParentClass{ 
public: 
    int id; 
    ParentClass(int id){ 
    this->id = id; 
    } 

    void print(){ 
     cout << id <<endl; 
    } 
}; 

class ChildClass:public ParentClass 
{ 
public: 
    int id; 
    ChildClass(int id):ParentClass(1) 
    { 
     this->id = id; 
    } 
}; 

int main() 
{ 
    ChildClass c(2); 
    c.print(); 
} 

答えて

5

、問題は最終的に明確になります。私の答えを書き直す。

はじめに。 C++では、デフォルトのコンストラクタは、引数を持たないコンストラクタ、またはすべての引数のデフォルト値を持ちます。追加情報が提供されていないときにオブジェクトを作成するために使用されます。例えば、上記のコードで

Default a; 
Default* p = new A; 

は、Defaultのデフォルトコンストラクタが呼び出されます。

Aの例では、A aがデフォルトのコンストラクタを呼び出すため、デフォルトコンストラクタAをコールしようとしています。このようなコンストラクタは存在しないため、コンパイルエラーが発生します。あなたが持っている唯一のコンストラクタは整数の引数を取るものであり、あなたはそれを呼び出すために、次のコードを使用することができます:2番目の例では

A a(42); 

を、あなたは -default(ユーザー提供)コンストラクタを呼び出していますChildClassChildClass c(1)は、1つの整数引数を受け入れるChildClassのコンストラクタを呼び出すため、あなたはそれを持っています。ちなみに、このChildClassコンストラクタは、ちょうど1つの整数引数をとるParentClassコンストラクタを呼び出します。

+0

だから、コードAはデフォルト以外のコンストラクタを持っていますか?なぜ私はそれを実行すると、それはデフォルトのコンストラクタがないと言うでしょうか?コードBの場合は実行されます。 – overflowhow

+2

@overflowhow、*コード*を実行しようとしていますか? – SergeyA

+0

私は、コードAを実行すると、デフォルトのコンストラクタが定義されていないというエラーが表示されます。しかし、コードBを実行すると、正常に実行されます。もう1つの質問は、デフォルトコンストラクタを持つ必要がありますか? – overflowhow

関連する問題