版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_42187898/article/details/84310127
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。
学习C++编译环境:Linux
第四十二课 类型转换函数(下)类类型—>其他类型
1.问题
类类型是否能够类型转换到普通类型?用编译器测试—可以,引入新的语法规则
2.类型转换函数
C++类中可以定义类型转换函数
类型转换函数用于将类对象转换为其他类型
语法规则:
42-1 类型转换函数初探
#include <iostream>
#include <string>
using namespace std;
class Test
{
int mValue;
public:
Test(int i = 0)
{
mValue = i;
}
int value()
{
return mValue;
}
operator int()
{
return mValue;
}
};
int main()
{
Test t(100);
int i = t;
//int i = t.operator int(); //代码中是隐式类型转换
cout << "t.value() = " << t.value() << endl;
cout << "i = " << i << endl;
return 0;
}
运行结果
t.value() = 100
i = 100
类型转换函数
与转换构造函数具有同等的地位
使得编译器有能力将对象转化为其他类型
编译器能够隐式的使用类型转换函数
编译器会尽力尝试让源码通过编译
类类型之间的相互转换?!完全可以
类型转换函数VS转换构造函数
operator Value(){} VS Value(Test& t){}
当加上explicit Value(Test& t){},错误改正
42-2 类类型之间的转换
#include <iostream>
#include <string>
using namespace std;
class Test;
class Value
{
public:
Value()
{
}
explicit Value(Test& t) //转换构造函数
{
}
};
class Test
{
int mValue;
public:
Test(int i = 0)
{
mValue = i;
}
int value()
{
return mValue;
}
operator Value()//类型转换函数 Value toValue() 工程中的解决方案
{
Value ret;
cout << "operator Value()" << endl;
return ret;
}
};
int main()
{
Test t(100);
Value v = t;
return 0;
}
无法抑制隐式的类型转换函数调用
类型转换函数可能与转换构造函数冲突
工程中Type toType()的公有成员代替类型转换函数
#include <QDebug>
#include <QString>
int main()
{
QString str = "";
int i = 0;
double d = 0;
short s = 0;
str = "-255";
i = str.toInt();
d = str.toDouble();
s = str.toShort();
qDebug() << "i = " << i << endl;
qDebug() << "d = " << d << endl;
qDebug() << "s = " << s << endl;
return 0;
}
小结
C++类中可以定义类型转换函数
类型转换函数用于将类对象转换为其他类型
类型转换函数与转换构造函数具有同等的地位
工程中以Type toType()的公有成员代替类型转换函数