C++ 类型转换运算符

  1. #include <iostream>
  2. using namespace std;
  3. class SmallInt
  4. {
  5. public:
  6. /**
  7. * implicit constructor
  8. * 实现int类型转换为SamllInt类型
  9. */
  10. SmallInt(const int val): value(val)
  11. {
  12. cout << "SmallInt(const int val)" << endl;
  13. }
  14. /**
  15. * class-type conversion
  16. * 无显式返回类型
  17. * 无形参
  18. * 必须定义成类的成员函数
  19. * 一般被定义成const类型
  20. */
  21. operator int()const /* SmallInt类型在需要的时候会转化为int类型 */
  22. {
  23. cout << "operator int()const" << endl;
  24. return value;
  25. }
  26. int getValue() const
  27. {
  28. return value;
  29. }
  30. private:
  31. int value;
  32. };
  33. void testTypeConversion()
  34. {
  35. SmallInt smallInt = 1;/* SmallInt smallInt = SmallInt(1) */
  36. cout << smallInt.getValue() << endl;
  37. cout << smallInt + 2 << endl;
  38. }
  39. void testTypeConversion2nd()
  40. {
  41. SmallInt smallInt = 3.14;/* 3.14转化为int型为3 */
  42. cout << smallInt.getValue() << endl;
  43. cout << smallInt + 3.14 << endl; /* SmallInt类型先转化为int,再转化为double*/
  44. }
  45. int main()
  46. {
  47. testTypeConversion();
  48. testTypeConversion2nd();
  49. return 0;
  50. }

?运行结果如下图所示:

来自为知笔记(Wiz)

时间: 2024-10-22 15:43:08

C++ 类型转换运算符的相关文章

C++类型转换运算符 static_cast,dynamic_cast,reinterpret_cast,const_cast

类型转换是一种让程序猿可以临时或永久性改变编译器对对象的解释机制.可改变对象解释方式的运算符称为类型转换运算符. 为何须要进行类型转换 通常为了实现使用不同环境的个人和厂商编写的模块可以相互调用和协作,程序猿须要让编译器依照所需的方式解释数据,并成功编译和运行.一个非常经典的样例是:眼下非常多C++程序依旧在使用非常多年前用C编写的库.而针对这些C语言编译器编写的库必须依赖整形来保存布尔值,因此对于这些编译器来说.bool类型的定义就类似于: typedef unsigned short BOO

自增自减运算符的重载(强制类型转换运算符重载)

前置运算符重载为一元运算符,后置运算符重载为二元运算符. Operator int() { return n; } int作为一个强制类型转换运算符被重载, Demo s; (int)s;       //等效于s.int(): 强制类型转换运算符重载时, 不能写返回值类型 实际上其返回值类型----强制类型转换运算符代表的类型 只能作为成员函数,不能作为友元函数或普通函数 转换构造函数和类型转换运算符有一个共同的功能:当需要的时候,编译系统会自动调用这些函数,建立一个无名的临时对象(或临时变量

C++ Primer 学习笔记_28_操作符重载与转换(3)--成员函数的重载、覆盖与隐藏、类型转换运算符、*运算符重载、-&gt;运算符重载

C++ Primer 学习笔记_28_操作符重载与转换(3)--成员函数的重载.覆盖与隐藏.类型转换运算符.*运算符重载.->运算符重载 一.成员函数的重载.覆盖与隐藏 对于类层次的同名成员函数来说,有三种关系:重载.覆盖和隐藏,理清3种关系,有助于写出高质量的代码. 1.成员函数的重载 重载的概念相对简单,只有在同一类定义中的同名成员函数才存在重载关系,主要特点时函数的参数类型和数目有所不同:但不能出现函数参数的个数和类型均相同,仅仅依靠返回值类型不同来区分的函数,这和普通函数的重载是完全一致

C++ Primer 学习笔记_29_操作符重载与转换(4)--转换构造函数和类型转换运算符归纳、operator new 和 operator delete 实现一个简单内存泄漏跟踪器

C++ Primer 学习笔记_29_操作符重载与转换(4)--转换构造函数和类型转换运算符归纳.operator new 和 operator delete 实现一个简单内存泄漏跟踪器 一.转换构造函数 可以用单个实参来调用的构造函数定义从形参类型到该类型的一个隐式转换.如下: class Integral { public: Integral (int = 0); //转换构造函数 private: int real; }; Integral A = 1; //调用转换构造函数将1转换为In

《C++ Primer Plus》15.5 类型转换运算符 学习笔记

C++相对C更严格地限制允许的类型转换,并添加4个类型转换运算符,是转换过程更规范:* dynamic_cast:* const_cast:* static_cast:* reinterpret_cast.[dynamic_cast运算符]假设High和Low是两个类,而ph和pl的类型分别是High*和Low*,则仅当Low是High的可访问基类(直接或间接)时,下面的语句才将一个Low*指针赋给pl:pl = dynamic_cast<Low *> ph;否则,该与据将空指针赋给pl.通常

C++_类型转换运算符

C++的创始人认为C语言的类型转换运算符太过于松散.他采取了更加严格的限制允许的类型转换.并添加了4个类型转换运算符. 这部分特性比较高阶,我把它归于奇技淫巧的范畴.这里简单介绍一下,以后实际有用到再深入研究. 原文地址:https://www.cnblogs.com/grooovvve/p/10422216.html

C#变量/数据类型转换/运算符使用

1.变量 命名规则: a 只能是字母(a-z),数字(0-9),下划线(_)b 不能用数字开头c 不能是C#中的关键字 命名规范: a 简短,有语义的单词或组合b 骆驼命名法(从第二个单词开始,首字母大写)myName 使用步骤: a 声明并赋值(例:int age=18)b 使用(输入输出.判断.运算等...)* 先赋值再使用 2.数据类型 整形和非整形:整形:sbyte(有符号的-128~127) byte(0~255 )一个字节8位short(-32768~32767)ushort(0~6

数据类型 数据类型转换 运算符

鉴别空对象看齐能否进行属性操作. 双等会进行隐式类型转换,==两侧数据类型不一样时,会转换成一样的在进行比较. 1 若等号一侧为 布尔值 就都转换成布尔值进行比较. NaN和任何内容比较结果都为false onchange检测内容(在表单中):1 在单选和复选框中,检测checked值是否发生变化(检测是否勾选或取消勾选) 2在其他表单控件中,检测value值发生变化. 3 表单控件(input textareea selecter)要获取他们的值获取的是value. 在js中只有nan类型的数

Java连载15-boolean类型&amp;类型转换&amp;++运算符

一.boolean类型 1.说明: (1)在java语言中,boolean类型只有两个值:true.false,没有其他的值.在C语言中,是有0代表false和1代表true的 (2)在底层存储的时候boolean类型占用1个字节,因为实际存储的时候false底层是0,true是1 (3)布尔类型在实际开发过程中是非常重要的,经常使用在逻辑运算和条件控制语句中. public class d15_{ public static void main(String[] args){ boolean

数据类型转换-运算符

##基本数据类型转换 - 默认顺序是 * byte->short->int->long->float->double - 自动提升规则(针对二元操作符) * 所有的byte,short,char型会自动提升为int型 * 若一个操作数是long类型,则另一个操作数也会转换为long类型,计算的结果类型也是long类型 * float类型,double类型跟long类型的提升规则一样 - 注意 * 默认浮点型是double类型,默认整型是int类型 * 举例说明: ``` fl