Здравствуйте! Требуется реализовать класс Bill. Класс должен включать поля: фамилия, номер телефона, тариф за минуту, скидка, время начала разговора, время окончания разговора, сумма к оплате. Для представления времени используется класс Time. Реализовать методы извлечения и изменения полей. Класс Time: 3 конструктора инициализации: числами, строкой("23:59:59"), секундами. Реализовать методы: вычисление разницы между 2 моментами времени в секундах, сложение времени и заданного количества секунд, вычитание из времени заданного количества секунд, сравнение моментов времени, перевод в секунды, перевод в минуты.
| Код | #ifndef TIME_H #define TIME_H
#include "string.h"
#include <stdlib.h> #include <iostream>
class Time { int hour; int min; int sec; public: Time(int hour, int min, int sec); //Time(char *time); Time(int sec); ~Time(); Time operator-(const Time &time); Time operator+(int sec); Time operator-(int sec); bool operator==(const Time &time); int TranslateSec() const; int TranslateMin() const; friend std::ostream& operator <<(std:: ostream &out, const Time &time); friend std::istream& operator >>(std:: istream &in, Time &time); friend void Bill::ChangeTimeBeg(int p_hour, int p_min, int p_sec); };
#endif
|
| Код | #include "Time.h"
Time::Time(int hour, int min, int sec): hour(hour), min(min), sec(sec) {}
Time::Time(char *time){ }
Time::Time(int sec): hour(sec / 3600), min((sec % 3600) / 60), sec((sec % 3600) % 60) {}
Time::~Time() {}
Time Time::operator-(const Time &time) { int val = TranslateSec() - time.TranslateSec(); Time res(val / 3600, (val % 3600) / 60, (val % 3600) % 60); return res; }
Time Time::operator+(int sec) { int val = TranslateSec() + sec; Time res(val / 3600, (val % 3600) / 60, (val % 3600) % 60); return res; }
Time Time::operator-(int sec) { int val = TranslateSec() - sec; Time res(val / 3600, (val % 3600) / 60, (val % 3600) % 60); return res; }
bool Time::operator==(const Time &time) { if (TranslateSec() == time.TranslateSec()) { return true; } else { return false; } }
int Time::TranslateSec() const { return 3600 * hour + 60 * min + sec; }
int Time::TranslateMin() const { return (TranslateSec() / 60 + 1); }
std::ostream& operator <<(std::ostream &out, const Time &time) { out << time.hour << " " << time.min << " " << time.sec << std::endl; return out; }
std::istream& operator >>(std::istream &in, Time &time) { in >> time.hour >> time.min >> time.sec; return in; }
|
| Код | #ifndef BILL_H #define BILL_H
#include <iostream>
#include "Time.h"
class Bill { char *surname; int phone_num[11]; double rate_min; int discount; Time time_beg; Time time_end; double sum_pay; public: Bill(char *surname, int p_phone_num, double rate_min, int discount, int hour_beg, int min_beg, int sec_beg, int hour_end, int min_end, int sec_end, double sum_pay); ~Bill(); friend std::ostream& operator <<(std:: ostream &out, const Bill &bill); friend std::istream& operator >>(std:: istream &in, Bill &bill); char *GetSurname(); void ChangeSurname(char *p_surname); int *GetPhoneNum(); void ChangePhoneNum(int p_phone_num); double GetRateMin(); void ChangeRateMin(double p_rate_min); int GetDiscount(); Time GetTimeBeg(); void ChangeTimeBeg(int p_hour, int p_min, int p_sec); Time GetTimeEnd(); void CountSum(); double toString(); };
#endif
|
| Код | #include "Bill.h"
Bill::Bill(char *surname, int p_phone_num, double rate_min, int discount, int hour_beg, int min_beg, int sec_beg, int hour_end, int min_end, int sec_end, double sum_pay) : surname(surname), rate_min(rate_min), time_beg(hour_beg, min_beg, sec_beg), time_end(hour_end, min_end, sec_end), discount(discount), sum_pay(sum_pay){ for (int i = 0; i < 11; i++) { phone_num[i] = p_phone_num; } }
Bill::~Bill() {}
std::ostream& operator <<(std::ostream &out, const Bill &bill) { out << bill.surname << std::endl; out << bill.phone_num << std::endl; out << bill.rate_min << std::endl; out << bill.discount << std::endl; out << bill.time_beg << std::endl; out << bill.time_end << std::endl; out << bill.sum_pay << std::endl; return out; }
std::istream& operator >>(std::istream &in, Bill &bill) { in >> bill.surname >> (*bill.phone_num) >> bill.rate_min >> bill.discount >> bill.time_beg >> bill.time_end >> bill.sum_pay; return in; } char *Bill::GetSurname() { return surname; }
void Bill::ChangeSurname(char *p_surname) { surname = p_surname; }
int *Bill::GetPhoneNum() { return phone_num; }
void Bill::ChangePhoneNum(int p_phone_num) { for (int i = 0; i < 11; i++) { phone_num[i] = p_phone_num; } }
double Bill::GetRateMin() { return rate_min; }
void Bill::ChangeRateMin(double p_rate_min) { rate_min = p_rate_min; }
Time Bill::GetTimeBeg() { return time_beg; }
void Bill::ChangeTimeBeg(int p_hour, int p_min, int p_sec) { time_beg.hour = p_hour; time_beg.min = p_min; time_beg.sec = p_sec; }
Time Bill::GetTimeEnd() { return time_end; }
void Bill::CountSum() { sum_pay = rate_min * (time_end - time_beg).TranslateMin() - discount; }
double Bill::toString() { return sum_pay;
|
Возникла проблема, как реализовать метод изменения начала и окончания времени разговора, ведь он является объектом другого класса. Как дружественную функцию не удается создать. Также затрудняюсь с тем, как реализовать конструктор инициализации, принимающий строку. В main возникает ошибка при создании объекта Bill bill1(0); пишет, что error C2664: Bill::Bill(const Bill &): невозможно преобразовать параметр 1 из 'int' в 'const Bill &'. Буду очень благодарна за помощь! |