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号接到了 ...
随机推荐
- Winfrom传值 分类: C# 2015-07-22 15:41 1人阅读 评论(0) 收藏
以前对WinForm窗体显示和窗体间传值了解不是很清楚 最近做了一些WinForm项目,把用到的相关知识整理如下 A.WinForm中窗体显示 显示窗体可以有以下2种方法: Form.Show ...
- 攻防世界--logmein
测试文件:https://adworld.xctf.org.cn/media/task/attachments/a00849bb514c413f8a6526f6bb56c628 1.准备 得到信息 6 ...
- spring(三):spring中BeanPostProcessor的使用
spring中实现BeanPostProcessor的后置处理器 ApplicationContextAwareProcessor 进入该实现类内部 可以看到:该类帮我们组建IOC容器,判断我们的be ...
- 为什么需要在 React 类组件中为事件处理程序绑定this?
https://juejin.im/post/5afa6e2f6fb9a07aa2137f51 事件绑定作为回调函数参数传递给函数,丢失其上下文,执行的是默认绑定,不是隐式绑定 类声明和类表达式的主体 ...
- JS面向对象——组合使用构造函数模型与原型模型
该模型为创建自定义类型最常用的方式. <!DOCTYPE html> <html> <head> <title>组合使用构造函数模型和原型模型</ ...
- windows切换窗口和网页快捷键
alt+tab 切换窗口win+D 显示桌面,再按一下返回运来的网页win+M 所有程序最小化 网页之间切换(我用的是360) ctrl + tab 往回切 ctrl + shift +tab
- java Arrays工具类的操作
package java08; /* java.util.Arrays是一个与数组相关的工具类,里面提供了大量的静态方法,用来实现数组常见的操作 public static String toStri ...
- java 大数运算,高精度模板
转自:https://blog.csdn.net/stffer/article/details/46382949 有修改 关于BigInteger类更详细的用法请移步官方文档 package prac ...
- 前端每日实战:66# 视频演示如何用纯 CSS 创作一台咖啡机
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/rKPLMW 可交互视频 此视频是可 ...
- 什么是ppa
What is ppa? PPAs are for non standard software/updates. They are generally used by people who want ...