WEB开发网
开发学院软件开发Java C++数据类型转换 阅读

C++数据类型转换

 2012-08-10 14:20:15 来源:WEB开发网   
核心提示: 如果在编写代码的时候,如果将一个基本类型转换为一个类对象?反过来,C++数据类型转换,如何将一个类对象转换成一个基本的数据类型?什么是隐式类型转换?什么是显式类型转换?读完这边文章,你可以清楚的了解在编写C++代码过程中的这些问题,通过double转换函数,就转换成了double类型,Q1:隐式类型转换A1: 在程序

 如果在编写代码的时候,如果将一个基本类型转换为一个类对象?反过来,如何将一个类对象转换成一个基本的数据类型?什么是隐式类型转换?什么是显式类型转换?读完这边文章,你可以清楚的了解在编写C++代码过程中的这些问题。
Q1:隐式类型转换
A1: 在程序员完全不知情的情况下,编译器按照自己认为正确的方式自动帮程序员完成转换。
下面是具体说明:
int poppins;//定义一个整型变量
double p_wt = poppins;//把整型变量赋值给一个double型变量。
String str = “adfsfafa”;//这里,右边是一个char*类型指针,编译器将隐式转换成string对象。

但是我们知道,int类型的变量跟double类型的变量在内存中的存储方式是不一样的(这里不做详细介绍),这种情况下,编译器会给出一个警告,然后隐式转换把poppins的值转换成double型的值,赋给p_wt。
注意,有些基本变量之间能够隐式转换,而有些变量如果想尝试隐式转换,编译器将会报错。如:int* p_int = 10; 指针和整型不能实现隐式转换。
Q2:显示类型转换
A2:程序员自己想通过C++提供的方式来转换自己想要的类型。
下面是详细的具体说明:
First:
通过C++提供的关键字进行转换,格式:keyword<type2>(type1):
· static_cast<type2>(type1): 将type1强制转换成type2,条件是type1跟type2必须是具有某种关系,如继承关系等。
· const_cast<type2>(type1):接触type1的const属性,并转换成type2的类型。
· reinterpret_cast<type2>(type1):将指针类型type1转化成type2指针类型。如:cptr = reinterpret_cast<char *>(ptr);//cptr是char型指针,ptr是int型指针。
· dynamic_cast<type2>(type1):运行时检查,将基类type1的指针转换成派生类type2的指针,如果type2和type1没有继承关系,将返回NULL指针。
如:dynamic_cast<&Annial>(&Dog)//if class Dog is inherif from Annial,it will convert the point of Dog to Annial point, and return the Annial point; or it will return NULL point.
Second:
如果不使用强制类型转换关键字,可以使用(type1)type2的方式进行强制转换
如:(int)d_volume;// d_volume是一个double类型变量,将double变量转换成int类型变量。
Q1和Q2讨论的是基本数据类型之间,类对象之间的类型转换以及基本数据类型向类对象之间的转换,下面讲的将是如何实现类向基本类型之间的转换。
Q3: 类对象转换成基本数据类型
A3:在这里先介绍一下转换函数的概念:转换函数是一种特殊的C++操作符函数,格式为: operator typeName();
如果类定义中定义了转换函数,那么就可以利用转换函数将一个类对象转换成基本数据类型。
下面进行详细的描述:
其实转换函数是一个基本的成员函数,只是定义稍微有点特殊:
Operator double ()const
{
Return double(pound+0.5);
}
这里注意,没有返回值,没有参数
Long gone = (double)poppin;//poppin是一个类对象,通过double转换函数,就转换成了double类型,然后再转化成long类型。

Tags:数据 类型 转换

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接