Ожидаемый результат от следующего кода должен быть 505,5, но вместо этого он возвращает 3.97541e + 70. Почему это так и как проблема может быть решена?
#include <iostream>
#include <string>
using namespace std;
class Position {
public:
Position(int s, double p, string n) {
shares = s;
price = p;
name = n;
}
double getBpEffect() {
return bpEffect;
}
private:
string name;
int shares;
double price;
double bpEffect = (shares*price) / 2;
};int main() {
Position xyz = Position(100, 10.11, "xyz");
double buyingPower = xyz.getBpEffect();cout << buyingPower;
system("pause");
return 0;
}
double bpEffect = (shares*price) / 2;
работает до тело вашего конструктора с использованием неопределенных значений в shares
а также price
, Вам нужно рассчитать bpEffect
после того, как вы инициализировали другие переменные.
Показанный класс инициализируется смесью кода конструктора и явной инициализации члена.
Если порядок, в котором происходят различные фрагменты конструкции класса, полностью не понят, довольно просто заставить вещи происходить в неправильном порядке.
Лучше всего инициализировать все в одном месте, удалив всю двусмысленность:
Position(int s, double p, string n)
: name(n), shares(s), price(p),
bpEffect((shares*price) / 2)
{
}