将隐式float转换为其他类型

Convert implicitly float to other type

本文关键字:其他 类型 转换 float      更新时间:2023-10-16

例如,我有一个名为Length的类。

class Length {
public:
    static const float METER_TO_FLOAT_RATIO;
    Length();
    void setValue(float valueInMeter);
    operator const float();
private:
    float valueInMeter_;
};
const float METER_TO_FLOAT_RATIO= 10;
Length::Length() {}
Length::operator const float() {
    return this->valueInMeter_ * METER_TO_FLOAT_RATIO;
}
void drawRectangle(Length width, Length height) {
    //draw width * height rectangle
}
int main() {
    Length width, height;
    width = 20.0f;
    height = 10.0f;
    drawRectangle(width, height);
    return 0;
}

我问这个问题是为了弄清楚如何隐式地从Length转换到float,但我忘记了或没有问如何向后转换。向后转换的方法将调用以下语句:

    valueInMeter_ = valueInFloat_ / METER_TO_FLOAT_RATIO; //valueInFloat_ is the parameter

我可以想到两种方法:

  1. 使用转换构造函数

    Length(float val);
    
  2. 使用重载赋值操作符

    Length& operator=(float val);
    

如果添加了转换构造函数,则不需要赋值操作符