-1

以下代码的预期结果应该是 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;

}
4

2 回答 2

2

double bpEffect = (shares*price) / 2;使用和中的未定义值在构造函数主体之前运行。您需要在初始化其他变量后进行计算。sharespricebpEffect

于 2016-10-23T00:59:52.503 回答
0

显示的类通过构造函数代码和显式成员初始化的混合进行初始化。

除非完全理解类构造的各种点点滴滴的顺序,否则很容易使事情以错误的顺序发生。

最好的办法是在一个地方初始化所有内容,消除所有歧义:

Position(int s, double p, string n)
   : name(n), shares(s), price(p),
     bpEffect((shares*price) / 2)
{
}
于 2016-10-23T01:01:21.243 回答