这三个名字可能很绕,看着也很不一样,但其实是三个很容易混淆的概念,并且经常在实际编程中遇到。这里拿出来比较一下。

首先是强制类型转换运算符的重载,作用是当前对象向其他类型的转换,常见的形式是

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

区分一下强制类型转换运算符重载/赋值运算符重载/对象定义的赋值相关推荐

  1. 重载new、delete和强制类型转换运算符()

    1.重载new和delete运算符 内存管理运算符new.new[].delete和delete[]也可以进行重载,其重载形式既可以是类的成员函数,也可以是全局函数.一般情况下,内建的内存管理运算符就 ...

  2. C++ 重载强制类型转换运算符

    C++ 中,类型的名字(包括类的名字)本身也是一种运算符,即类型强制转换运算符. 类型强制转换运算符是单目运算符,也可以被重载,但只能重载为成员函数,不能重载为全局函数.经过适当重载后,(类型名)对象 ...

  3. 【带你吃透C++】运算符重载(赋值运算符重载)原来是这么一回事

    look here 运算符重载 赋值运算符重载 细节总结: – the End – 运算符重载 C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,其目的就是让自定义类型可以 ...

  4. C++ 强制类型转换运算符

    C++ 将类型名作为强制类型转换运算符. C++ 引入了四种功能不同的强制类型转换运算符以进行强制类型转换:static_cast.reinterpret_cast.const_cast 和 dyna ...

  5. C++编程进阶4(C++中的强制类型转换运算符、不要返回自定义类内部成员的指针,引用和迭代器)

    十五.C++中的强制类型转换 C语言中的强制类型转换方式有两种 T i = (T)exp; T i = T(exp); 这两种方式没有差别,C++中也支持这两种方式,但是和C++中的强制类型转换运算符 ...

  6. c语言运算符类型转换,C语言中强制类型转换运算符的独特作用

    C语言中强制类型转换运算符的独特作用 在C语言中有一个强制类型转换运算符,它为C语言中的数据类型转换带来 (本文共2页) 阅读全文>> 在进行C++类的设计时,我们常常需要为类对象设计运算 ...

  7. 强制类型转换运算符的优先级

    强制类型转换 int i=10; char b=20; 如:i=b;//这样赋值没有问题,因为低字节类型转换成高字节类型. 如果是b=i;//这样会有问题,b=(char)i;//因为高字体转换为低字 ...

  8. c++强制类型转换运算符

    static_cast •用于非多态类型的转换 •不执行运行时类型检查(转换安全性不如 dynamic_cast) •通常用于转换数值数据类型(如 float -> int) •可以在整个类层次 ...

  9. c语言--强制类型转换运算符

    当我们想改变一个表达式的类型时,"强制类型转换符",get it! 1.一般形式: (类型名)(表达式) 2.一般应用: (float) x                     ...

最新文章

  1. 【PHPWord】页面Section
  2. SQLServer特殊字符/生僻字与varchar
  3. Web API-路由(一)
  4. c语言 异或_C语言经典例题来袭!5大方法告诉你答案
  5. C#语句——循环语句(for循环与for循环嵌套)
  6. 设计模式六大原则 图
  7. C++ STL学习笔记
  8. 艾伟_转载:C# WinForm开发系列 - TextBox
  9. 基于JAVA+SpringMVC+Mybatis+MYSQL的大学生校园兼职平台
  10. JavaWeb——springMVC入门程序
  11. Linux SHELL 命令入门题目(一)
  12. build lavas 失败_Lavas 命令介绍 - Lavas 教程
  13. spring boot学习2,日志框架
  14. BRE BRE ProMax 2.0.7047.0 工艺流程模拟软件ProMax\
  15. 【基于深度学习的细粒度分类笔记2】弱监督学习下商品识别:CVPR 2018细粒度识别挑战赛获胜方案简介
  16. 重定向和转发的区别(redirect和forward)
  17. 容器化(docker)
  18. [Python面试][基础算法题]Python基础面试(基础算法题目较多)
  19. 光影秀的应用,3D投影带来视觉升级
  20. FL Studio21最新版数字音频工作站(DAW)

热门文章

  1. 图片日志:深拷贝和浅拷贝的区别/序列化及反序列化
  2. Java实现字符串反转的四种方式代码示例
  3. Spring MVC使用webSocket保持长连接
  4. MySQL列转行sql语句
  5. 微信支付分-支付失败原因总结
  6. Android通过广播监测Wi-Fi和便携式热点开关状态
  7. 希尔排序-Java二
  8. list删除某个元素_Redis对象——列表(List)
  9. 5.1.3 OS控制I/O设备的几种方式?(程序直接控制方式、中断驱动方式、DMA、通道控制)
  10. python生成的词云没有图案_Python生成词云的实现代码