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++中的类型转换函数的更多相关文章

  1. C++解析(25):关于动态内存分配、虚函数和继承中强制类型转换的疑问

    0.目录 1.动态内存分配 1.1 new和malloc的区别 1.2 delete和free的区别 2.虚函数 2.1 构造函数与析构函数是否可以成为虚函数? 2.2 构造函数与析构函数是否可以发生 ...

  2. Arduino中数据类型转换 int转换为char 亲测好使,itoa()函数

    由于博主最近在做一个项目,需要采集不同传感器的数据,包括float型的HCHO,以及int型的PM2.5数据.但是最终向服务器上传的数据都得转换为char型才能发送,这是借鉴了一个github上面的实 ...

  3. Arduino中数据类型转换 float/double转换为char 亲测好使,dtostrf()函数

    如何轻松玩转Arduino单片机,当我在进行数据转换的时候,遇到了问题,尝试了C语言和C++中的好多函数,都没有达到将float型数据转换为char型的目的.苦苦查阅资料后,终于找到了一个大神级函数! ...

  4. 【编程开发】 C与C++中的关于函数指针的强制类型转换与指针函数的关系

    [编程开发] C与C++中的关于函数指针的强制类型转换与指针函数的关系 标签: [编程开发] [VS开发] 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 以 ...

  5. Entity Framework 6 Recipes 2nd Edition(10-5)译 -> 在存储模型中使用自定义函数

    10-5. 在存储模型中使用自定义函数 问题 想在模型中使用自定义函数,而不是存储过程. 解决方案 假设我们数据库里有成员(members)和他们已经发送的信息(messages) 关系数据表,如Fi ...

  6. Sql Server函数全解<三>数据类型转换函数和文本图像函数

    阅读目录 一:数据类型转换函数 二:文本和图像函数 一:数据类型转换函数 在同时处理不同数据类型的值时,SQL Server一般会自动进行隐士类型转换.对于数据类型相近的值是有效的,比如int和flo ...

  7. Sql Server函数全解(三)数据类型转换函数和文本图像函数

    一:数据类型转换函数 在同时处理不同数据类型的值时,SQL Server一般会自动进行隐士类型转换.对于数据类型相近的值是有效的,比如int和float,但是对于其它数据类型,例如整型和字符类型,隐士 ...

  8. mysql中字段类型转换排序

    表中字段server_id是varchar类型,现在我们查询数据时想以server_id排一下序,排序后的结果 select server_id from cardserver where game_ ...

  9. [daily][optimize] 一个小python程序的性能优化 (python类型转换函数引申的性能优化)

    前天,20161012,到望京面试.第四个职位,终于进了二面.好么,结果人力安排完了面试时间竟然没有通知我,也没有收到短信邀请.如果没有短信邀请门口的保安大哥是不让我进去大厦的.然后,我在11号接到了 ...

随机推荐

  1. python进行两个大数相加

    python进行两个大数相加:由于int类型32位或64位都有长度限制,超出会内存溢出,无法计算,那么解决方法如下: 思路: 1.将超长数转换成字符串 2.进行长度补零,即让两个要计算的字符串长度一样 ...

  2. wireshark 抓包加密

    使用openssl 加密传输数据 #是否使用SLL连接,1是使用SSLCon=1 配置文件配置是否开启ssl

  3. 对OpenStack运维架构的总结(转)

    这里,仅从技术角度出发,谈谈OpenStack云平台在部署.架构和运维实施等方面的感想. 缘起,在2014年大二首次接触到OpenStack,当时国内外资料远没有当前这么丰富,为安装一个OpenSta ...

  4. canvas 绘制二次贝塞尔曲线

    代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...

  5. TLSv网络安全标准,会话加密协议展望未来

    本文是关于TLSv1.3采用的三部分系列的第三部分也是最后一部分.它解决了网络加密和监控的选项,包括备用会话加密协议. 通过TLSv1.3的批准,并在IETF出版物队列中,是时候考虑部署选项和障碍,并 ...

  6. JSP页面中<%!%>与<%%>与<%=%>详解

    首先,我们要了解jsp运行原理.JSP的本质就是一个Servlet,JSP的运行之前会先被Tomcat服务器翻译为.java文件,然后在将.java文本编译 为.class文件,而我们在访问jsp时, ...

  7. C#基础提升系列——C#任务同步

    C#任务同步 如果需要共享数据,就必须使用同步技术,确保一次只有一个线程访问和改变共享状态.如果不注意同步,就会出现争用条件和死锁. 不同步导致的线程问题 如果两个或多个线程访问相同的对象,并且对共享 ...

  8. Halo(九)

    跨域问题 域名A(http://www.a.com)的 Web 应用程序中, 通过标签引入了域名B(http://ww.b.com)站点的某图片资源(http://www.b.com/image.jp ...

  9. 微信小程序中的自定义组件 以及 相关的坑

    Step1 我们初始化一个小程序(本示例基础版本库为 1.7 ),删掉里面的示例代码,并新建一个 components 文件夹,用于存放我们以后开发中的所用组件,今天我们的目的是实现一个 首页 组件, ...

  10. postman-Runner

    postman Runner配置 preview查看参数