C++子类和基类的相互转换
1️⃣基类对象指针可以隐式转换为子类对象指针
2️⃣子类对象转换为基类对象,基类必须存在虚函数表,不然访问报错。
#include<iostream>
using namespace std;
//基类
class Base
{
public:
Base() {}
~Base() {}
virtual void fun() {
cout << "base fun"<<endl;
}
private:
string str;
};
//子类
class Sub :public Base{
public:
Sub() {}
~Sub() {}
virtual void fun()
{
cout << "sub fun" << endl;
}
private:
int age;
};
int main()
{
//1.创建子类
Sub* f = new Sub;
f->fun();
//2.创建指向子类的基类指针
Base* ba = f; //基类对象指针可以隐式转换为子类对象
ba->fun(); //调用的也是子类fun
//3.创建基类对象
Base* base = new Base;
base->fun();
//4.创建指向基类的子类指针
Sub* sub = (Sub*)base; //必须是虚函数
sub->fun();
//Sub* pSub = dynamic_cast<Sub*>(base); //动态类型转换 只能用于含有虚函数的类,用于类层次间的向上(向上造型不检查)和向下(向下造型借助RTTI检查)转化。
//pSub->fun();
return 0;
}