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. k8s常用笔记

    安装docker // 安装docker $ yum install -y docker-ce // 开机启动 && 启动服务 $ systemctl enable docker &a ...

  2. NGUI的输入框制作(attach- input filed script的使用)

    一,我们添加一个sprite,给这个sprite添加一个box collider ,然后添加input filed script,如下图: 二,我们给sprite添加一个child的label,然后绑 ...

  3. Panabit的各种配置文件

    Panabit的各种配置文件 1.启动配置文件路径:/etc/rc.local作用:这个文件里的内容是BSD启动后会自动执行的命令默认配置如下:fsck -y -t ufs /dev/ad0s2a & ...

  4. 2019-1-25-WPF-ListBox-的选择

    title author date CreateTime categories WPF ListBox 的选择 lindexi 2019-01-25 21:43:17 +0800 2018-2-13 ...

  5. Linux就该这么学09学习笔记

    参考链接:https://www.linuxprobe.com/chapter-09.html 配置网卡服务 配置网卡参数 1.执行nmtui命令运行网络配置工具 2.选中Edit a connect ...

  6. css盒子模型的宽度不包括margin

    看到教程上和一些博客上盒子模型的宽度 = content + padding + margin + border,应该是不包括margin的 <!DOCTYPE html> <htm ...

  7. 【leetcode】1022. Sum of Root To Leaf Binary Numbers

    题目如下: Given a binary tree, each node has value 0 or 1.  Each root-to-leaf path represents a binary n ...

  8. Java基本数据类型及所占字节大小

    一.Java基本数据类型 基本数据类型有8种:byte.short.int.long.float.double.boolean.char 分为4类:整数型.浮点型.布尔型.字符型. 整数型:byte. ...

  9. MySQL提示:too many connections

    1.首先查询最大连接数 show variables like '%max_connections%'; 2.检查当前的连接情况: show processlist; 3.批量kill当前的连接: 通 ...

  10. pycharm之black配置for python file(代码格式化工具)

    一.介绍下black 源码;https://github.com/ambv/blackpei 二.具体步骤 第一步 安装black: 从命令行安装:例如Windows的cmd窗口,运行命令pip3 i ...