类型转换
内置类型转换:将一个标准类型变量的值赋给另一个标准类型的变量时,如果这两种类型兼容,则c++自动将这个值转变为接收变量的类型。
eg:
long cout=8; //int型的8将被转换为long
double time =11; // int型的11将被转换为double
int side=3.33 //double类型的3.33将被转换为int的3
上述赋值语句都是可行的,因为在c++看来,各种数值类型都表示相同的东西——一个数字。
类的强制类型转换
#include<iostream>
#include<string>
using namespace std;
class TempData
{
public:
TempData();
TempData(int initData1);
TempData(string initData2);
TempData(bool initData3);
private:
bool data0;
int data1;
long data2;
double data3;
string data4;
};
TempData::TempData()
{
data0 = false;
data1 = 1;
data2 = 2;
data3 = 3.0;
data4 = "this is TempData";
}
TempData::TempData(int initData1) {
data1 = initData1;
data0 = false;
data2 = 2;
data3 = 3.0;
data4 = "this is TempData";
}
TempData::TempData(string initData2) {
data4 = initData2;
data0 = false;
data1 = 1;
data2 = 2;
data3 = 3.0;
}
TempData::TempData(bool initData3) {
data0 = initData3;
data1 = 1;
data2 = 2;
data3 = 3.0;
data4 = "this is TempData";
}
int main() {
TempData T1;
T1 = 6;
TempData T2;
T2 = "data2";
TempData T3;
T3 = true;
return 0;
}
对于如上代码,当一个类的构造函数中有仅有一个参数的构造函数,那么这个类可将对应的参数类型的值转换为该类。这种转换为隐式转换,对于包含多个参数的构造函数,则只有当其他参数提供默认值,仅有一个参数未提供默认值的情况下才支持这种转换。
*C++中添加关键词explicit来关闭这种隐式转换。
转换函数
上述程序提供了将数字,字符串,布尔型数据转换为TempData类型的数据,那么是否可以做相反的转换,比如将TempData转换为double类型的。此时就需要使用到特殊的C++运算符函数——转换函数。
转换函数的形式:
operator typeName();
同时注意以下几点:
- 转换函数必须是类方法
- 转换函数不能指定返回类型
- 转换函数不能有参数
比如一个int型的转换函数原型如下:
operator int();
*int型转换小数时将待转换的值四舍五入为最接近的整数