簡體   English   中英

朋友類和重載運算符

[英]Friend classes and overloaded operators

首先,這是出於學術目的。 我感到非常沮喪,甚至與朋友一起工作了半天。

我們正在與重載的運算符和朋友類一起工作,這個實驗使我感覺像個白痴。 我將在下面發布重要的代碼,但整個項目將在文章底部的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

  1. 您似乎已經組合了一個朋友類和一個朋友構造函數的語法。 (從所包含的代碼中不清楚是否需要。)
  2. NumDays沒有默認的構造函數,因此您無法創建一個, 然后在運算符中設置其hours成員。
  3. operator++()返回類型NumDays& (這“僅僅是”一個好主意;這里不需要任何其他代碼更改。)
  4. 不要將輸出operator<<定義為類成員,因為它應該采用std::ostream&第一個參數。
  5. 根據PaulMcKenzie的評論:將()放在您的方法調用上。
  6. 根據您的評論:切勿在標題文件中放置using指令 (函數或局部名稱空間中除外)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM