我对c ++类很新,以及它们是如何工作的,但我正试图弄清楚我对这段代码有什么问题。我要做的是该类处理骰子对象,骰子有多少面以及骰子的值。然后在代码中使用这些值。我知道我在这里做了一些根本性的错误,我只是不确定是什么。
班级标题是:
class Dice {
private :
int face ;
int value ;
public:
Dice()
{
face = 6;
}
Dice(int faceVal)
{
face = faceVal;
}
Dice(Dice &other)
{
face = other.face;
}
Dice& operator=(const Dice &rhs);
int roll() ;
int getValue() const { return value; }
int getFace() const { return face; }
} ;
Dice& Dice::operator=(const Dice &rhs)
{
face = rhs.face;
return *this;
}
#endif
正在使用的功能/方法:
int Dice::roll()
{
srand((unsigned)time(0));
int randomNumber = 1 + rand() % 5;
value = randomNumber;
return randomNumber;
}
int rollAll(Dice cup[], int n)
{
int faces = 0;
for(int i = 0; i < n; i++)
faces += cup[i].roll();
return sum ;
}
从主要功能进入它们是:
total = rollAll(cup,2) ;
for (int i = 0 ; i < 2 ; i++ )
(arr[i] = cup[i].getValue());
答案 0 :(得分:0)
您的代码的明显问题是您的复制构造函数和赋值运算符不正确。您未能完全复制对象,因为您在复制操作中缺少value
成员。
Dice(Dice &other)
{
face = other.face;
// where is the `value` member?
}
那么value
成员的副本在哪里?如果您在复制过程中遗漏任何成员,您的程序将使用&#34; half-copies&#34;伪装成真实副本。这些类型的错误,你不会复制一切,是最难找到的。
这是您不应该参与编写复制/分配功能的一个原因,除非绝对需要。在您的情况下,编译器生成的复制构造函数/赋值运算符将正确地完成工作,而无需您编写一个。