Мой класс Время может отображать время в зависимости от статических переменных часов в день и минуту через час. Я хотел бы иметь возможность печатать обновленное время, просто меняя свои статические переменные.Как обновлять экземпляры, обновляя статические переменные?
В моем основном(), я хочу объявить некоторые экземпляры времени на основе статических переменных по умолчанию (24 часа в день и 60 минут в час).
Time a;
Time b(5);
Time c(61);
cout << "a = " << a << "\t";
cout << "b = " << b << "\t";
cout << "c = " << c << "\n";
// output is a = 0:00 b = 0:05 c = 1:01
Time::set_hr_in_day(60);
Time::set_min_in_hr(24);
cout << "a = " << a << "\t";
cout << "b = " << b << "\t";
//output should be a = 0:00 b = 0:05 c = 2:13
Однако код по-прежнему распечатывает номера статических переменных по умолчанию.
Любые идеи относительно того, как я могу это исправить? Кстати, я пытаюсь создать класс для тестирования с заданным драйвером, поэтому изменение моей основной функции не является вариантом.
Вот остальная часть моего кода:
заголовочный файл
#ifndef TIME_H
#define TIME_H
#include <iostream>
using namespace std;
class Time {
private:
int hour;
int minute;
static int dayhrs;
static int hrsmin;
public:
Time();
Time(int min);
Time(int hr, int min);
Time(double hrs);
int minutes() { return minute; };
int hours() { return hour; };
static void set_hr_in_day(int hr);
static void set_min_in_hr(int min);
static int dailyhr() { return dayhrs; };
static int hourlymin() { return hrsmin; };
friend ostream& operator<<(ostream& os, const Time& t);
};
#endif
реализация
#include "time.h"
#include <iostream>
using namespace std;
int Time::dayhrs = 24;//default
int Time::hrsmin = 60;
void Time::set_hr_in_day(int hr) {
dayhrs = hr;
}
void Time::set_min_in_hr(int min) {
hrsmin = min;
}
Time::Time() {
hour = 0;
minute = 0;
}
Time::Time(int min) {
if (min > (Time::hourlymin() - 1)) {
hour = min/Time::hourlymin();
minute = min % Time::hourlymin();
}
else {
hour = 0;
minute = min;
}
}
Time::Time(int hr, int min) {
if (min > (Time::hourlymin() - 1)) {
hour = min/Time::hourlymin() + hr;
minute = min % Time::hourlymin();
}
else {
hour = hr;
minute = min;
}
if (hour > (Time::dailyhr() - 1))
hour = hour % (Time::dailyhr());
}
Time::Time(double hrs) {
double fraction = 0;
fraction = hrs - (int)hrs;
minute = fraction * Time::hourlymin();
if (fraction * Time::hourlymin() - (int)(fraction * Time::hourlymin()) >= 0.5)
minute += 1;
hour = hrs - fraction;
if (hour > (Time::dailyhr() - 1))
hour = hour % (Time::dailyhr());
}
ostream& operator<<(ostream& os, const Time& t)
{
if (t.minute > 9)
os << t.hour << ":" << t.minute;
else
os << t.hour << ":0" << t.minute;
return os;
}
водитель
#include <iostream>
#include "time.h"
using std::cout;
int main() {
cout << "*****************************************\n";
cout << "Welcome to 'San Angel'!\n";
cout << "[ 1 day = 24 hours, 1 hour = 60 minutes ]\n\n";
Time a;
Time b(5);
Time c(61);
Time d(47, 59);
Time X(5.0);
Time Y(1.5);
Time Z(25.1);
cout << "a = " << a << "\t";
cout << "b = " << b << "\t";
cout << "c = " << c << "\n";
cout << "d = " << d << "\t";
cout << "X = " << X << "\t";
cout << "Y = " << Y << "\n";
cout << "\t\tZ = " << Z << "\n";
Time::set_hr_in_day(60);
Time::set_min_in_hr(24);
cout << "*****************************************\n";
cout << "Welcome to the land of the remembered!\n";
cout << "[ 1 day = 60 hours, 1 hour = 24 minutes ]\n\n";
cout << "a = " << a << "\t";
cout << "b = " << b << "\t";
cout << "c = " << c << "\n";
cout << "d = " << d << "\t";
cout << "X = " << X << "\t";
cout << "Y = " << Y << "\n";
cout << "\t\tZ = " << Z << "\n";
return 0;
}
/**
OUTPUT:
*****************************************
Welcome to 'San Angel'!
[ 1 day = 24 hours, 1 hour = 60 minutes ]
a = 0:00 b = 0:05 c = 1:01
d = 23:59 X = 5:00 Y = 1:30
Z = 1:06
*****************************************
Welcome to the land of the remembered!
[ 1 day = 60 hours, 1 hour = 24 minutes ]
a = 0:00 b = 0:05 c = 2:13
d = 59:23 X = 12:12 Y = 3:18
Z = 2:18 */
Правильный инструмент для решения таких проблем - ваш отладчик. Перед тем, как просить о переполнении стека, вы должны пропустить свой код по очереди *. Для получения дополнительной информации, пожалуйста, прочтите [Как отлаживать небольшие программы (Эрик Липперт)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Как минимум, вы должны \ [изменить] ваш вопрос, чтобы включить пример [Минимальный, полный и проверенный] (http://stackoverflow.com/help/mcve), который воспроизводит вашу проблему, а также замечания, сделанные вами в отладчик. –
Хорошо, спасибо, я посмотрю. Просто изучая язык, поэтому я не слишком хорошо разбираюсь в том, как использовать отладчик. – coeurs