overwrite
重写,派生类具有和基类相同的函数名(参数可以一样也可能不一样)
overload
重载,具有相同作用域的相同的函数名
override
覆盖,基类有虚函数,派生类实现该虚函数
static_cast
用于编译器认可的静态转换。比如说从char 到 int, 从double 到 int, 或者具有转换构造函数,或者重载类型转换运算符
reinterpret_cast
用于编译器不 认可的静态转换,从int* 转换为 int ,在转换过程中,不做任何对齐
const_cast
去除常量性
dynamic_cast
用于动态转换,安全的向下转型。多态
C风格强制转换
会做部分对齐操作
dynamic_cast
#include <iostream>
#include <vector>
using namespace std;
class Shap
{
public:
virtual void Draw() = 0;
virtual ~Shap() {}
};
class Circle : public Shap
{
public:
void Draw()
{
cout << "Circle Draw ..." << endl;
}
};
class Square : public Shap
{
public:
void Draw()
{
cout << "Square Draw ..." << endl;
}
};
int main()
{
Shap* shap;
Circle circle;
shap = &circle;
// 1.使用dynamic_cast转换会比虚函数的开销更大
// 2.需要编译器开启运行时类型支持,如果关闭:编译会有警告,运行错误,不支持运行时类型识别
// 3.需要用在具有多态关系的继承体系上,也就是基类有虚函数
if (dynamic_cast<Circle*>(shap)) // 安全的向下转型
{
cout << "Circle ..." << endl;
Circle* cp = dynamic_cast<Circle*>(shap); // 抽象类的基类向派生类转型,安全的向下转型,运行类型检查
cp->Draw(); // 调用Circle Draw方法
}
else if (dynamic_cast<Shap*>(shap))
cout << "Shap ..." << endl;
else
cout << "Other ..." << endl;
return 0;
}