C++ 类型转换操作符(Type Conversion Operators)

1. static_cast

执行非多态的转换,用于代替C中通常的转换操作

2.dynamic_cast

    功能:将多态型别(polymorphic type)向下转型(downcast)为其实际静态类型(real static type)。
    特点:这是唯一在运行期进行检验的转型动作
    用法:你可以用它来检验某个多态对象的类型(polymorphic value)。
    示例:
#include <iostream>
using namespace std;

class Car
{
public:
    virtual void fun()
    {

    }
};
class Class_1:public Car
{
public:
    virtual void fun()
    {
        cout << "Class_1" << endl;
    }
};
class Class_2:public Car
{
public:
    virtual void fun()
    {
        cout << "Class_2" << endl;
    }
};

void isClass_1(Car* cp)
{
    Class_1* p = dynamic_cast<Class_1*> (cp);
    if(p != NULL){
        cout << "is Class_1" << endl;
    }else{
        cout << "not Class_1" << endl;
    }
}
int main()
{
    Class_1 class_1;
    Class_2 class_2;

    isClass_1(&class_1);
    isClass_1(&class_2);

    return 0;
}
    运行结果:
    is Class_1
    not Class_1

3.const_cast

    功能:用来移除变量的const或volatile限定符 
    问:我们设置const不想修改const变量的值,那我们又为什么要去const呢?
    答:我们可能调用了一个参数不是const的函数,而我们要传进去的实际参数确实const的,但是我们知道这个函数是不会对参数做修改的。于是我们就需要去除const限定,以便函数能够接受这个实际参数。
    示例:
    #include <iostream>
    using namespace std;

    void print (int *value)
    {
        cout << *value<< endl;
    }

    int main(void)
    {
        const int num = 12;

        print(const_cast<int *>(&num));
    //    print(&consatant);

        return 0;
    }

4.reinterpret_cast

注意:这些操作符取代了以往小圆括号所代表的旧式转型,能够清楚阐明转型的目的。小圆括号转型可替换dynamic_cast之外的其他三种转型,也因此你运用它时,你无法明确显示用它的确切理由。这些新式转型操作符给了编译器更多的信息,让编译器清楚知道转型的理由,并在转型失败时释出一份错误报告。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值