4

私は、基本派生クラスの関係に疑問を持っています。

基本クラスからクラスを派生させると、派生クラスには基本クラスに関するすべての情報が含まれます。しかし、基本クラスは派生クラスについて何も知りません。

では、なぜこれが受け入れられるのでしょうか。

Base *b=new Derived();

ではない

Derived *d=new Base();.

基本的に、最初のステートメントの必要性を理解する必要がありますか? つまり、派生クラス オブジェクトを基底クラス ポインターに代入することの用途は何ですか?

注 : これは課題ではありません。プログラミング学習の初期段階にいます。したがって、基本的には細かい部分を理解する必要があります。これが非常に基本的なものであり、既に尋ねられた質問である場合は無視してください。

4

3 に答える 3

4

あなたはあなた自身の質問に答えましたが、あなたを混乱させているのはポインターだと思います

Derived *d=new Base();

派生クラスには、基本クラスに関するすべての情報が含まれます。しかし、基本クラスは派生クラスについて何も知りません。

はい、これは派生として宣言されているためDerived *d、ベースに関するすべてを知っているはずです。しかし、重要なのは実際に作成されたものです。この場合、Base を作成new Base();し、Derivedさらに に追加することもできたBaseので、Base を Derived として使用することはできません。

ただし、この場合

Base *b=new Derived();

新しい Derived を作成します。しかし、Base から継承したものだけに関心があります。大丈夫です。

Derived は base にあるものを知っているため

.

于 2013-04-08T12:59:15.587 に答える
2

継承は「is-a」関係を定義します。Derivedhas がBase基底クラスの場合、is Derived-aBaseです。

つまり、すべてのDerivedオブジェクトを として扱うことができるためBase、これが有効になります。

Base* b = new Derived();

逆参照により、インスタンスの一部bにアクセスできます。BaseDerived

Basea は aではないため、これは逆には機能しませんDerived。以下は無効です:

Derived* d = new Base(); // NOT VALID
于 2013-04-08T12:58:14.783 に答える