C++的类型转换---带你走进新手要注意的,老手也会踩的坑

9 篇文章 0 订阅
1 篇文章 0 订阅

类型转换是将一种数据类型转换成另一种数据类型。例如,如果将一个整型值赋给一个浮点类型的变量,编译器会暗地里将其转换成浮点类型,但是有时候又不会自动帮你转,而且转了之后也有可能发生数据的破坏。

C++提供了一个显示的转换语法。这种的好处时程序员会立即知道强转的类型,看不懂没关系,接下来以例子来说明

静态转换

在父类与子类中,子类可以转为基类,简称上行转换,时安全的,但是父类转成基类时是不安全的。简称下行转换,静态转换只能转基本的数据类型,类和类之间转换不建议,因为不安全。

class Animal{};
 class Dog : public Animal{};
 Animal* animal01 = NULL; 
 Dog* dog01 = NULL; 
 //子类指针转成父类指针,安全 
 Animal* animal02 = static_cast<Animal*>(dog01); 
 //父类指针转成子类指针,不安全 
 Dog* dog02 = static_cast<Dog*>(animal01);

总结:
静态转换写法:

int a;
double b;
a=static_cast<int>b

语法:数据类型 a=static_cast<转换成相同类型> b;

动态转换

动态转换专门用于转类和类之间,不能转换内置的数据类型

int a;
char b;
a=dynamic_cast<int>b //error,不可以这么写

用于类之间的上转型,下行转换会报错

class A
{
};
class B: public A
{
};
void test05()
{
    A *p=new A;
    B *q=new B;
   // q=dynamic_cast<A*>(p);父类转成子类编译器会报错
    p=dynamic_cast<B*>(q);//正确
}

常量转换

int与const int之间转换

  int *p=NULL;
    const int *q=NULL;
    p=const_cast<int *>(q);
    q=const_cast<const int*>(p);

重新解释转换

用于指针之间的转换,整数和指针之间都可。
int *a;
char *p;
p=reinterpret_cast<char *>§;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔动山霸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值