类的自动转换和强制类型转换

 

类型转换

内置类型转换:将一个标准类型变量的值赋给另一个标准类型的变量时,如果这两种类型兼容,则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型转换小数时将待转换的值四舍五入为最接近的整数

猜你喜欢

转载自blog.csdn.net/a1601611709/article/details/112239944