重载类实例变量

时间:2016-03-01 09:55:45

标签: c++

我一直在寻找这个,但没有运气。可能是我正在寻找错误的词语,或者这可能是一个不寻常的请求(或者根本就不可行)。

无论如何,我的问题是:我希望能够使用类的实例......嗯,这是一个非常简单的例子:

class attribute
{
    float value;
    float min;
    float max;
}

attribute attr1;
attr1.value = 5.0f;

现在,基本上,我想使用attr1,好像我正在调用

attr1.value

所以,当我说,

std::cout << attr1 << std::endl;

它会打印5.0(或者只是5)。

谢谢!

1 个答案:

答案 0 :(得分:6)

您需要实施

std::ostream& operator<<(std::ostream& os, attribute const& att)
{
    os << att.value;
    return os; // this is how you "chain" `<<`
}

允许att.valuepublicfriend发货,或写一个功能。

另一种选择是将转换运算符构建为float

class attribute
{
    public:
    operator float() const
    {
        return value;
    }

    private:
    /*the rest of your class here*/

但这可能会带来意想不到的含糊之处。

最后,如果您希望attribute的行为类似于数字类型,那么您可以根据需要重载更多运算符。例如,要重载+=,您可以编写

template<typename Y>
attribute& operator+=(const Y& p)
{
    value += p;
    return *this;
}