パブリック派生クラスのオブジェクトは基本クラスのオブジェクトとして使用でき、その逆も禁止されています。
具体的には:
- 派生クラスのオブジェクトは、暗黙的に基本クラスのオブジェクトに変換できます。
- 派生クラスのオブジェクトは、基本クラスへの参照を初期化できます。
- 派生クラスのポインターは、暗黙的に基本クラスのポインターに変換できます。
基本クラスのオブジェクト名を介して、ポインターは基本クラスから継承されたメンバーのみを使用できます
次のコードには、次の3つの状況が示されています。
型変換後、基本クラスのメンバーを使用できますが、基本クラスを派生クラスのオブジェクトに変換することはできません。
#include<iostream>
using namespace std;
class A
{
public:
void show()
{
cout << "111" << endl;
}
void show1()
{
cout << "111222" << endl;
}
};
class B :public A
{
public:
void show()
{
cout << "222" << endl;
}
};
void test1(A a)
{
cout << "派生类的对象可以隐含转换为基类对象:" << endl;
a.show1();
}
void test2(A* a)
{
cout << "派生类的指针可以隐含转换为基类的指针:" << endl;
a->show1();
}
int main()
{
B b;
//派生类的对象可以隐含转换为基类对象。
test1(b);
//派生类的对象可以初始化基类的引用。
A &aa = b;
//派生类的指针可以隐含转换为基类的指针。
test2(&b);
cout << "派生类的对象可以初始化基类的引用:" << endl;
aa.show1();
system("pause");
return 0;
}