所以我正在研究基本的类构造函数。问题是,当我使用点运算符找到我的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,这显然是错误的。为什么我得到这个答案?
答案 0 :(得分:4)
您在dSecs = dTime;
上遇到未定义的行为,因为dTime
从未初始化。之后,所有赌注都已关闭。
你可能会dTime = dSecs
。
答案 1 :(得分:1)
正如其他人所提到的,构造函数中存在错误。如果您使用构造函数初始化列表(这是推荐的方法)实现它,那么您将产生编译器错误。
Horse(string sHorseName, double dDistance, double dSecs) : sName(sHorseName), sDist(sDistance), dTime(dSecs) {}
答案 2 :(得分:0)
当您需要将dTime
分配给dSecs
时,您需要将其与dDistance
和dSecs
参数的顺序区别开来。你传递给它的是什么(假设马在11.40秒内行进了122米,在122秒内行走了11.40米)。
答案 3 :(得分:0)
在构造函数中,反转以下行:
dSecs = dTime;