Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
TheAthlete
153 / 153 / 13
Регистрация: 31.08.2010
Сообщений: 535
#1

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

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

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

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

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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.03.2011, 16:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос работа с указателями и классами (C++):

Работа с указателями - C++
Написать программу работы с указателями. LONG *p1; ULONG x = 5; LONG y = -1; LONG *p2 = p1 + 50; p2 = p2 + x * y; *p2 = 1; ...

Работа с указателями - C++
Подскажите пожалуйста, зачем написано * Rad_to_deg void show_polar (const polar * pda) { using namespace std; const...

работа с указателями - C++
#include &lt;iostream&gt; using namespace std; int main() { char *res=&quot;&quot;; res=&quot;1&quot;; res=&quot;2&quot;; ...

работа с указателями - C++
Как ПРАВИЛЬНО передать в функцию, массив, используя адресацию? Программа находит в массиве слово и перед ним вставляет какое то слово, то...

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

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

2
accept
4825 / 3246 / 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;
}
0
TheAthlete
153 / 153 / 13
Регистрация: 31.08.2010
Сообщений: 535
19.03.2011, 15:54  [ТС] #3
Большое спасибо! Разобрался
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2011, 15:54
Привет! Вот еще темы с ответами:

Работа с указателями - C++
#include &lt;iostream&gt; #include &lt;cstdio&gt; #include &lt;iomanip&gt; using namespace std; int main() { int i;float f;long int l;double d;...

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

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

Работа с указателями - C++
Доброго времени суток, нужна помощь. Данный две задачи, обе работают правильно: Дан целочисленный массив размера N. Преобразовать...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru