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. Windows下anaconda安装opencv

    win+R打开cmd界面,输入conda create -n opencv python=3.6,创建名为opencv的虚拟空间,然后一路y,直到安装完成. activate opencv 然后输入  ...

  2. style中各种选择器

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 广播模式下的生产者与消费者fanout模式

    生产者 #coding=utf-8 import pika import sys connection = pika.BlockingConnection(pika.ConnectionParamet ...

  4. C#设计模式:策略者模式(Stragety Pattern)

    一,什么是策略模式? 1,针对同一命令或行为,不同的策略做不同的动作. 2,比如针对一组算法,将每个算法封装到具有公共接口的独立的类中,从而使它们可以相互替换.策略模式使得算法可以在不影响到客户端的情 ...

  5. RabbitMQ ——与Spring集成及exchange的direct、topic方式实现和简单队列实现

    程序整体结构 Maven依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http: ...

  6. elasticsearch 深入 —— 近似匹配

    近似匹配 使用 TF/IDF 的标准全文检索将文档或者文档中的字段作一大袋的词语处理. match 查询可以告知我们这大袋子中是否包含查询的词条,但却无法告知词语之间的关系. 思考下面这几个句子的不同 ...

  7. 安卓构架组件——向项目添加组件(Adding Components to your Project)

    在开始之前,建议阅读 应用架构指南. Before getting started, we recommend reading the Architecture Components Guide to ...

  8. 《x的奇幻之旅》:有趣的数学科普

    本书是相对比较少见的数学方面的科普书.从最简单的阿拉伯数字.加减法,一直到概率统计.微积分.群论.拓扑.微分几何,每个主题都用几千字做一些深入浅出的介绍.写的相当的有趣. 在书中又一次看到这个有趣的事 ...

  9. python如何简单的处理图片(1):打开\显示

    一提到数字图像处理,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因此, ...

  10. ansible笔记(一)--架构图以及工作原理

    一.ansible架构图 上图为ansible的基本架构,从上图可以了解到其由以下部分组成: 核心:ansible 核心模块(Core Modules):这些都是ansible自带的模块 扩展模块(C ...