1

我将通过我想要达到的目标来描述这个问题。

假设你有一个Parameter类:

class Parameter
{
private:
    float _parameter, _parameterScaler;

public:

    Parameter()
    {
        _parameter = 1;
        _parameterScaler = 0.5;
    }

    void SetValue(float value)
    {
        _parameter = value;
    }

    void SetValueOffset(float value)
    {
        _parameterScaler = value;
    }

    float "use of variable of this class"
    {
        return _parameter * _parameterScaler;
    }

}

这个类有两个浮点数,一个是参数值,另一个是参数乘数

现在,如果我使用Parameter类型的变量如下:

int main()
{
    Parameter param;
    param.SetValue(5);
    param.SetValueOffset(0.5);

    printf("%6.2f", param);
}

它打印:2.5。

例如,我可以通过使用 () 的运算符重载来实现这样的效果。是否可以仅使用可变用法?

4

1 回答 1

3

不,它不是,因为printf不对参数做任何事情 - 不应用强制转换或转换并且忘记了它们的类型。

你可以做的是使用std::cout而不是重载ostream& operator << (ostream& str, const Parameter&),那样

std::cout << param; 

将准确打印您想要打印的内容。

该代码printf("%6.2f", param);只是将param其视为float没有进行任何转换(并且总体上很糟糕)。不要这样做!

于 2012-10-14T14:43:43.760 回答