C ++类/函数交互

时间:2014-05-19 01:56:46

标签: c++

我对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());

1 个答案:

答案 0 :(得分:0)

您的代码的明显问题是您的复制构造函数和赋值运算符不正确。您未能完全复制对象,因为您在复制操作中缺少value成员。

Dice(Dice &other) 
{
    face = other.face;
    // where is the `value` member?
}

那么value成员的副本在哪里?如果您在复制过程中遗漏任何成员,您的程序将使用&#34; half-copies&#34;伪装成真实副本。这些类型的错误,你不会复制一切,是最难找到的。

这是您不应该参与编写复制/分配功能的一个原因,除非绝对需要。在您的情况下,编译器生成的复制构造函数/赋值运算符将正确地完成工作,而无需您编写一个。