Форум программистов, компьютерный форум CyberForum.ru

работа с указателями и классами - C++

Восстановить пароль Регистрация
 
TheAthlete
 Аватар для TheAthlete
151 / 151 / 12
Регистрация: 31.08.2010
Сообщений: 529
14.03.2011, 16:24     работа с указателями и классами #1
Здравствуйте! Пишу класс для работы с датами, необходимо выполнять различные операции с датами.

Собственно код:

Date.h

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#ifndef DATE_H
#define DATE_H
 
#include <ctime>
 
class Date {
private:
    int day; // день
    int month; // месяц
    int year; // год
    
    tm* timeinfo;
 
    time_t seconds;
    time_t rawtime;
public:
    Date(): day(0), month(0), year(0) {}
    Date(int d, int m, int y);
    ~Date() { delete timeinfo; }
 
    time_t getSeconds() const { return seconds; }
    tm* getTimeInfo() const { return timeinfo; }
    void printTimeInfo(); // выводим на экран значения структуры timeinfo
};
#endif
Date.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include "Date.h"
#include <iostream>
 
using std::cout;
using std::endl;
 
Date::Date(int d, int m, int y) {
    day = d;
    month = m;
    year = y;
 
    time( &rawtime );
    timeinfo = localtime( &rawtime );
 
    timeinfo->tm_year = y - 1900;
    timeinfo->tm_mon = m - 1;
    timeinfo->tm_mday = d;
 
    seconds = mktime(timeinfo);
}
 
void Date::printTimeInfo() {
    cout << "День: " << timeinfo->tm_mday << endl;
    cout << "Месяц: " << timeinfo->tm_mon + 1 << endl;
    cout << "Год: " << timeinfo->tm_year + 1900 << endl;
    cout << "День недели: " << timeinfo->tm_wday << endl;
    cout << "День года: " << timeinfo->tm_yday + 1 << endl;
}
main.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include "Date.h"
 
using std::cout;
using std::endl;
 
int main() {
            Date data_nach(7, 6, 2002);
    Date data_kon(25, 6, 2002);
 
    data_nach.printTimeInfo();
    cout << "===============" << endl;
    
    data_kon.printTimeInfo();
    cout << "===============" << endl;
 
    return 0;
}
Но столкнулся с небольшой проблемой:

вывод для данной программы будет следующий:
День: 7
...
=======
День: 7
...

т.е. день не меняется, вероятно здесь где-то утечка памяти

А если сделать следующим образом, то все нормально:

C++
1
2
3
4
5
6
7
Date data_nach(7, 6, 2002);
    data_nach.printTimeInfo();
    cout << "===============" << endl;
    
    Date data_kon(25, 6, 2002);
    data_kon.printTimeInfo();
    cout << "===============" << endl;
Вывод:

День: 7
...
=======
День: 25
...

Кто знает, в чем проблема
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.03.2011, 16:24     работа с указателями и классами
Посмотрите здесь:

C++ Работа с указателями
C++ Работа с указателями
C++ Работа с указателями
работа с указателями C++
Работа с указателями C++
работа с указателями C++
C++ работа с указателями
Работа с указателями C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
15.03.2011, 02:50     работа с указателями и классами #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
 
#include <iostream>
 
#include <ctime>
 
class Date {
private:
        int day; // день
        int month; // месяц
        int year; // год
        
        tm timeinfo;
 
        time_t seconds;
        time_t rawtime;
public:
        //Date(): day(0), month(0), year(0) {}
        Date(int d, int m, int y);
        ~Date() { }
 
        time_t getSeconds() const { return seconds; }
        tm getTimeInfo() const { return timeinfo; }
        void printTimeInfo(); // выводим на экран значения структуры timeinfo
};
 
using std::cout;
using std::endl;
 
Date::Date(int d, int m, int y) {
        day = d;
        month = m;
        year = y;
        tm *tp;
        
        time( &rawtime );
        if ((tp = localtime( &rawtime )))
            timeinfo = *tp;
 
        timeinfo.tm_year = y - 1900;
        timeinfo.tm_mon = m - 1;
        timeinfo.tm_mday = d;
 
        seconds = mktime(&timeinfo);
}
 
void Date::printTimeInfo() {
        cout << "День: " << timeinfo.tm_mday << endl;
        cout << "Месяц: " << timeinfo.tm_mon + 1 << endl;
        cout << "Год: " << timeinfo.tm_year + 1900 << endl;
        cout << "День недели: " << timeinfo.tm_wday << endl;
        cout << "День года: " << timeinfo.tm_yday + 1 << endl;
}
 
using std::cout;
using std::endl;
 
int main() {
    Date data_nach(7, 6, 2002);
    Date data_kon(25, 6, 2002); 
         
        
    data_nach.printTimeInfo();
    cout << "===============" << endl;
        
 
    data_kon.printTimeInfo();
    cout << "===============" << endl;
 
    cout << "end" << endl;
        
    return 0;
}
TheAthlete
 Аватар для TheAthlete
151 / 151 / 12
Регистрация: 31.08.2010
Сообщений: 529
19.03.2011, 15:54  [ТС]     работа с указателями и классами #3
Большое спасибо! Разобрался
Yandex
Объявления
19.03.2011, 15:54     работа с указателями и классами
Ответ Создать тему
Опции темы

Текущее время: 17:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru