C语言之将当前类类型转换为其它类型的格式

来源:爱站网时间:2022-10-07编辑:网友分享
这篇主要给大家来说一说C语言之将当前类类型转换为其它类型的格式内容,具有一定的参考价值,感兴趣的小伙伴可以来参考了解下。希望爱站技术频道小编整理的内容能帮助到你。

转换构造函数能够将其它类型转换为当前类类型(例如将 double 类型转换为 Complex 类型),但是不能反过来将当前类类型转换为其它类型(例如将 Complex 类型转换为 double 类型)。

C++ 提供了类型转换函数(Type conversion function)来解决这个问题。类型转换函数的作用就是将当前类类型转换为其它类型,它只能以成员函数的形式出现,也就是只能出现在类中。

类型转换函数的语法格式为:

operator type(){
    //TODO:
    return data;
}

operator 是 C++ 关键字,type 是要转换的目标类型,data 是要返回的 type 类型的数据。

因为要转换的目标类型是 type,所以返回值 data 也必须是 type 类型。既然已经知道了要返回 type 类型的数据,所以没有必要再像普通函数一样明确地给出返回值类型。这样做导致的结果是:类型转换函数看起来没有返回值类型,其实是隐式地指明了返回值类型。

类型转换函数也没有参数,因为要将当前类的对象转换为其它类型,所以参数不言而喻。实际上编译器会把当前对象的地址赋值给 this 指针,这样在函数体内就可以操作当前对象了。关于 this 的原理请猛击《C++ this指针详解》。

【示例】为 Complex 类添加类型转换函数,使得 Complex 类型能够转换为 double 类型。

#include 
using namespace std;

//复数类
class Complex{
public:
    Complex(): m_real(0.0), m_imag(0.0){ }
    Complex(double real, double imag): m_real(real), m_imag(imag){ }
public:
    friend ostream & operator>运算符
ostream & operator

运行结果: f = 24.6 f = 43.1 n = 43 本例中,类型转换函数非常简单,就是返回成员变量 m_real 的值,所以建议写成 inline 的形式。 类型转换函数和运算符的重载非常相似,都使用 operator 关键字,因此也把类型转换函数称为类型转换运算符。

关于类型转换函数的说明

1) type 可以是内置类型、类类型以及由 typedef 定义的类型别名,任何可作为函数返回类型的类型(void 除外)都能够被支持。一般而言,不允许转换为数组或函数类型,转换为指针类型或引用类型是可以的。 2) 类型转换函数一般不会更改被转换的对象,所以通常被定义为 const 成员。 3) 类型转换函数可以被继承,可以是虚函数。 4) 一个类虽然可以有多个类型转换函数(类似于函数重载),但是如果多个类型转换函数要转换的目标类型本身又可以相互转换(类型相近),那么有时候就会产生二义性。以 Complex 类为例,假设它有两个类型转换函数:

operator double() const { return m_real; }  //转换为double类型
operator int() const { return (int)m_real; }  //转换为int类型

那么下面的写法就会引发二义性:

Complex c1(24.6, 100);
float f = 12.5 + c1;

编译器可以调用 operator double() 将 c1 转换为 double 类型,也可以调用 operator int() 将 c1 转换为 int 类型,这两种类型都可以跟 12.5 进行加法运算,并且从 Complex 转换为 double 与从 Complex 转化为 int 是平级的,没有谁的优先级更高,所以这个时候编译器就不知道该调用哪个函数了,干脆抛出一个二义性错误,让用户解决。

以上就是关于C语言之将当前类类型转换为其它类型的格式全部内容了,希望小伙伴们都能看明白。关注爱站技术频道网站,每天带你体验不一样的技术文章内容。

上一篇:C语言之四种类型转换运算符的内容

下一篇:C语言使用二进制、八进制和十六进制的过程

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载