C ++ получает текущее время в моем конструкторе - PullRequest
0 голосов
/ 13 ноября 2018

Это мой вопрос:

(Enhancing Class Time) Предоставить конструктор, который способен использовать текущее время из функций времени и локального времени, объявленных в заголовке стандартной библиотеки C ++, для инициализацииобъект класса Time.

Вот мой код: .h файл

#ifndef TIME
#define TIME

class Time
{
public:
Time();
Time(int, int, int);
void Display();
private:
int hour, minute, second;
};
#endif // !1

.cpp файл

#include "Time.h"
#include <ctime>
#include <iostream>


using namespace std;

Time::Time(){}
Time::Time(int h, int m, int s)
{
hour = h;
minute = m;
second = s;
time_t currenttime;
struct tm timeinfo;
time(&currenttime);
localtime_s(&timeinfo, &currenttime);

h = timeinfo.tm_hour;
m = timeinfo.tm_min;
s = timeinfo.tm_sec;
}

void Time::Display()
{
cout << hour << ":" << minute << ":" << second << endl;
}

main.cpp файл

#include <iostream>
#include "Time.h"
#include <ctime>

int main()
{
    Time currentTime;

    currentTime.Display();

    system("pause");
    return 0;
}

Выход:

-858993460: -858993460: -858993460

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Вы немного перепутали код ctor, оставляя членские переменные неинициализированными при использовании ctor по умолчанию.

Time::Time()
{
    // Initialize to the current time
    time_t currenttime;
    struct tm timeinfo;
    time(&currenttime);
    localtime_s(&timeinfo, &currenttime);
    hour = timeinfo.tm_hour;
    minute = timeinfo.tm_min;
    second = timeinfo.tm_sec;
}

// Modified to use initializer list
Time::Time(int h, int m, int s) :
    hour(h), minute(m), second(s)
{
}
0 голосов
/ 13 ноября 2018

ваше время не инициализировано должным образом, поэтому вы получаете эти значения ...

и когда вы делаете

Time currentTime;

вы создаете объект Time, используя конструктор по умолчанию, оставляя поля неинициализированными ....

сделать что-то вроде

private:
int hour{0};
int minute{0};
int second{0};

другой трюк может быть вызван 2-й констант из по умолчанию, потому что там, где вы поместили логику для инициации объекта ...

Time::Time() : Time(0, 0, 0)
{}
...