为什么我会得到一个奇怪的答案?
问题描述:
所以我正在研究基本的类构造函数。问题是,当我使用点运算符来查找我的Horse对象的速度时,我得到的答案毫无意义,我想知道什么是错误的以及如何纠正它?为什么我会得到一个奇怪的答案?
class Horse{
public:
string sName;
double dDist;
double dTime;
//constructor
Horse(string sHorseName, double dDistance, double dSecs){
sName = sHorseName;
dDist = dDistance;
dSecs = dTime;
}
double dSpeed(){
return (dDist/dTime);
}
};
int main(){
Horse Horse1("frankel", 11.40, 122);
cout << Horse1.dSpeed() << " m/s. " << endl;
cout << Horse1.sName << endl;
return 0;
}
程序给出的答案是5.95461e + 306这显然是错误的。为什么我会得到这个答案?
答
由于dTime
从未初始化,因此您在dSecs = dTime;
上遇到未定义的行为。之后,所有投注都关闭。
您可能需要dTime = dSecs
。
答
你分配到dTime
时dSecs
它需要是周围的其他方式,以及你的构造需要你dDistance
和dSecs
参数以不同的顺序比你传递给它(假设什么马走遍122米在11.40秒,而不是122秒内11.40米)。
答
在你的构造,反转以下行:
dSecs = dTime;
答
正如其他人所说,你有你的构造函数中的错误。如果你已经使用构造函数初始化列表(这是推荐的方法)实现它,那么你会产生一个编译器错误。
Horse(string sHorseName, double dDistance, double dSecs) : sName(sHorseName), sDist(sDistance), dTime(dSecs) {}
谢谢,完全忽略它应该是dTime = dSecs – Josh 2013-02-19 23:47:47