Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
3 / 3 / 2
Регистрация: 09.10.2012
Сообщений: 94

Реализация перегруженного конструктора

20.04.2015, 10:55. Показов 1308. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Друзья, помоги с перегрузкой конструктора.
Вообще задач от программы, что бы можно было задавать месяц такого вида 28.01.1994 и 28.января.1994.
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include <iostream>
using namespace std;
 
class Date
{
public:
    int day;
    int month;
    int year;
 
    Date(int Day = 0, int Month = 0, int Year = 0)
    {
        day = Day;
        month = Month;
        year = Year;
    }
        Date(int Day = 0, char* Month = "0", int Year = 0) // ПЕРЕГРУЖЕННЫЙ КОНСТРУКТОР ДЛЯ СТРОКИ
    {
        day = Day;
        month =... //ЧТО В ТЕЛЕ ДОЛЖНЫ ПЕРЕДАВАТЬ? 
        year = Year;
    }
 
    int MonthFunc(char* Month) //ФУНКЦИЯ СРАВНЕНИЯ, СОВМНЕВАЮСЬ, ЧТО ПРАВИЛЬНО
    {
        string m[12] = {"January","February","March","April","May","June","July","August","September","October","November","December"};
        
        for ( int i = 0; i < 12; i++)
        { 
            if( stricmp(Month,m[i])==0)
             month = i;
        }
 
        return i;
    }
 
    void Get() //ввод данных
    {
       cout << "Введите день: ";
       cin >> day;
 
       while(day > 31 || day == 0)
       {
          cout << "Некорректное значение " << endl;
          cout << "Введите день: ";
          cin >> day;
       }
 
       cout << "Введите месяц: ";
       cin >> month;
 
       cout << "Введите год: ";
       cin >> year;
    }
 
    int maxday() //Последние дни месяцев
    {
        int days[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
        return days[month-1];
    }
 
    Date operator+=(int d)
    {
        if(day + d > maxday())
        {
            d -= maxday() - day;
            if(++month > 12)
            {
                month = 1;
                year++;
            }
 
            while(d/maxday())
            {
                if(++month > 12)
                {
                    month = 1;
                    year++;
                }
                d -= maxday();
            }
            day = d;
        }
 
        else 
            day += d;
        return *this;
    }
    
    Date operator -=(int d)
    {
        if(day - d < 1)
        {
            d -= day;
            if(--month == 0)
            {
                month = 12;
                year--;
            }
 
            while(d/maxday())
            {
                d-=maxday();
                if(--month==0)
                {
                    month=12;
                    year--;
                }
            }
            day=maxday()-d;
        }
 
        else 
            day-=d;
        return *this;
    }
  
    
    void print()
    {
        cout <<"День:"<< day <<"\tМесяц: "<< month <<" Год:"<< year << endl;
    }
};
 
void main()
{
    system("color F0");
    setlocale(LC_ALL, "Russian"); 
 
    Date d; 
    d.Get();
    d.print();
 
    int r; //+/-
    int zn; //На ск. дней
 
    cout<<"\n"<<"Введите значение: 0 - если прибавить дни; 1 - если убавить дни"<<endl;
    cin>>r;
 
    cout<<"\nНа сколько дней нужно изменить: ";
    cin>>zn;
 
    if(r == 0)
        d+=zn;  
    else
        d-=zn;
 
    d.print();
    system("pause");
}
Добавлено через 1 час 13 минут
Up@@
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.04.2015, 10:55
Ответы с готовыми решениями:

Нужно объект типа класс проинициализировать с помощью перегруженного конструктора Class::Class( bool a )
Плиз помогите. Не знал, что я такой чайник.) Итак: есть два класса: CMyClass.h CMyClass.cpp и

Реализация конструктора
Доброго времени суток! Подскажите пожалуйста как реализовать создание конструктора с функцией создания массивов, с условиями что: ...

