C++ primer:转换与类类型

本文详细介绍了C++中的类类型转换,包括到类类型的转换和从类类型的转换,阐述了转换的作用以及如何减少所需操作符的数目,同时解释了转换操作符的定义和使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转换包括两类:到类类型的转换和从类类型的转换。

  1. 到类类型的转换:可用一个实参调用的非explicit构造函数定义一个隐式转换。当提供了实参类型的对象需要一个类类型的对象时,编译器将使用该转换。这种构造函数定义了到类类型的转换。
  2. 从类类型的转换:通过定义转换操作符、给定类类型的对象,利用该操作符产生其他类型的对象。像其他转换一样,编译器将自动应用这个转换。

转换的作用:

  1. 支持混合类型表达式

    int perator+ (int,const SmallInt&);

    int perator+ (const SmallInt&,int);

    SmallInt perator+ (const SmallInt&,const SmallInt&);

  2. 转换减少所需操作符的数目

    C++提供了一种机制,利用这种机制,一个类可以定义自己的转换,应用于其类类型的对象。对SmallInt 而言,可以定义一个从SmallInt到int类型的转换,如果定义了该转换,则无需再定义任何算术、关系或相等操作符。

    若存在一个到int的转换,则以下代码:

    SmallInt si(3);
    
    si + 3.14159;// 将si转换为int型,然后转换为double型,并与3.14159相加,得到double值


转换操作符:

一种特殊的类成员函数,定义将类类型值转变为其他类型值的转换。它在类定义体内声明,在保留字operator之后跟着转换的目标类型:

class SmallInt
{
public:
    SmallInt(int i = 0):val(i)
    {
        //...
    }
    operator int() const {return val;} //转换操作符函数,由SmallInt类类型转换成int型。
private:
    std::size_t val;
};

 转换函数采用通用形式:

operator type();

这里,type表示内置类型名、类类型名或由类型别名所定义的名字。对任何可作为函数返回类型的类型(除了void之外)都可以定义转换函数。一般而言,不允许转换为数组或函数类型,但转换为指针类型(数据和函数指针)以及引用类型是可以的。

注意:

转换函数必须为成员函数,不能指定返回类型(其实operator type()语句中type已经指明了必须显是吗返回的值的类型),并且形参表必须为空。

转换操作符一般不应该改变被转换的对象,因此,转换操作符通常定义为const成员。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值