0

首先,这是出于学术目的。我非常沮丧,我什至已经和朋友一起解决了半天。

我们正在与重载的运算符和朋友类一起工作,这个实验室让我觉得自己像个彻头彻尾的白痴。我将在下面发布重要的代码,但整个项目将在帖子底部的一个 zip 文件中。我确定它充满了错误,现在它拒绝保存我的一些代码(它不断抛出异常)。

这是我的小学班级的头文件代码

class NumDays
{
private:
    int hours;
    double days;

    void calcDays(int);
public:
    NumDays (int);
    void setHours (int);
    double getWork();
    NumDays operator+ (const NumDays &);
    NumDays operator- (const NumDays &);
    NumDays operator++ ();
    void operator<< (const NumDays &);

    friend class Overtime(const NumDays &);
};

似乎不喜欢我尝试将 NumDays 对象传递给 Overtime 类构造函数,但据我了解,这应该是它应该如何工作的,因为加班对象是用每个 NumDays 对象构造的

第二个问题是重载的运算符,我在解决这个问题时遇到的麻烦更少,而在为什么必须如此具体地实现它时遇到的麻烦更大。

这是重载运算符的代码

/*overloading the + operator***************************************************/

NumDays NumDays::operator+ (const NumDays &right)
{
    NumDays temp;

    temp.hours = hours + right.hours;
    return temp;
}

/*overloading the -operator***************************************************/

NumDays NumDays::operator- (const NumDays &right)
{
    NumDays temp;

    temp.hours = hours - right.hours;
    return temp;
}

/*overloading the ++ operator**************************************************/

NumDays NumDays::operator++ ()
{
    ++hours;
    return *this;
}

/*overloading the << operator**************************************************/

void NumDays::operator<< (const NumDays &objOput)
{
    cout << objOput.getWork << " days have been worked by this work";
}

它绝对不是 << 重载的粉丝,但我基本上直接从我的书中复制代码来尝试这样做。

原始代码链接已损坏,这是一个永久链接。http://www.mediafire.com/file/j4q3fln9a8p98ll/dayCounter.zip

也有点修正了我的代码。不能完美地工作,但它确实可以编译并且大部分都可以工作。http://www.mediafire.com/file/g5m21drbuab8tso/Lab5workCounter.zip

4

1 回答 1

0
  1. 您似乎已经结合了朋友类和朋友构造函数的语法。(从您包含的代码中不清楚您是否需要。)
  2. NumDays没有默认构造函数,所以你不能创建一个然后在操作符中设置它的hours成员。
  3. NumDays&从中返回类型operator++()。(这“只是”一个好主意;这里不需要任何其他代码更改。)
  4. 不要将输出定义operator<<为类成员,因为它应该采用std::ostream&第一个参数。
  5. 来自 PaulMcKenzie 的评论:()进行方法调用。
  6. 根据您的评论:永远不要将using 指令放在头文件中(函数或详细名称空间内除外)。
于 2017-10-21T04:40:23.837 回答