Установить ссылку в конструкторе?

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

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 Line:
1754

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

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

-2

Решение

поскольку Superclass принимает float&Вы должны выделить место для значения перед предоставлением ссылки на суперкласс. Затем вы должны установить значение результата вычисления перед вызовом Superclass конструктор.

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

Demo.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]