Помощь с перегруженными операторами

Я собираюсь ввести вопрос прямо из своего листа заданий, я не ищу точный код всей проблемы, мне нужна помощь в выяснении перегруженных операторов, поэтому пример синтаксиса перегруженного + математического оператора был бы полезен. вот проблема...

Насколько я могу судить, * означает завершение.

***Класс Time включает две целочисленные переменные-члены (Hour и Minute), функции-мутаторы setHour и setMinute, а также функции-аксессоры getHour и getMinute. Эти функции должны быть встроенными.

***Класс времени также должен включать два конструктора и один деструктор. Конструктор по умолчанию должен инициализировать часы и минуты равными 0 и отображать сообщение «Привет от конструктора по умолчанию». Второй конструктор должен присвоить значение часам и минутам. Деструктор должен отображать сообщение «Прощай, деструктор». Эти функции также должны быть встроенными.

Теперь, чтобы складывать и вычитать количество часов и минут, добавьте функцию оператор +, которая перегружает стандартный математический оператор +, и функцию оператор -, которая перегружает стандартный математический оператор. *** Вам всем нужно добавить функцию упрощения, которая проверяет значения в минутах больше 59 или меньше 0 и обрабатывает их в соответствии с часами. Пример 2 в час и 65 в мин даст 3 в час и 5 в мин. Эти функции не должны быть встроенными.

Основная программа создаст три объекта времени (время1, время2, время3). Пользователю будет предложено ввести два значения времени, которые будут сохранены в первом и втором объектах. Затем первый и второй объекты будут добавлены и помещены в третий объект, а затем отображены, затем вычтены, помещены в третий объект, а затем отображены. Используйте конструктор по умолчанию с объявлением третьего объекта и перегруженный конструктор с объявлением первого и второго объекта.

* Конец назначения*****

* Стартовый код*****

#include<iostream>
#include<cstdlib>
using namespace std;

class TIME 
{
private:
int min;
int hour;


public:

void tickTime();
void simplify();
TIME operator +();
TIME operator -();

TIME()
{
    min = 0;
    hour = 0;
    cout << "Hello!!! From constructor\n";
}


TIME(int h, int m)
{
    hour = h;
    min = m;
}


~TIME()
{
    cout << "Goodbye!!! From destructor.\n";
    system("pause");
}

void setMin ( int m )
{
min = m;

}


void setHour (int h)
{
hour = h;
}


int getMin() const
{
return min;
}


int getHour() const
{
return hour;
}
};
void TIME :: tickTime()
{
min++;
if (min>59)
{
    min=00;
    hour++;
    if (hour>23)
        hour = 00;
}
return;
}

void TIME :: simplify()
{
{
if (min>=60)
{
    hour += (min/60);
    min = min % 60;
}
else if (min < 0)
{
    hour -= ((abs(min) / 60) + 1);
    min = 60 - (abs(min) % 60);
}


    if (hour>23)
        hour = 00;
}
return;
}


TIME TIME:: operator+()
{


return;
}

TIME TIME:: operator-()
{


return;
}

int main()
{
int min, hour;
TIME t;
int i, h, m;

cout << "Enter Hour: ";
cin >> h;
cout << "Enter Minute: ";
cin >> m;

t.setHour(h);
t.setMin(m);

cout << endl << endl;

for (i=1; i<=5; i++)
{
    t.simplify();
    t.tickTime();
cout << t.getHour() << ":" << t.getMin() << endl << endl;
}

system("pause");
return 0;
}

***Конец кода***

**Текущий образец вывода*** Здравствуйте!!! Из конструктора Введите час: 9 Введите минуту: 29

9:30

9:31

9:32

9:33

9:34

Нажмите любую клавишу для продолжения . . . До свидания!!! От деструктора. Нажмите любую клавишу для продолжения . . . ***Конец примера вывода***

Спасибо за помощь, я действительно просто не понимаю, что такое перегрузка, но я думаю, что смогу разобраться с объектами и всеми другими забавными вещами.


person MjsGoku    schedule 01.05.2014    source источник
comment
Можете ли вы указать, что именно не работает, и опубликовать фрагменты кода из этих частей?   -  person yizzlez    schedule 01.05.2014
comment
Взгляните сюда: stackoverflow.com/questions/4421706/operator-overloading?rq =1 Но проблема в том, что я не знаю, как вам помочь, потому что я не знаю, что вы хотите/ожидаете   -  person yizzlez    schedule 01.05.2014
comment
Я не знаю, как выглядит синтаксис для перегруженного оператора, поэтому пример синтаксиса поможет мне, я верю, но, как я уже сказал, на самом деле я не хочу, чтобы моя конкретная проблема была решена за меня, я просто хочу получить некоторые рекомендации о том, как профессиональные программисты заняться решением этого.   -  person MjsGoku    schedule 01.05.2014
comment
ОП: Ваше беспокойство по поводу руководства, безусловно, справедливо. Однако вычисления — это просто абстракция, и по большей части они недетерминированы. Это означает, что у вас должно быть намерение относительно того, что вы хотите делать или не делать. Следовательно, любой код и указатели на его основе будут ограничены этим. Почему? Перегрузка оператора — это просто средство для достижения цели. TL;DR: Что вы пытаетесь сделать? Приведите пример.   -  person jrd1    schedule 01.05.2014
comment
Хорошо, чтобы добавить с помощью перегруженного оператора, как должен выглядеть мой синтаксис, если я пытаюсь добавить два часа и минуты, как это будет выглядеть с использованием перегруженного оператора?   -  person MjsGoku    schedule 01.05.2014
comment
Прочитайте здесь. Может помочь вам. Люди пытаются подчеркнуть, что перегрузка операторов в C++ очень, очень, ОЧЕНЬ универсальна (ну, на самом деле в любом языке, который это позволяет). По сути, вы просто определяете символ, который выполняет некоторую операцию в контексте некоторых объектов. Оператор + на самом деле не должен делать ничего, отдаленно напоминающего сложение. Вот почему они хотят знать, чего вы пытаетесь достичь.   -  person aruisdante    schedule 01.05.2014


Ответы (2)


Операторы перегрузки для добавления двух объектов TIME и вычитания объекта TIME из другого:

  TIME operator+(TIME const& rhs) const;
  TIME operator-(TIME const& rhs) const;

Вам нужна функция-член const и TIME const& для аргумента, потому что когда вы это делаете:

  TIME c = a + b;

вы хотели бы иметь дело со случаем, когда a и b являются объектами const.

В реализации:

TIME TIME::operator+(TIME const& rhs) const
{
   TIME res;
   // Compute the resultant
   // ...

   // Return the resultant
   return res;
}

TIME TIME::operator-(TIME const& rhs) const
{
   TIME res;
   // Compute the resultant
   // ...

   // Return the resultant
   return res;
}

Теперь вы можете добавлять и вычитать экземпляры TIME.

person R Sahu    schedule 01.05.2014
comment
И, вообще говоря, математические операторы должны быть const и принимать const, потому что они не должны быть мутаторами, хотя это не обязательно. - person aruisdante; 01.05.2014

Ваша реализация будет выглядеть так: -

TIME TIME::operator+(TIME const& rhs) const
{
   TIME res;
   res.hour = this->hour + rhs.hour;
   res.min = this->min + rhs.min;
   return res;
}

TIME TIME::operator-(TIME const& rhs) const
{
   TIME res;
   res.hour = this->hour - rhs.hour;
   res.min = this->min - rhs.min;

   return res;
}

где «это» — объект в LHS.

person Community    schedule 01.05.2014