C++中的类型转换函数

1,转换构造函数可以将普通的基础类型转换为当前的类类型,也有能力将其它类类 型的对象转换为当前的类类型;

2,问题:

1,类类型是否能够类型转换到普通类型?

1,可以的;

3,类型转换函数:

1,C++ 类中可以定义类型转换函数;

2,类型转换函数用于将类对象转换为其他类型;

1,不管什么类型都可以;

3,语法规则:

1,代码示例:

1 operator Type ()  // operator 表示定义类型转换函数,Type 表示返回值,没有参数;
2 {    // 函数体表示普通的函数体内容;
3     Type ret;
4
5     // ...
6
7     return ret;
8 }

4,类型转换函数初探编程实验:

1,main.cpp 文件:

 1 #include <iostream>
 2 #include <string>
 3
 4 using namespace std;
 5
 6 class Test
 7 {
 8     int mValue;
 9 public:
10     Test(int i = 0)
11     {
12         mValue = i;
13     }
14     int value()
15     {
16         return mValue;
17     }
18     operator int ()  // 类型转换函数;
19     {
20         return mValue;
21     }
22 };
23
24 int main()
25 {
26     Test t(100);
27     int i = t;  // ==> int i = t.operator int(); 隐式调用类型转换成员函数;这里实质是隐式类型转换;
28
29     cout << "t.value() = " << t.value() << endl;
30     cout << "i = " << i << endl;
31
32     return 0;
33 }

4,类型转换函数:

1,与转换构造函数具有同等的地位;

2,使得编译器有能力将对象转化为其它类型;

3,编译器能够隐式的使用类型转换函数;

4,编译器会尽力尝试让源码通过编译:

1,这里实质是隐式类型转换;

5,类类型之间的相互转换:

1,类型转换函数 VS 转换构造函数

2,类类型之间的转换编程实验:

  1,main.cpp 文件:

 1 #include <iostream>
 2 #include <string>
 3
 4 using namespace std;
 5
 6 class Test;
 7
 8 class Value
 9 {
10 public:
11     Value()
12     {
13     }
14     explicit Value(Test& t)
15     {
16     }
17 };
18
19 class Test
20 {
21     int mValue;
22 public:
23     Test(int i = 0)
24     {
25         mValue = i;
26     }
27     int value()
28     {
29         return mValue;
30     }
31     operator Value()
32     {
33         Value ret;
34         cout << "operator Value()" << endl;
35         return ret;
36     }
37     /*
38     工程上通过以下方式;
39     Value toValue()
40     {
41         Value ret;
42
43         return ret;
44     }
45     */
46 };
47
48 int main()
49 {
50     Test t(100);
51     Value v = t;  // ==> t.operator value();
52     // Value v = t.toValue();  // 工程上针对类型转换函数来杜绝隐式类型转换的用法;
53
54     return 0;
55 }

    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 中的示例:

 1 #include <QDebug>
 2 #include <QString>
 3
 4 int main()
 5 {
 6     QString str = "";
 7     int i = 0;
 8     double d = 0;
 9     short s = 0;
10
11     str = "-255";
12
13     /* 以下进行了类类型到基础类型之间的转换 */
14     i = str.toInt();
15     d = str.toDouble();
16     s = str.toShort();
17
18     qDebug() << "i = " << i << endl;
19     qDebug() << "d = " << d << endl;
20     qDebug() << "s = " << s << endl;
21
22     return 0;
23 }

5,小结:

1,C++ 类中可以定义类型转换函数;

2,类型转换函数用于将类对象转换为其它类型;

3,类型转换函数与转换构造函数具有同等的地位;

4,工程中以 Type toType() 的公有成员代替类型转换函数;

原文地址:https://www.cnblogs.com/dishengAndziyu/p/10914348.html

时间: 2024-10-09 03:03:57

C++中的类型转换函数的相关文章

在复数类中自定义类型转换函数实现复数和非复数之间的运算

