区分一下强制类型转换运算符重载/赋值运算符重载/对象定义的赋值
这三个名字可能很绕,看着也很不一样,但其实是三个很容易混淆的概念,并且经常在实际编程中遇到。这里拿出来比较一下。
首先是强制类型转换运算符的重载,作用是当前对象向其他类型的转换,常见的形式是
operator int();
Integer::operator int() {return x; }
调用方式类似于
Integer c(10); int a=c;
在函数调用的时候,类型转换的重载也会被隐式调用,比如下面一种情况
void print(int n) {cout<<n<<endl; } Integer i(10); print(i);
与之相对应的是赋值运算符重载,赋值运算符是从别的类型转换成当前对象,常见的形式如下:
Integer operator=(int n);
Integer Integer::operator=( int n ) {return Integer(n); }
调用方式类似于
Integer c; c=11;
最后是对象定义时的赋值,如果你定义了如下的一个构造函数
Integer(int _x):x(_x){}
那么你可以用这种方式定义一个对象
Integer c=11;
需要特别区别的是,定义时的赋值是会不会调用赋值运算符重载的。另外,如果需要限制隐式类型转换,可以使用explicit关键字,见参考文献[1].
参考文献
C++笔记(1)explicit构造函数
http://www.cnblogs.com/cutepig/archive/2009/01/14/1375917.html
转载于:https://www.cnblogs.com/sdqxcxh/archive/2012/05/08/2490973.html
区分一下强制类型转换运算符重载/赋值运算符重载/对象定义的赋值相关推荐
- 重载new、delete和强制类型转换运算符()
1.重载new和delete运算符 内存管理运算符new.new[].delete和delete[]也可以进行重载,其重载形式既可以是类的成员函数,也可以是全局函数.一般情况下,内建的内存管理运算符就 ...
- C++ 重载强制类型转换运算符
C++ 中,类型的名字(包括类的名字)本身也是一种运算符,即类型强制转换运算符. 类型强制转换运算符是单目运算符,也可以被重载,但只能重载为成员函数,不能重载为全局函数.经过适当重载后,(类型名)对象 ...
- 【带你吃透C++】运算符重载(赋值运算符重载)原来是这么一回事
look here 运算符重载 赋值运算符重载 细节总结: – the End – 运算符重载 C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,其目的就是让自定义类型可以 ...
- C++ 强制类型转换运算符
C++ 将类型名作为强制类型转换运算符. C++ 引入了四种功能不同的强制类型转换运算符以进行强制类型转换:static_cast.reinterpret_cast.const_cast 和 dyna ...
- C++编程进阶4(C++中的强制类型转换运算符、不要返回自定义类内部成员的指针,引用和迭代器)
十五.C++中的强制类型转换 C语言中的强制类型转换方式有两种 T i = (T)exp; T i = T(exp); 这两种方式没有差别,C++中也支持这两种方式,但是和C++中的强制类型转换运算符 ...
- c语言运算符类型转换,C语言中强制类型转换运算符的独特作用
C语言中强制类型转换运算符的独特作用 在C语言中有一个强制类型转换运算符,它为C语言中的数据类型转换带来 (本文共2页) 阅读全文>> 在进行C++类的设计时,我们常常需要为类对象设计运算 ...
- 强制类型转换运算符的优先级
强制类型转换 int i=10; char b=20; 如:i=b;//这样赋值没有问题,因为低字节类型转换成高字节类型. 如果是b=i;//这样会有问题,b=(char)i;//因为高字体转换为低字 ...
- c++强制类型转换运算符
static_cast •用于非多态类型的转换 •不执行运行时类型检查(转换安全性不如 dynamic_cast) •通常用于转换数值数据类型(如 float -> int) •可以在整个类层次 ...
- c语言--强制类型转换运算符
当我们想改变一个表达式的类型时,"强制类型转换符",get it! 1.一般形式: (类型名)(表达式) 2.一般应用: (float) x ...
最新文章
- 【PHPWord】页面Section
- SQLServer特殊字符/生僻字与varchar
- Web API-路由(一)
- c语言 异或_C语言经典例题来袭!5大方法告诉你答案
- C#语句——循环语句(for循环与for循环嵌套)
- 设计模式六大原则 图
- C++ STL学习笔记
- 艾伟_转载:C# WinForm开发系列 - TextBox
- 基于JAVA+SpringMVC+Mybatis+MYSQL的大学生校园兼职平台
- JavaWeb——springMVC入门程序
- Linux SHELL 命令入门题目(一)
- build lavas 失败_Lavas 命令介绍 - Lavas 教程
- spring boot学习2,日志框架
- BRE BRE ProMax 2.0.7047.0 工艺流程模拟软件ProMax\
- 【基于深度学习的细粒度分类笔记2】弱监督学习下商品识别:CVPR 2018细粒度识别挑战赛获胜方案简介
- 重定向和转发的区别(redirect和forward)
- 容器化(docker)
- [Python面试][基础算法题]Python基础面试(基础算法题目较多)
- 光影秀的应用,3D投影带来视觉升级
- FL Studio21最新版数字音频工作站(DAW)
热门文章
- 图片日志:深拷贝和浅拷贝的区别/序列化及反序列化
- Java实现字符串反转的四种方式代码示例
- Spring MVC使用webSocket保持长连接
- MySQL列转行sql语句
- 微信支付分-支付失败原因总结
- Android通过广播监测Wi-Fi和便携式热点开关状态
- 希尔排序-Java二
- list删除某个元素_Redis对象——列表(List)
- 5.1.3 OS控制I/O设备的几种方式?(程序直接控制方式、中断驱动方式、DMA、通道控制)
- python生成的词云没有图案_Python生成词云的实现代码