类型转换是将一种类型的值映射为另一种类型的值。类型转换实际上包含有自动隐含和强制的两种。 类型的自动隐式转换 C++语言编译系统提供的内部数据类型的自动隐式转换规则如下: 1. 程序在执行算术运算时,低类型可以转换为高类型。 2. 在赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给它。 3. 当在函数调用时,将实参值赋给形参,系统隐式地将实参转换为形参的类型后,赋给形参。 4. 函数有返回值时,系统将自动地将返回表达式类型转换为函数类型后,赋值给调用函数。 在以上情况下,系统会进行隐式转换的。当在程序中发现两个数据类型不相容时,又不能自动完成隐式转换,则将出现编译错误。例如: int * p = 100; 在这种情况下,编译程序将报错,为了消除错误,可以进行如下所示的强制类型转换: int * p = (int *)100; 将整型数100显式地转换成指针类型。 构造函数具有类型转换功能 在实际应用中,当类定义中提供了单个参数的构造函数时,该类便提供了一种将其他数据类型的数值或变量转换为用户所定义数据类型的方法。因此,可以说单个参数的构造函数提供了数据转换的功能。下面通过一个例子进一步说明单参数构造函数的类型转换功能。
转换函数
程序输出结果: 5.325 由程序可知,d是一个double型数值,r是Rational类的对象,这两个不同类型的数据进行加法之所以能够进行是得益于转换函数operator double()。为使上述加法能够进行,编译系统先检查类Rational的说明,看是否存在在下转换函数能够将Rational类型的操作数转换为double类型的操作数。由于Rational类中说明了转换函数operator double(),它可以在程序运行时进行上述类型转换,因此,该程序中实现了d+=r;的操作。 定义转换函数时应注意如下几点: (1) 转换函数是用户定义的成员函数,但它要是非静态的。 (2) 转换函数不可以有返回值。 (3) 转换函数也不带任何参数。 (4) 转换函数函数还不能定义为友元函数。 转换函数的名称是类型转换的目标类型,因此,不必再为它指定返回值类型;转换函数是被用于本类型的数值或变量转换为其他的类型,也不必带参数。 |
C++ 类型转换
最新推荐文章于 2024-08-13 17:36:14 发布