Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
174 / 170 / 19
Регистрация: 31.08.2010
Сообщений: 573
1

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

14.03.2011, 16:24. Показов 825. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Пишу класс для работы с датами, необходимо выполнять различные операции с датами.

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

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
...

Кто знает, в чем проблема
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.03.2011, 16:24
Ответы с готовыми решениями:

Работа с указателями
Написать программу, в которой выполнить следующие действия: 1) Описать указатели на все известные...

Работа с указателями
Помогите пожалуйста объяснить, не понимаю почему число присваемое через указатель *А в кавычках, и...

Работа с указателями
Есть объект (студент) с полями, в которых расположены имя и оценки. Создан объект(база данных) с...

Работа с указателями
Дана динамическая целочисленная матрица. Построить динамический одномерный массив, каждый элемент...

2
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
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;
}
0
174 / 170 / 19
Регистрация: 31.08.2010
Сообщений: 573
19.03.2011, 15:54  [ТС] 3
Большое спасибо! Разобрался
0
19.03.2011, 15:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.03.2011, 15:54
Помогаю со студенческими работами здесь

Работа с указателями
Здравствуйте! Есть массив созданный ГСС. Надо написать функция которая вычисляет сколько в нем...

Работа с указателями
Всем здравия. Нужна ваша помощь. Есть задание по С++. К сожалению работала в основном по С# да и с...

работа с указателями
Помогите решить задачу в С++ (я в этом начиющий): 1)Из положительных значений двух целочисленных...

работа с указателями в
Всем приятного дня, друзья, вынужден просить вас помощи в написании следующей задачи: Присвоить...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru