C++11提供了四种模板类用来转型。
1. const_cast
它可以改变常量属性,将常量指针/应用/对象转化为非常量对象。它发生在编译器。
2. static_cast
它用于一些常见类型的转换,如char->int或者double->int。在类这块,它可以安全的实现将派生类指针转化为父类指针。
3. dynamic_cast
它主要用于将父类指针/引用转化为子类指针/引用,它发生在运行时期。主要用于安全的向下转换。
4. reinterpret_cast
它主要用于无关类型的转换,它产生一个新的值,该值与原来的值有着相同的比特位。是一种不安全的类型转换,也不跨平台,应谨慎使用。
#include <bits/stdc++.h>
using namespace std;
class Base {
public:
int x;
virtual void show() {
std::cout << "this is Base" << std::endl;
}
};
class Derived: public Base {
public:
int y;
virtual void show() override {
std::cout << "this is Derived" << std::endl;
}
};
int main() {
Base* b = new Base();
b->x = 11;
Derived* d = new Derived();
d->y = 99;
b->show();
d->show();
//上行转换
Base* d2b = static_cast<Base*>(d);
d2b->show();
//下行转换
Derived* b2d = static_cast<Derived*>(b);
b2d->show();
cout << b2d->y << endl;
};