C++类的自动转换和强制类型转换
来源:互联网 发布:crossover16破解linux 编辑:程序博客网 时间:2024/06/04 19:18
通过构造函数来转换
如果有这样的构造函数:
Node(int _x);
则可以有这样的语句:
Node a=2;
这条语句实际上将使用2作为构造函数的参数创建临时变量,然后将该变量复制到a中,由于这一步是自动进行的,所以称为隐式转换。注意只有一个参数的构造函数(或者有多个参数,但除了第一个,其他的参数都有默认值)才能用来转换。
可以用于隐式转换的情况(前提是有满足条件的构造函数):
(1)将Node对象初始化成int时。
(2)将int赋给Node对象时。
(3)将int值传递给接受Node参数的函数时。
(4)函数返回值类型为Node但实际返回了int时。
(5)在上述任一情况下,使用可转换为int类型的内置类型时。
Node a = 2.6;
上面这条语句会首先将double转换为int,再调用构造函数,最终a的值是2。如果有此时还有另一个构造函数如下:
Node(long _x);
编译器会拒绝Node a=2.6这种语句,因为double可以转换成int和long,产生二义性。
但其实有更好的转换方法而不是用构造函数,因此C++提供了关键字explicit来关闭这种自动特性。这样声明构造函数,将不允许隐式转换。
explicit Node(int _x);
但可以强制类型转换:
Node a = (Node)2.6;
阅读全文
0 0
- C++:类的自动转换和强制类型转换
- 类的自动类型转换和强制类型转换
- 类的自动类型转换和强制类型转换
- 类的自动类型转换和强制类型转换
- 类的自动转换和强制类型转换
- 类的自动转换和强制类型转换
- C++类的自动转换和强制类型转换
- 学习C++——类的自动转换和强制类型转换
- 自动类型转换和强制类型转换
- java的自动类型转换和强制类型转换
- Java:自动类型转换和强制类型转换的规则
- 基本数据的自动类型转换和强制类型转换
- 自动和强制类型转换
- 类的自动传唤和强制类型转换
- C++之类的自动转换和强制类型转换
- C语言中自动隐式转换和类型强制转换的一点注意
- 自动类型提升和强制类型转换
- C++ 类的自动转换与强制类型转换
- HDOJ 2000 ASCII码排序
- 2017.12.4———2017.12.10周总结
- java--jvm--jvm运行时数据区
- 绑定设备登录的实现
- codeblocks+OpenCV+cmake+MinGW环境搭建
- C++类的自动转换和强制类型转换
- 基础正则表达式
- IntelliJ IDEA搭建SpringBoot的小Demo
- 洛谷【P2758】-编辑距离
- 二叉搜索树
- 最小二乘法拟合直线c++代码
- QT on Android配置应用信息
- Java面向对象编程——多态性的实现
- 萌新理解-Java之TCP通信