C++中的类型转换函数
1,转换构造函数可以将普通的基础类型转换为当前的类类型,也有能力将其它类类 型的对象转换为当前的类类型;
2,问题:
1,类类型是否能够类型转换到普通类型?
1,可以的;
3,类型转换函数:
1,C++ 类中可以定义类型转换函数;
2,类型转换函数用于将类对象转换为其他类型;
1,不管什么类型都可以;
3,语法规则:
1,代码示例:
operator Type () // operator 表示定义类型转换函数,Type 表示返回值,没有参数;
{ // 函数体表示普通的函数体内容;
Type ret; // ... return ret;
}
4,类型转换函数初探编程实验:
1,main.cpp 文件:
#include <iostream>
#include <string> using namespace std; class Test
{
int mValue;
public:
Test(int i = )
{
mValue = i;
}
int value()
{
return mValue;
}
operator int () // 类型转换函数;
{
return mValue;
}
}; int main()
{
Test t();
int i = t; // ==> int i = t.operator int(); 隐式调用类型转换成员函数;这里实质是隐式类型转换; cout << "t.value() = " << t.value() << endl;
cout << "i = " << i << endl; return ;
}
4,类型转换函数:
1,与转换构造函数具有同等的地位;
2,使得编译器有能力将对象转化为其它类型;
3,编译器能够隐式的使用类型转换函数;
4,编译器会尽力尝试让源码通过编译:
1,这里实质是隐式类型转换;
5,类类型之间的相互转换:
1,类型转换函数 VS 转换构造函数
2,类类型之间的转换编程实验:
1,main.cpp 文件:
#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 = )
{
mValue = i;
}
int value()
{
return mValue;
}
operator Value()
{
Value ret;
cout << "operator Value()" << endl;
return ret;
}
/*
工程上通过以下方式;
Value toValue()
{
Value ret; return ret;
}
*/
}; int main()
{
Test t();
Value v = t; // ==> t.operator value();
// Value v = t.toValue(); // 工程上针对类型转换函数来杜绝隐式类型转换的用法; return ;
}
2,编译输出:
1,当 Value 类构造函数不加 explicit 修饰时:
error: conversion from ‘Test’ to ‘Value’ is ambiguous
note: candidates are: Test::operator Value()
note: Value::Value(Test&)
2,当 Value 类构造函数加 explicit 修饰时:
1,编译通过;
3,转换构造函数和类型转换函数是互逆的,但是当遇到类类型之间的转换时,它们之间是有冲突的,编译器不知道如何选择,应该在转换构造函数之前加 explicit 修饰;
3,无法抑制隐式的类型转换函数调用;
4,类型转换函数可能与转换构造函数冲突;
1,可通过 explicit 修饰转换构造函数解决;
5,工程中以 Type toType() 的公有成员代替类型转换函数;
1,工程中一般不定义类型转换函数;
2,抑制类型转换函数调用;
3,Qt 中的示例:
#include <QDebug>
#include <QString> int main()
{
QString str = "";
int i = ;
double d = ;
short s = ; str = "-255"; /* 以下进行了类类型到基础类型之间的转换 */
i = str.toInt();
d = str.toDouble();
s = str.toShort(); qDebug() << "i = " << i << endl;
qDebug() << "d = " << d << endl;
qDebug() << "s = " << s << endl; return ;
}
5,小结:
1,C++ 类中可以定义类型转换函数;
2,类型转换函数用于将类对象转换为其它类型;
3,类型转换函数与转换构造函数具有同等的地位;
4,工程中以 Type toType() 的公有成员代替类型转换函数;
C++中的类型转换函数的更多相关文章
- C++解析(25):关于动态内存分配、虚函数和继承中强制类型转换的疑问
0.目录 1.动态内存分配 1.1 new和malloc的区别 1.2 delete和free的区别 2.虚函数 2.1 构造函数与析构函数是否可以成为虚函数? 2.2 构造函数与析构函数是否可以发生 ...
- Arduino中数据类型转换 int转换为char 亲测好使,itoa()函数
由于博主最近在做一个项目,需要采集不同传感器的数据,包括float型的HCHO,以及int型的PM2.5数据.但是最终向服务器上传的数据都得转换为char型才能发送,这是借鉴了一个github上面的实 ...
- Arduino中数据类型转换 float/double转换为char 亲测好使,dtostrf()函数
如何轻松玩转Arduino单片机,当我在进行数据转换的时候,遇到了问题,尝试了C语言和C++中的好多函数,都没有达到将float型数据转换为char型的目的.苦苦查阅资料后,终于找到了一个大神级函数! ...
- 【编程开发】 C与C++中的关于函数指针的强制类型转换与指针函数的关系
[编程开发] C与C++中的关于函数指针的强制类型转换与指针函数的关系 标签: [编程开发] [VS开发] 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 以 ...
- Entity Framework 6 Recipes 2nd Edition(10-5)译 -> 在存储模型中使用自定义函数
10-5. 在存储模型中使用自定义函数 问题 想在模型中使用自定义函数,而不是存储过程. 解决方案 假设我们数据库里有成员(members)和他们已经发送的信息(messages) 关系数据表,如Fi ...
- Sql Server函数全解<三>数据类型转换函数和文本图像函数
阅读目录 一:数据类型转换函数 二:文本和图像函数 一:数据类型转换函数 在同时处理不同数据类型的值时,SQL Server一般会自动进行隐士类型转换.对于数据类型相近的值是有效的,比如int和flo ...
- Sql Server函数全解(三)数据类型转换函数和文本图像函数
一:数据类型转换函数 在同时处理不同数据类型的值时,SQL Server一般会自动进行隐士类型转换.对于数据类型相近的值是有效的,比如int和float,但是对于其它数据类型,例如整型和字符类型,隐士 ...
- mysql中字段类型转换排序
表中字段server_id是varchar类型,现在我们查询数据时想以server_id排一下序,排序后的结果 select server_id from cardserver where game_ ...
- [daily][optimize] 一个小python程序的性能优化 (python类型转换函数引申的性能优化)
前天,20161012,到望京面试.第四个职位,终于进了二面.好么,结果人力安排完了面试时间竟然没有通知我,也没有收到短信邀请.如果没有短信邀请门口的保安大哥是不让我进去大厦的.然后,我在11号接到了 ...
随机推荐
- python进行两个大数相加
python进行两个大数相加:由于int类型32位或64位都有长度限制,超出会内存溢出,无法计算,那么解决方法如下: 思路: 1.将超长数转换成字符串 2.进行长度补零,即让两个要计算的字符串长度一样 ...
- wireshark 抓包加密
使用openssl 加密传输数据 #是否使用SLL连接,1是使用SSLCon=1 配置文件配置是否开启ssl
- 对OpenStack运维架构的总结(转)
这里,仅从技术角度出发,谈谈OpenStack云平台在部署.架构和运维实施等方面的感想. 缘起,在2014年大二首次接触到OpenStack,当时国内外资料远没有当前这么丰富,为安装一个OpenSta ...
- canvas 绘制二次贝塞尔曲线
代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- TLSv网络安全标准,会话加密协议展望未来
本文是关于TLSv1.3采用的三部分系列的第三部分也是最后一部分.它解决了网络加密和监控的选项,包括备用会话加密协议. 通过TLSv1.3的批准,并在IETF出版物队列中,是时候考虑部署选项和障碍,并 ...
- JSP页面中<%!%>与<%%>与<%=%>详解
首先,我们要了解jsp运行原理.JSP的本质就是一个Servlet,JSP的运行之前会先被Tomcat服务器翻译为.java文件,然后在将.java文本编译 为.class文件,而我们在访问jsp时, ...
- C#基础提升系列——C#任务同步
C#任务同步 如果需要共享数据,就必须使用同步技术,确保一次只有一个线程访问和改变共享状态.如果不注意同步,就会出现争用条件和死锁. 不同步导致的线程问题 如果两个或多个线程访问相同的对象,并且对共享 ...
- Halo(九)
跨域问题 域名A(http://www.a.com)的 Web 应用程序中, 通过标签引入了域名B(http://ww.b.com)站点的某图片资源(http://www.b.com/image.jp ...
- 微信小程序中的自定义组件 以及 相关的坑
Step1 我们初始化一个小程序(本示例基础版本库为 1.7 ),删掉里面的示例代码,并新建一个 components 文件夹,用于存放我们以后开发中的所用组件,今天我们的目的是实现一个 首页 组件, ...
- postman-Runner
postman Runner配置 preview查看参数