- 派生クラスオブジェクトは基本クラスオブジェクトに割り当てることができ、派生クラスオブジェクトが
base b;
derived d;
d=b;
所有するメンバーデータ(基本クラスにもそれらがある)がコピーされます。ただし、派生クラスの一部の基本クラスに値がない場合があるため、基本クラスは派生クラスに値を割り当てることができません。- 派生クラスオブジェクトは基本クラス参照を初期化できます
base& b = d
- 派生クラスオブジェクトのアドレスは、基本クラスポインターに割り当てることができます
base* pb = &d
。次に、pbは派生クラスオブジェクトの基本クラスのパブリック部分を参照するため、派生クラスの一部の基本クラスには、使用できないクラスがありません。ただし、派生クラスの一部が存在しないため、派生クラスポインターは基本クラスオブジェクトのアドレスを指すことができません。
直接基本クラスと間接基本クラス
AはBから派生、BはCから派生、CはDから派生
AはBの直接基本クラス、AはCの間接基本クラス
派生クラスを宣言するには、直接の基本クラスをリストするだけです。派生クラスは、クラス階層に沿ったすべての間接基本クラスを自動的に継承します。したがって、派生クラスには、それ自体で定義されたメンバー、直接基本クラスのすべてのメンバー、および間接基本クラスが含まれます。
#include<iostream>
using namespace std;
class son1
{
public:
son1(){
cout<<"Son1 constructor called\n";}
~son1(){
cout<<"Son1 destructor called\n";}
} ;
class son2:public son1
{
public:
son2():son1(){
cout<<"Son2 constructor called\n";}
~son2(){
cout<<"Son2 destructor called\n";}
};
class son3:public son2
{
public:
son3():son2(){
cout<<"Son3 constructor called\n";}
~son3(){
cout<<"Son3 destructor called\n";}
};
int main()
{
son3 s;
}