变量和类相互转换规则

变量通过构造函数转换为类对象

class Fraction {
public:
    Fraction(int molecular, int denominator = 1) : mMolecular(molecular), mDenominator(denominator){}
    Fraction operator + (Fraction& f) {
        ...
    }
    
private:
    int mMolecular;
    int mDenominator;
}

Fraction f1(3,5);
Fraction f2 = 4 + f1;  //编译器首先通过构造函数把4转换为Fraction的对象然后和f1相加。

如果构造函数前面添加explicit,不允许编译器默认把变量通过构造函数转换为类对象,上面的加法会报错,因为没有整数+类对象的重载函数。

类对象通过重载函数转换为变量

class Fraction {
public:
    Fraction(int molecular, int denominator = 1) : mMolecular(molecular), mDenominator(denominator){}
    operator double() const {    //该重载函数没有返回值类型,函数的名字代表了返回值类型
        return (double)(mMolecular /mDenominator);
    }
    
private:
    int mMolecular;
    int mDenominator;
}

Fraction f1(3,5);
Fraction f2 = 4 + f1;

编译器处理上面的加法:

首先可以把整数转换为Fraction;

寻找Fraction + Fraction的重载函数,没有这样的+重载函数;

编译器寻找将f转换为double类型的转换函数,有这样的转换函数;

进行double + double的加法运算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值