类型转换(静态转换:static_cast)

类型转换(静态转换:static_cast)静态转换使用方式static_cast<目标类型>(原始数据)可以进行基础数据类型转换父与子类型转换没有父子关系的自定义类型不可以转换1.普通类型#define_CRT_SECURE_NO_WARNINGS#include<iostream>using

大家好,欢迎来到IT知识分享网。

静态转换

  • 使用方式  static_cast< 目标类型>(原始数据)
  • 可以进行基础数据类型转换
  • 父与子类型转换
  • 没有父子关系的自定义类型不可以转换

1.普通类型

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;

//静态转换  static_cast<要转成的类型>(待转变量);
//基础类型
void test01()
{
    char a = 'a';
    double d = static_cast<double>(a);
    cout << typeid(d).name() << endl;
}

int main()
{
    test01();
    system("Pause");
    return 0;
}

结果:

类型转换(静态转换:static_cast)

2.父子关系

取地址*转换

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;

//静态转换  static_cast<目标类型>(原始对象);
//1.基础类型转换
void test01()
{
    char a = 'a';
    double d = static_cast<double>(a);
    cout << typeid(d).name() << endl;
}
//2.父子之间转换
class Base{};
class Child:public Base{};
class Other{};
void test02()
{
    Base* base = NULL;
    Child* child = NULL;
    //把Base转成Child 向下转换 不安全
    Child* c2 = static_cast<Child*>(base);

    //把Child转成Base 向上转型 安全
    Base* b2 = static_cast<Base*>(child);

    //转Other类型
    Other* other = static_cast<Other*>(base); //error 类型转换无效 因为它们没有父子关系
}
int main()
{
    test02();
    //test01();
    system("Pause");
    return 0;
}

应用转换

    Animal ani_ref;
    Dog dog_ref;
    //继承关系指针转换
    Animal& animal01 = ani_ref;
    Dog& dog01 = dog_ref;
    //子类指针转成父类指针,安全
    Animal& animal02 = static_cast<Animal&>(dog01);
    //父类指针转成子类指针,不安全
    Dog& dog02 = static_cast<Dog&>(animal01);

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/33214.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信