【问题标题】:Class Return Type Overloading类返回类型重载
【发布时间】:2011-03-22 02:49:40
【问题描述】:

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

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= 适用于上述情况,但是对于简单的访问,我仍然必须使用 output[i].value。对于概念设计的可读性以及不会给程序员带来麻烦的最佳解决方案是什么。

【问题讨论】:

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


    【解决方案1】:

    你可以给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);
    

    【讨论】:

    • 谢谢,我可能最终会使用构造函数解决方案,这对双方来说绝对是最干净、最清晰的。
    猜你喜欢
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    相关资源
    最近更新 更多