实现复数+double型数据,并且打印运算后实部上的数据 #include <iostream> using namespace std; class Complex { public: Complex( )//定义默认构造函数初始化复数 { real=0; imag=0; } //使用初始化表初始化复数 Complex(double r, double i):real(r),imag(i){} //定义自定义类型转换函数 operator double() { return real; }

pb中的类型转换函数

Char() 功能将字符串的第一个字符.Blob变量的第一个值.或一个整数转换成字符. 语法Char ( n ) 参数n:字符串.Blob变量或整数,也可以是包含上述类型数据的Any类型变量返回值Char.返回参数n的第一个字符.如果n参数的值为NULL,则Char()函数返回NULL. -------------------------------------------------------------------------------- Dec() 功能将字符串或Blob值转换成Dec

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

如何轻松玩转Arduino单片机,当我在进行数据转换的时候,遇到了问题,尝试了C语言和C++中的好多函数,都没有达到将float型数据转换为char型的目的.苦苦查阅资料后,终于找到了一个大神级函数!!!dtostrf(),可以轻松实现数据类型from   float   to  char .            get it 格式如下: char* dtostrf(double _val,signed char _width, unsigned char prec, char* _s) 参数

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

由于博主最近在做一个项目,需要采集不同传感器的数据,包括float型的HCHO,以及int型的PM2.5数据.但是最终向服务器上传的数据都得转换为char型才能发送,这是借鉴了一个github上面的实例实现了在Arduino上部署socket使之与服务器进行交互. github实例如下: https://github.com/washo4evr/Socket.io-v1.x-Library 在本项目中多次使用了数据类型转换,前文提到了float和double类型转换为char,如下:http:/

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

0.目录 1.动态内存分配 1.1 new和malloc的区别 1.2 delete和free的区别 2.虚函数 2.1 构造函数与析构函数是否可以成为虚函数? 2.2 构造函数与析构函数是否可以发生多态? 3.继承中的强制类型转换 4.小结 1.动态内存分配 1.1 new和malloc的区别 new关键字与malloc函数的区别: new关键字是C++的一部分 malloc是由C库提供的函数 new以具体类型为单位进行内存分配 malloc以字节为单位进行内存分配 new在申请内存空间时可进

Python 3.X 调用多线程C模块,并在C模块中回调python函数的示例

由于最近在做一个C++面向Python的API封装项目,因此需要用到C扩展Python的相关知识.在此进行简要的总结. 此篇示例分为三部分.第一部分展示了如何用C在Windows中进行多线程编程:第二部分将第一部分的示例进行扩展,展示了如何在python中调用多线程的C模块:第三部分扩展了第二部分,增加了在C模块的线程中回调python的演示. 本文所用的环境为:64位Win7 + python 3.4 x86 + vs2010 一.windows下的C语言多线程程序 windows下多线程编程

第42课 类型转换函数

1. 类型转换函数 (1)C++类中可以定义类型转换函数 (2)类型转换函数用于将类对象转换为其它类型 (3)语法规则: operator Type() //重载类型运算符 { Type ret; //…… return ret; } [编程实验]类型转换函数初探 #include <iostream> using namespace std; class Test { int mValue; public: Test(){mValue = 0;} //转换构造函数 Test(int i =

MEX程序中的mexFunction函数【转】

与C中的main函数一样,MEX程序中的开始函数为mexFunction.默认变量参数是: void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) 其中 nlhs输出参数数目 plhs[]指向输出参数的指针 nrhs输入参数的数目 prhs[]指向输入参数的指针 例如:使用[a,b]=test(c,d,e) 调用mex函数test时,传给test的这三个参数分别是prhs[0]=c ,prhs[1]

R语言:利用caret包中的dummyVars函数进行虚拟变量处理

dummyVars函数:dummyVars creates a full set of dummy variables (i.e. less than full rank parameterization----建立一套完整的虚拟变量 先举一个简单的例子: survey<-data.frame(service=c("very unhappy","unhappy","neutral","happy","very