朋友类和重载运算符

时间:2017-10-21 02:54:20

标签: c++ operator-overloading friend-class

首先,这是出于学术目的。我非常沮丧,我甚至和朋友一起工作了半天。

我们正在与重载的操作员和朋友班一起工作,这个实验室让我觉得自己像个完全白痴。我将在下面发布重要的代码,但整个项目将在帖子底部的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";
}

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

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

还修改了我的代码。不能很好地工作,但它确实编译并且主要是工作。 http://www.mediafire.com/file/g5m21drbuab8tso/Lab5workCounter.zip

1 个答案:

答案 0 :(得分:0)

  1. 您似乎已经结合了朋友类和朋友构造函数的语法。 (您的包含代码不清楚是否需要。)
  2. NumDays没有默认构造函数,因此您无法创建一个然后在运算符中设置其hours成员。
  3. NumDays&返回operator++()类型。 (这只是一个好主意;它不需要在此处进行任何其他代码更改。)
  4. 不要将输出operator<<定义为类成员,因为它应该采用std::ostream&第一个参数。
  5. 来自PaulMcKenzie的评论:将()放在方法调用上。
  6. 从您的评论:永远不要在标题文件中放置using directive(函数内部或detail namespace除外)。