C++(四十五) — 类型转换(static_castdynamic_cast const_castreinterpreter_cast)

Posted eilearn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++(四十五) — 类型转换(static_castdynamic_cast const_castreinterpreter_cast)相关的知识,希望对你有一定的参考价值。

 0、总结

  (1)要转换的变量,转换前、转换后、转换后的结果。

  (2)一般情况下,避免进行类型转换。

1、_static_cast(静态类型转换,int 转换为char)

   格式:TYPE B = static_cast<TYPE>(a)

   reinterpreter_cast(重新解释类型):专门用于指针类型的转换。

void main()

    double dpi = 3.1415;
    //int num1 = dpi;//默认自动类型转换,会提示 warning
    int num2 = static_cast<int>(dpi);//静态类型转换,在编译时会做类型检查,如有错误会提示

    // char* -> int*
    char* p1 = "hello";
    int* p2 = nullptr;
    //p2 = static_cast<int*>(dpi);// 转换类型无效,
    p2 = reinterpret_cast<int *>(p1);//相当于强制类型转化,指针类型
    cout << p1 << endl;//输出字符串
    cout << p2 << endl;//输出指针的首地址

    system("pause");

 

2、dynamic_cast(动态类型转化,如子类和父类之间的多态类型转换)

#include <iostream>
using namespace std;

class Animal

public:
    virtual void cry() = 0;
;
class Dog :public Animal

public:
    virtual void cry()
    
        cout << "wangwang" << endl;
    
    void doHome()
    
        cout << "kanjia" << endl;
    
;
class Cat :public Animal

public:
    virtual void cry()
    
        cout << "miaomiao" << endl;
    
    void doHome()
    
        cout << "keai" << endl;
    
;
void playObj(Animal *base)

    base->cry();
    //运行时的类型识别,
    //父类对象转换为子类对象
    Dog *pDog = dynamic_cast<Dog*>(base);//如果不是该类型,则返回值为null
    if (pDog != NULL)
    
        pDog->doHome();
    
    Cat *pCat = dynamic_cast<Cat*>(base);//如果不是该类型,则返回值为null
    if (pCat != NULL)
    
        pCat->doHome();
    


void main()

    Dog d1;
    Cat c1;
    //父类对象转换为子类对象
    playObj(&d1);
    playObj(&c1);
    //子类对象转换为父类对象
    Animal *pBase = nullptr;
    pBase = &d1;
    pBase = static_cast<Animal *>(&d1);

    system("pause");

 

3、const_cast(去 const 属性)

   该函数把只读属性去除。

p1 = const_cast<char*>(p);

 

以上是关于C++(四十五) — 类型转换(static_castdynamic_cast const_castreinterpreter_cast)的主要内容,如果未能解决你的问题,请参考以下文章

被遗弃的多重继承(四十五)

在c++中怎么把long转换成int

完成将 toChineseNum, 可以将数字转换成中文大写的表示,处理到万级别,例如 toChineseNum(12345),返回 一万二千三百四十五

走进C++11(四十五) thread_local

类型转换函数(三十五)

四十五 常用内建模块 hashlib