类返回类型重载

时间:2011-03-22 02:49:40

标签: c++ design-patterns data-structures overloading

我经常遇到以下情况:我有一个我希望访问的数据结构,如下所示:

class data {
public:
    double error;
    double value;

    ...
}

...

data *outputs;

...

double lastValue = ...;
double someValue = ...;

for (int i = 0; i < n; ++i) {
    outputs[i] = someValue; //should be equivalent to outputs[i].value = someValue
    outputs[i].error = lastValue - someValue;
}

目前我只使用outputs[i].value =但是,出于可读性目的,使用(类似于)上述示例实际上更有意义(至少从理论的角度来看,代码不需要可维护性)。

我理解operator =适用于上述情况,但是对于简单访问,我仍然需要使用outputs [i] .value。对于概念设计的可读性而言,最好的解决方案是什么,也不会给程序员带来麻烦。

1 个答案:

答案 0 :(得分:3)

您可以将赋值运算符重载添加到data

class data {
public:
    double error, value;

    void operator=(double d) { value = d; }
};
但是,说实话,我认为这会让人感到困惑。当然,这取决于你打算如何使用它,但是考虑到你的例子,我认为为类添加一个构造函数会更清晰:

class data {
public:
    double error, value;
    data(double value_arg, double error_arg)
        : value(value_arg), error(error_arg) { }
};

用作:

outputs[i] = data(someValue, lastValue - someValue);