Класс Возвращаемый тип Перегрузка - PullRequest
0 голосов
/ 22 марта 2011

Я обычно сталкиваюсь со следующей ситуацией, когда у меня есть структура данных, к которой я бы хотел иметь доступ следующим образом:

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. Что было бы лучшим решением для этого для удобочитаемости как для концептуального дизайна, так и без причинения головной боли программисту.

1 Ответ

3 голосов
/ 22 марта 2011

Вы можете добавить перегрузку оператора присваивания к 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);
...