overwrite
重写,派生类具有和基类相同的函数名(参数可以一样也可能不一样)
overload
重载,具有相同作用域的相同的函数名
override
覆盖,基类有虚函数,派生类实现该虚函数
static_cast
用于编译器认可的静态转换。比如说从char 到 int, 从double 到 int, 或者具有转换构造函数,或者重载类型转换运算符
reinterpret_cast
用于编译器不 认可的静态转换,从int* 转换为 int ,在转换过程中,不做任何对齐
const_cast
去除常量性
dynamic_cast
用于动态转换,安全的向下转型。多态
C风格强制转换
会做部分对齐操作
dynamic_cast
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
#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; } |
转载请注明:Imekaku-Blog » 【C++语法实践】08-C++ overwrite,overload,override,转换方式