Реализация конструктора класса
Здравствуйте! Хотел задать такой вопрос: Предположим, имеется класс: class Object { private: int itsVal1; int...

19
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 35
20.04.2015, 10:57
kn0w, передавайте в конструктор строку, а внутри конструктора уже разбирайте по разделителям.
0
3 / 3 / 2
Регистрация: 09.10.2012
Сообщений: 94
20.04.2015, 11:01  [ТС]
Таким образом ? Ругается.
C++
1
2
3
4
5
6
7
        Date(int Day = 0, char* Month = "0", int Year = 0)
    {
        day = Day;
        month = new char[strlen(Month)+1];
        strcpy_s(month, strlen(Month)+1, Month);
        year = Year;
    }
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 35
20.04.2015, 11:03
kn0w, под строкой я имела в виду полностью строку, вводимую пользователем.
C++
1
Date(const std::string mDate)
А внутри конструктора разбираете. Посимвольно.
0
3 / 3 / 2
Регистрация: 09.10.2012
Сообщений: 94
20.04.2015, 12:31  [ТС]
А разница ?
C++
1
2
3
4
5
6
7
8
9
Date(int Day = 0, string Month = "0", int Year = 0)
    {
        day = Day;
        for(int i = 0; i < 12; i++)
        {
            month = Month[i];
        }
        year = Year;
    }
Добавлено через 48 минут
Все равно не работает

Добавлено через 2 минуты
Нужно char* в int преобразовать

Добавлено через 27 минут
Ни кто не знает как преобразование сделать?
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
20.04.2015, 12:35
C++
1
int atoi(char*)
0
3 / 3 / 2
Регистрация: 09.10.2012
Сообщений: 94
20.04.2015, 12:36  [ТС]
А как он мне по такой конструкции поймет, что Январь это 1.
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
20.04.2015, 12:38
Лучший ответ Сообщение было отмечено kn0w как решение

Решение

C++
1
month =MonthFunc(Month);
1
3 / 3 / 2
Регистрация: 09.10.2012
Сообщений: 94
20.04.2015, 13:06  [ТС]
Вот я дно, спасибо большое!

Добавлено через 25 минут
Еще есть один вопросик, при вызове конструктора с параметрами все работает, а при вводе, он всегда вызывает первый конструктор где месяц int как это подправить.
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
20.04.2015, 13:30
Цитата Сообщение от kn0w Посмотреть сообщение
Date d;
Вызов конструктора без параметров, компилятор решил что это будет вызов с интами(т.е будут подставлены значения по умолчанию для параметров)(наверняка был ворнинг, ну или будет ворнинг если добавить какуюнить опцию компилятору)
0
3 / 3 / 2
Регистрация: 09.10.2012
Сообщений: 94
20.04.2015, 13:40  [ТС]
Ну да это понятно. Если я задаю параметры для перегруженного конструктора что то типа
C++
1
Date d (23,"may",1994) все работает, но мне надо когда у меня метод d.Get() вызывается и я ввожу 23 may не должен ругать , но ругается из за того, что он же не может в int "may" хранить - сразу выскакивает конец программы.
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#include <iostream>
using namespace std;
 
class Date
{
 
    int day;
    int month;
    int year;
public:
 
    Date(int Day, int Month, int Year)
    {
        day = Day;
        month = Month;
        year = Year;
    }
 
        Date(int Day = 0, char* Month = "Non" , int Year = 0 )
    {
        day = Day;
        month = monthChar(Month);
        year = Year;
    }
 
    int monthChar(char* Month)
    {
        char* m[12] = {"January","February","March","April","May","June","July","August","September","October","November","December"};
        
        for ( int i = 0; i < 12; i++)
        { 
            if( stricmp(Month,m[i])==0)
             month = i+1;
        }
 
        return month;
    }
 
    void Get() //ввод данных
    {
       cout << "Введите день: ";
       cin >> day;
 
       while(day > 31 || day == 0)
       {
          cout << "Некорректное значение " << endl;
          cout << "Введите день: ";
          cin >> day;
       }
 
       cout << "Введите месяц: ";
       cin >> month;
 
       cout << "Введите год: ";
       cin >> year;
    }
 
    int maxday() //Последние дни месяцев
    {
        int days[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
        return days[month-1];
    }
 
    Date operator+=(int d)
    {
        if(day + d > maxday())
        {
            d -= maxday() - day;
            if(++month > 12)
            {
                month = 1;
                year++;
            }
 
            while(d/maxday())
            {
                if(++month > 12)
                {
                    month = 1;
                    year++;
                }
                d -= maxday();
            }
            day = d;
        }
 
        else 
            day += d;
        return *this;
    }
    
    Date operator -=(int d)
    {
        if(day - d < 1)
        {
            d -= day;
            if(--month == 0)
            {
                month = 12;
                year--;
            }
 
            while(d/maxday())
            {
                d-=maxday();
                if(--month==0)
                {
                    month=12;
                    year--;
                }
            }
            day=maxday()-d;
        }
 
        else 
            day-=d;
        return *this;
    }
  
    
    void print()
    {
        cout <<"День:"<< day <<"\tМесяц: "<< month <<" Год:"<< year << endl;
    }
};
 
void main()
{
    system("color F0");
    setlocale(LC_ALL, "Russian"); 
 
    Date d(23,"may",1994);
d.print();
    d.Get();
 
    int r; //+/-
    int zn; //На ск. дней
 
    cout<<"\n"<<"Введите значение: 0 - если прибавить дни; 1 - если убавить дни"<<endl;
    cin>>r;
 
    cout<<"\nНа сколько дней нужно изменить: ";
    cin>>zn;
 
    if(r == 0)
        d+=zn;  
    else
        d-=zn;
 
    d.print();
    system("pause");
}
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
20.04.2015, 13:53
Цитата Сообщение от kn0w Посмотреть сообщение
cout << "Введите месяц: ";
cin >> month;
вводить всегда надо цифру
0
3 / 3 / 2
Регистрация: 09.10.2012
Сообщений: 94
20.04.2015, 14:03  [ТС]
Сам я никаким образом задать месяц в таком формате не смогу 28 мая 2015 ?
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
20.04.2015, 14:09
можете, из майн, и вызвать соотв.конструктор
0
3 / 3 / 2
Регистрация: 09.10.2012
Сообщений: 94
20.04.2015, 14:33  [ТС]
При этом поле month всеравно как char надо объявлять ?
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
20.04.2015, 14:39
Цитата Сообщение от kn0w Посмотреть сообщение
При этом поле month всеравно как char надо объявлять ?
как int было, так и оставьте, просто вызывайте соответствующую версию конструктора
0
3 / 3 / 2
Регистрация: 09.10.2012
Сообщений: 94
20.04.2015, 15:02  [ТС]
C++
1
2
3
4
5
int day,year,month;
    
    cin>>day>>month>>year;  
   
    Date d(day,month,year);
Не будет же работать.
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
20.04.2015, 15:09
почему не будет? будет. только вызовется констурктор с тремя интами
0
3 / 3 / 2
Регистрация: 09.10.2012
Сообщений: 94
20.04.2015, 15:55  [ТС]
А что бы вызвался с сhar надо все равно char month создавать )))
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
20.04.2015, 16:30
ну, это вполне логично
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.04.2015, 16:30
Помогаю со студенческими работами здесь

Реализация конструктора копирования и перегрузки =
#include &lt;iostream&gt; #include &lt;cstring&gt; using namespace std; class Cow{ private: char name; char *...

Реализация конструктора копирования для класса
P.S плохо с русским Этот конструктор копирования сломал мне мозг И вот что я понемаю когда мы делаем так foo objCopy(obj); ...

Реализация конструктора копирования для двумерного динамического массива
Практически реализовал, не понимаю, почему не получается... #include &lt;iostream&gt; #include &lt;time.h&gt; using namespace std; ...

Как понять, что реализация конструктора в классе произошла?
VISUAL C++ Как понять что реализация конструктора в классе произошла ?

Вызов перегруженного конструктора
Есть конструктор 1 и конструктор 2. Второй делает всё тоже самое что и первый, но + ещё некоторые действия. Сейчас мне приходится...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru