2016-04-25 16 views
0

私はC++を初めて使いこなし、この言語の基礎を学びます。 「派生クラスオブジェクトをインスタンス化するとコンストラクタ呼び出しの連鎖が始まります」という本でこの行を読んでいます。誰かがこの声明が意味することを説明してもらえますか?この本には説明がありませんでした。助けてください。"派生クラスオブジェクトをインスタンス化する" - C++

+2

[これ](http://ideone.com/EN9sDQ)。 – erip

+0

あなたは簡単な言葉でそれを説明することができますか?私はプログラミングにうまくいきません:( –

+2

@AjmalKhan:答えを理解できるように、もう少し時間をかけて勉強したいと思うかもしれません。 –

答えて

0

派生クラスは、別のクラスを継承するクラスです。私はあなたが相続に精通していると思います。派生クラスは基本クラスのコンストラクタを継承しますが、それを "オーバーライド"するだけです。したがって、派生クラスからオブジェクトをインスタンス化するときは、最初に基本クラスのコンストラクタが呼び出され、派生クラスのコンストラクタが呼び出されます。

+0

コンストラクタをオーバーライドすることはできません。 –

+0

私はプログラミング言語のオーバーライド用語に言及していませんでしたが、英語の用語はより多く言いました。私はそれを訂正した。 – Kapobajza

3

それはつまり、あなたは、基本クラスと派生クラスがあるとします。また、

int main() 
{ 
    B b; 
} 

だけではなく、派生クラスのコンストラクタを呼び出しますが、:

struct A 
{ 
    A() { std::cout << "constructing A\n"; } 
}; 

struct B : A 
{ 
    B() { std::cout << "constructing B\n"; } 
}; 

はその後、派生クラスをインスタンス化します基本クラスの場合:

constructing A 
constructing B 

この自動的に呼び出されるconstの「チェーン」あなたが持っている基地の数が増えると(つまり、より深いあなたの継承の木が行く)。

1

オブジェクト階層を定義して、コンストラクタの実行による影響を自分自身で観察できます。ここには工夫した例があります:

#include <iostream> 

struct A 
{ 
    A(int nValue) { 
     std::cout << "A: " << nValue << std::endl; 
    } 
}; 

struct B: public A 
{ 
    B(int nValue, double dValue) 
    : A(nValue) { 
     std::cout << "B: " << dValue << std::endl; 
    } 
}; 

struct C: public B 
{ 
    C(int nValue, double dValue, char chValue) 
    : B(nValue, dValue) { 
     std::cout << "C: " << chValue << std::endl; 
    } 
}; 

int main() 
{ 
    C cClass(5, 4.3, 'R'); 
    return 0; 
} 

あなたはもっと複雑な階層を想像できますか?他の種類のコンストラクタはどうなりますか?デストラクタはどうですか?あなたはそれのインスタンスを作成

0

instantiateに何か:

インスタンス化

...

コンクリートのインスタンスで(何かを)表すために(推移)。 Cのようなクラスベースの言語で

++あなたは青写真として働きクラスを、持っている、そしてあなたは、特定のクラスのインスタンスであるオブジェクトを持っています。

たとえば、クラスがAであるとします。 Aクラスのオブジェクトaを宣言すると、のオブジェクトAがインスタンス化されます。

関連する問題