В чем ошибка в этом коде оператора перегрузки? - PullRequest
0 голосов
/ 16 марта 2019
#include <iostream>
using namespace std;

class date 
{
   int day,year,month;
   int add,subt;

   public:
   date ()
   {
      day = 17;
      year = 2019;
      month = 3;
      add = 0;
      subt = 0;     
   }    

   void recent_date ()
   {
    cout<<"Recent date   :    "<<day<<"/"<<month<<"/"<<year;
   }

   void adding ()
   {
    cout<<endl<<"How many days you want to go in a future  :   ";
    cin>>add;
   }

   date operator+()
   {
        date temp;
        temp = (day,month,year);
        day += temp.add;

        if (day > 31 && month == 1 || month == 3 || month == 5 || month == 7 || month == 8 ||month == 10 || month == 12)
           {
               temp.month++;
               day = temp.day - 31;
               year = temp.year;        
           }
           return temp;
   }
};

main ()
{
    date obj;
    obj.recent_date();
    obj.adding();
    obj=temp++;
    obj.recent_date();
}

Я получил синтаксическую ошибку, и программа не запустилась.

Я хочу увеличить дату, принимая ввод пользователя. Но он не работает должным образом.

Может ли кто-нибудь объяснить этот код для меня?

Ответы [ 2 ]

0 голосов
/ 18 марта 2019

Вы позвонили temp++, но никогда не определяли оператор для этого.

При этом используется приращение постфикса , которое может выглядеть следующим образом:

date operator++(int)
{
   // ...
}

MyГипотеза заключается в том, что вы предполагали это вместо date operator+().

Согласно ответу mhhollomon, вы можете перегрузить и некоторые другие операторы, чтобы получить надежный интерфейс.

0 голосов
/ 17 марта 2019

См. на этой странице для получения дополнительной информации о перегрузке оператора приращения.

Короче говоря, эти четыре оператора различны:

operator+(T) // addition
operator+()  // unary plus
operator++() // prefix increment (++x)
operator++(int) // postfix increment (x++)

То, что вам нужноперегрузить это постфиксный инкремент.

Спасибо @BenVoigt за указание на то, что я пропустил унарный плюс.

...