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);
};
|
Не могу догнать, как перегружать операцию минус и все, хоть ты режь. Может кто подскажет в чем ошибка или даст пример своего решения.
Заранее благодарен всем ответившим!! |
|
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
|
что тут сказать, не можешь прегрузитьминус, изобрети свой оператор
например (??_?? ) он будет минусом, кстати мертвая африканская птица такое тоже допускает, и даже советует, прикинь, дашь кому почитать листинг, а там такое, у не посвещенного глаза вылезуть,
можно в заместо литерала (-) использовать матерное слово,
то же ништяк |
|
khan |
Отправлено: 13.02.2007, 14:45 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 19
|
про это можно почитать в "Философия С++" Брюса Эккеля (Том 1 для начала) |
|