Friend 类 和重载运算符

Friend classes and overloaded operators

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

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

这是我的主要class

的头文件代码
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 class 构造函数,但根据我的理解,它应该是这样工作的,因为超时对象是用每个 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";
}

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

原始代码 link 已损坏,这里是永久性的 link。 http://www.mediafire.com/file/j4q3fln9a8p98ll/dayCounter.zip

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

  1. 您似乎结合了友元 class 和友元构造函数的语法。 (从您的 included 代码中不清楚您是否需要。)
  2. NumDays 没有默认构造函数,因此您不能创建一个并且 then 在运算符中设置它的 hours 成员。
  3. Return 来自 operator++() 的类型 NumDays&。 (这“仅仅是”一个好主意;这里不需要任何其他代码更改。)
  4. 不要将输出 operator<< 定义为 class 成员,因为它应该采用 std::ostream& 第一个参数。
  5. 来自 PaulMcKenzie 的评论:将 () 放在您的方法调用上。
  6. 根据您的评论:永远不要输入 using directive in a header file (except inside a function or a )。