C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Создание класса и использование методов класса, Помогите разобраться
cyber_glitch
Отправлено: 02.02.2007, 09:26


Ученик-кочегар

Группа: Участник
Сообщений: 4



Есть следующее задание:

Определить класс “TТime”, предусмотрев в нем компонентные данные: год, месяц, день, час, минуты; компонентные функции “вывода на экран”, “получение каждого элемента данных по отдельности”. Определить дружественную операцию-функцию, перегружающую операцию “-” и определяющую промежуток времени (в часах и минутах) между двумя событиями.

Просидел над ним с учебниками, вот, что вымучал:

CODE

class TTime
 {
   int year,month,day;
   int hour,minute;

   public:
   TTime(int y,int mh,int d,int h,int mt)
   {
     year=y;
     month=mh;
     day=d;
     hour=h;
     minute=mt;
   }

   void show_all()
   {
     Form1->Memo1->Clear();
     Form1->Memo1->Lines->Add(IntToStr(year)+" "+IntToStr(month)+" "+IntToStr(day));
     Form1->Memo1->Lines->Add(IntToStr(hour)+" "+IntToStr(minute));
   }

   void show_ones(AnsiString what)
   {
     if (what=="year") ShowMessage(year);
     if (what=="month") ShowMessage(month);
     if (what=="day") ShowMessage(day);
     if (what=="hour") ShowMessage(hour);
     if (what=="minute") ShowMessage(minute);
   }

   friend TTime operator- (const TTime,const TTime);
 };


Не могу догнать, как перегружать операцию минус и все, хоть ты режь. Может кто подскажет в чем ошибка или даст пример своего решения.
Заранее благодарен всем ответившим!! yahoo.gif
Valdemar
Отправлено: 02.02.2007, 10:43


Мастер участка

Группа: Участник
Сообщений: 433



Вы не можете перегрузить оператор вообще (т.е. не знаете как это сделать для любого оператора) или же не знаете как сделать перегрузку оператора именно для вашего класса?
И еще несколько общих замечаний:
1. Можно предусмотреть значения по умолчанию для данных класса, если это кнужно
2. В методе show_all вывод вы осуществляете в жестко заданный Memo конктретной формы, а это как-то неправильно. Лучше сделать возвращение текстовой строки, содержащей дату и время, а потом выводить ее куда угодно.
cyber_glitch
Отправлено: 02.02.2007, 11:35


Ученик-кочегар

Группа: Участник
Сообщений: 4



Проблемы и в целом с перегрузкой операций и конкретно в моем классе. По поводу замечаний спасибо, я обязательно учту это.

И если можно, посоветуйте что-нибудь почитать по классам и перегрузке операций. Только если такое есть, попроще и с примерами. Еще раз спасибо.
Valdemar
Отправлено: 02.02.2007, 13:48


Мастер участка

Группа: Участник
Сообщений: 433



Вот пример из книги Б. Страуструпа Язык программирования С++:
CODE
class complex {
 double re, im;
 public:
 complex(double r, double i =0) { re=r; im=i; }
 friend complex operator+(complex, complex);
 friend complex operator*(complex, complex);
 complex& operator+=(complex);
 complex& operator*=(complex);
 complex& operator*=(double);
// ...
};
inline complex& complex::operator+=(complex a)
{
 re += a.re;
 im += a.im;
 return *this;
}
inline complex operator+(complex a, complex b)
{
 return complex(a.re+b.re, a.im+b.im);
}

А почитать можно того же Б. Страуструпа "Язык программирования С++", Р. Лафоре "Объектно-ориентированное программирование в С++" или любую другую книгу по С++
nawok78
Отправлено: 02.02.2007, 17:15


Станционный диспетчер

Группа: Участник
Сообщений: 115



[QUOTE]Не могу догнать, как перегружать операцию минус и все, хоть ты режь. Может кто подскажет в чем ошибка или даст пример своего решения.[/UOTE]
какие-то ошибки выдает или что?

считай что эта функция — конструктор нового экземпляра класса , который содержит новые данные соответствующие разнице м/у датами. учти что у тебя для этого должен быть определен коструктор
TTime (const &TTime)

CODE

TTime::TTime(const &TTime t)
{
Year=t.Year;
....
}


да еще желателен дефолтный конструктор
CODE

TTime::TTime()
{
 Year=0;
....
}


Отредактировано nawok78 — 02.02.2007, 17:16
ion
Отправлено: 13.02.2007, 14:19


Ученик-кочегар

Группа: Участник
Сообщений: 15



что тут сказать, не можешь прегрузитьминус, изобрети свой оператор
например (??_?? ) он будет минусом, кстати мертвая африканская птица такое тоже допускает, и даже советует, прикинь, дашь кому почитать листинг, а там такое, у не посвещенного глаза вылезуть,
можно в заместо литерала (-) использовать матерное слово,
то же ништяк smile.gif
khan
Отправлено: 13.02.2007, 14:45


Ученик-кочегар

Группа: Участник
Сообщений: 19



про это можно почитать в "Философия С++" Брюса Эккеля (Том 1 для начала)

Вернуться в Вопросы программирования в C++Builder