Установить ссылку в конструкторе? - PullRequest
0 голосов
/ 13 мая 2018

Я хочу установить ссылку со значением, которое я вычисляю в конструкторе.Возможно ли это и как?

Class::Class(float data1, float data2, ..) : Superclass(calculatedValue)
{
    float calculatedValue = complex calculated from data1, data2, ...
}
//error, because the compiler doesn't know the calculatedValue in the first line.

Спасибо за ваши решения!

Редактировать:

Если я использую ответ от @dasblinkenlight, я получаюэто исключение:

Программа: C: \ WINDOWS \ SYSTEM32 \ MSVCP140D.dll Файл: c: \ program files (x86) \ microsoft visual studio \ 2017 \ community \ vc \ tools \ msvc \ 14.10.25017 \ include \ vector Строка: 1754

Выражение: векторный индекс вне диапазона

Информацию о том, как ваша программа может вызвать ошибку утверждения, см. В документации по утверждениям в Visual C ++.

1 Ответ

0 голосов
/ 13 мая 2018

Поскольку Superclass занимает float&, необходимо выделить место для значения, прежде чем предоставить ссылку на суперкласс.Затем вы должны установить значение результата вычисления перед вызовом конструктора * 1003.

Это можно сделать, поместив код для вычисления calculatedValue в частную статическую функцию-член и создав экземплярпеременная для float:

private:
    float val;
    static float calculateValue(float data1, float data2, ...) {
        return complex calculated from data1, data2
    }
public:
    Class::Class(float data1, float data2, ...)
    :   Superclass(val = calculateValue(data1, data2, ...)) {
    }

Теперь Superclass может установить свою ссылку на val подкласса, который, в свою очередь, устанавливается на результат вызова функции-члена calculateValue для переданных параметровконструктору.

Демо.

...