首先我们要先引入上行转换和下行转换的概念
所谓上行转换,即将原来的子类指针转换成父类指针;
下行转换即将原来的父类指针转换成子类指针
由于子类对象的空间较大,所以把子类强制转换父类给父类指针赋值时,父类指针对象能读取到子类对象中全部的父类数据,所以上行转换是安全的
相反,由于父类对象转换成子类对象给子类指针赋值时,无法让子类指针读到所有的子类数据,所以下行转换是不安全的
Base * base = NULL;
Child * child = NULL;
//把base*转为 Child*类型 向下 不安全
Child * child2 = static_cast<Child*>(base);
//把child 转为 Base* 向上 安全
Base * base2 = static_cast<Base*>(child);
而C++针对转换提供了4种函数
1.相当于C语言种对变量进行强制类型转换(转换类型),但不能进行无关类转换的static_cast<转换类型>(转换变量)
2.保证安全性,只能经行上行转换,且不能对基本类型(int char)和非继承类进行转换的dymatic_cast<转换类型>(转换变量)
3.只能对指针和引用进行转换的const_cast<转换类型>(转换变量)
4.不能对基本类型进行转换,但可以对无关类型及上下行转换的reinterpret_cast<转换类型>(转换变量)