Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

«Программирование на С++ с использованием классов. Перегрузка операторов»

sdfgd58 Ученик (41), на голосовании 2 месяца назад
Знакомство с объектно-ориентированным
программированием в С++. Изучение общих понятий о классах - поля класса,
методы класса (конструктор, деструктор и другие методы). Изучение возможности перегрузки операторов в С++.
Помогите пожалуйста если не трудно,заранее спасибо
Голосование за лучший ответ
Sergio 2.1 Оракул (67303) 3 месяца назад
 #include  
#include

class Time {
private:
int hours;
int minutes;
int seconds;

void normalize() {
minutes += seconds / 60;
seconds %= 60;
hours += minutes / 60;
minutes %= 60;
hours %= 24;
}

public:
// Конструктор
Time(int h = 0, int m = 0, int s = 0) : hours(h), minutes(m), seconds(s) {
normalize();
}

// Деструктор
~Time() {
std::cout << "Время удалено" << std::endl;
}

// Метод вывода времени и составляющей суток
void display() const {
std::cout << hours << ":" << minutes << ":" << seconds << " - ";
if (hours < 6) std::cout << "ночь";
else if (hours < 12) std::cout << "утро";
else if (hours < 18) std::cout << "день";
else std::cout << "вечер";
std::cout << std::endl;
}

// Перегрузка оператора сложения
Time operator+(const Time& other) const {
return Time(hours + other.hours, minutes + other.minutes, seconds + other.seconds);
}

// Перегрузка оператора вычитания
Time operator-(const Time& other) const {
int total_seconds = (hours * 3600 + minutes * 60 + seconds) -
(other.hours * 3600 + other.minutes * 60 + other.seconds);
if (total_seconds < 0) total_seconds += 24 * 3600;
return Time(total_seconds / 3600, (total_seconds % 3600) / 60, total_seconds % 60);
}

// Перегрузка оператора меньше
bool operator<(const Time& other) const {
if (hours != other.hours) return hours < other.hours;
if (minutes != other.minutes) return minutes < other.minutes;
return seconds < other.seconds;
}

// Перегрузка оператора больше
bool operator>(const Time& other) const {
return other < *this;
}
};

int main() {
Time t1(10, 30, 0);
Time t2(8, 45, 30);
Time t3(2, 15, 45);
Time t4(15, 0, 0);

std::cout << "t1: "; t1.display();
std::cout << "t2: "; t2.display();
std::cout << "t3: "; t3.display();
std::cout << "t4: "; t4.display();

Time T1 = t1 + t3;
Time T2 = t4 - t2;

std::cout << "T1 (t1 + t3): "; T1.display();
std::cout << "T2 (t4 - t2): "; T2.display();

if (T1 < T2) {
std::cout << "T1 меньше T2" << std::endl;
} else if (T1 > T2) {
std::cout << "T1 больше T2" << std::endl;
} else {
std::cout << "T1 равно T2" << std::endl;
}

return 0;
}
sdfgd58Ученик (41) 3 месяца назад
спасибо
Unknown Unknown Гуру (4950) 3 месяца назад
Чувак, я лишь скажу, что ты точно обязан реализовать ещё конструктор копирования, оператор присваивания копированием, конструктор перемещения, оператор присваивания перемещением, ибо так гласит "Правило пяти"
Похожие вопросы