|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Перегрузка констуктора |
|
C/C++ - Перегрузка констуктора
|
Пользователь Сообщения: 147 |
Профиль | Отправить PM | Цитировать Как правильно перегружать конструктор? Помогите, не понятно.
#include <iostream> class Date { public: Date(int, int); Date(int, int, int); void print() const; void setDate(int, int, int); private: int day; int month; int year; }; Date::Date(int dd, int mm, int yyyy) { day = dd; month = mm; year = yyyy; } void Date::setDate(int dd, int mm, int yyyy) { day = dd; month = mm; year = yyyy; } void Date::Date(int dd, int yyyy) { day = dd; year = yyyy; } void Date::print() const { std::cout << day << "/" << month << "/" << year << std::endl; } int main() { setlocale(LC_ALL,".1251"); Date d(2,2,2000); Date d2(1,1991); d.print(); d2.print(); system("pause"); return 0; } |
|
Отправлено: 22:11, 15-07-2010 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата котвася:
Date.h // Определение класса Time // Функции-члены определены в Date1.cpp // Процессорные директивы, которые предотвращают // многократное включение заголовочного файла #ifndef DATE_H #define DATE_H class Date{ public: // конструктор Date(int = 1, int = 1, int = 1990); // печать дат в формате месяца/дня/года. 05.01.1997 void print() const; // печать дат в формате число, срока названия месяца, год. 5 января 1997 год. void print_Day_StringMonth_Year() const; ~Date(); // функцияи 'set' Установка и проверка вводимых параметров void setDate(int, int, int); // установка дня, месяца, года private: int day; // День от 1 - 31 int month; // Месяц от 1 - 12 int year; // Год. Целое число // функция-утилита для проверки соответствия дня месяца и году int checkDay(int); // На всякий случай ;))))) }; #endif // определения функции-членов класса Date #include <iostream.h> using std::cout; using std::endl; #include "date.h" // конструктор: поддержка соответствующего значения месяца; // вызвать функцию-утилиту checkDay для поддержки соответствующего // значения дня Date::Date(int dy, int mn, int yr) { setDate(dy, mn, yr); // Функция правильной установки дня, месяца, и года } // печать объекта Date в форме месяца/дня/года. 05.01.1997-------------------- void Date::print() const { int NumbNullDay_and_Month, // Счётчик NumbNull_Day, // индекс для массива NumberDay_Month, для правильного отображения числа ДНЯ с нулём NumbNull_Month; // индекс для массива NumberDay_Month, для правильного отображения числа МЕСЯЦА с нулём static const char *NumberDay_Month [10] = {"", "01", "02", "03", "04", "05", "06", "07", "08", "09"}; // Проверка дня, если в числе ДНЯ один разряд, вычислить соответствующий индекс массива NumberDay_Month... if(day < 10){ for(NumbNullDay_and_Month = 0; NumbNullDay_and_Month < 11; NumbNullDay_and_Month++){ if(NumbNullDay_and_Month == day) NumbNull_Day = NumbNullDay_and_Month; } } // Если в числе ДНЯ, больше одного разряда, то присвоить переменной NumbNull_Day, тоже число, что и было else if(day > 9) NumbNull_Day = day; // Проверка дня, если в числе МЕСЯЦА один разряд, вычислить соответствующий индекс массива NumberDay_Month... if(month < 10){ for(NumbNullDay_and_Month = 0; NumbNullDay_and_Month < 11; NumbNullDay_and_Month++){ if(NumbNullDay_and_Month == month) NumbNull_Month = NumbNullDay_and_Month; } } // Если в числе МЕСЯЦА, больше одного разряда, то присвоить переменной NumbNull_Day, тоже число, что и было else if(month > 9) NumbNull_Month = month; // Вывод вариантов if(day < 10 && month < 10) // Если в ДНЕ И в МЕСЯЦЕ число меньше десяти cout<<NumberDay_Month[NumbNull_Day]<<"."<<NumberDay_Month[NumbNull_Month]<<"."<<year<<endl; else if(day < 10 && month > 9) // Если в ДНЕ меньше деСяти, И в МЕСЯЦЕ больше деВяти cout<<NumberDay_Month[NumbNull_Day]<<"."<<NumbNull_Month<<"."<<year<<endl; else if(day > 9 && month < 10) // Если в ДНЕ больше деВяти, И в МЕСЯЦЕ больше деСяти cout<<NumbNull_Day<<"."<<NumberDay_Month[NumbNull_Month]<<"."<<year<<endl; else if(day > 9 && month > 9) // Если в ДНЕ И в МЕСЯЦЕ число больше деСяти cout<<NumbNull_Day<<"."<<NumbNull_Month<<"."<<year<<endl; } // печать дат в формате число, строка названия месяца, год-------------------- void Date::print_Day_StringMonth_Year() const { int i; static const char *Month [13] = {"", "Yanvaria", "Fevralia", "Marta", "Aprelia", "May", "Yuni", "Yuli", "Avgusta", "Sentyabria", "Ortyabria", "Noyabria", "Dekabria"}; for(i = 0; i < 14; i++){ if(month == i) cout<<day<<" "<<Month[i]<<" "<<year<<" God."<<endl; } } // функция-утилита для поддержки соответствующего // значения дня в зависимости от месяца и года. // является ли 2000-й год високосным?----------------------------------------- int Date::checkDay(int testDay) { static const int daysPerMonth[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; if(testDay > 0 && testDay <= daysPerMonth[month]) return testDay; if(month == 2 && // февраль: проверка високосноо года testDay == 29 && (year % 400 == 0 || (year %4 == 0 && year % 100 != 0))) return testDay; cout<<" DENY: "<<testDay<<" NEPRAVILNIY. USTANOVITY DENY 1 \n\n"; print(); print_Day_StringMonth_Year(); return 1; // если значение неправильное } // Проверка и Установка даты через setDate------------------------------------ void Date::setDate(int dy, int mn, int yr) { if(mn > 0 && mn <= 12) // проверка месяца month = mn; else{ month = 1; cout<<" MEZYAC: "<<mn<<" NEPRAILNIY. USTANOVITY MEZYAC 1. \n\n"; } year = yr; day = checkDay(dy); // проверка дня print(); print_Day_StringMonth_Year(); cout<<"\n KONSTRUKPOR OBEKTA 'DATE'\n"; cout<<endl; } // деструктор----------------------------------------------------------------- Date::~Date() { cout<<" DESTRUKTOR DATE-OBEKTA DLA DATY "; print(); cout<<endl; } //--------------------------------------------------------------------------- // демонстрация композиции: объект с объектами-членами #include <iostream.h> using std::cout; using std::cin; using std::endl; #include "date.h" int main() { int dayy, monthh, yearr, z; Date d(3, 12, 1988); cout<<'\n'; // Формат 05.01.1997 d.print(); cout<<'\n'; // Формат 5 января 1997 года. d.print_Day_StringMonth_Year(); cout<<"\n PROVERKA KONSTRUKTORA 'DATE' S NEPRAVILYNIVI ZNACHENIAVI: \n"; Date dd(14, 35, 1994); // неправильные Date-значения cout<<endl; do{ cout<<"\n Enter '0' START AND '-1' FINISH: "; cin>>z; cout<<endl; // Ввод нужных значений cout<<"Enter Day: "; cin>>dayy; cout<<"Enter Month: "; cin>>monthh; cout<<"Enter Year: "; cin>>yearr; // Функция установки и проверки правильности ввода d.setDate(dayy, monthh, yearr); // Вывод вариантов отображения d.print(); d.print_Day_StringMonth_Year(); } while(z != -1); cin>>z; return 0; } //--------------------------------------------------------------------------- |
|
------- Отправлено: 10:13, 18-07-2010 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
ИО Капитана Очевидности Сообщения: 5387
|
Профиль | Отправить PM | Цитировать Цитата котвася:
#include <strings.h> class Date { public: Date (int, const string &, int); Date(int, int); Date(int, int, int); void print() const; void printChar() const; void setDate(int, int, int); private: int Fday; int Fmonth; string Fsmonth; int Fyear; }; Date::Date(int dd, const string &mm, int yyyy) { Fday = dd; year = yyyy; Fmonth = mm; // копирование строки выполняется переопределённым оператором класса } Опять же, нет нужды хранить строковое значение месяца в объекте - ведь названия месяцев известны |
|
------- Отправлено: 01:45, 21-07-2010 | #12 |
Пользователь Сообщения: 147
|
Профиль | Отправить PM | Цитировать не знаю, по моему это сложнее, т.к. я до первого додумался первее и сам.
P.S. в MVS надо использовать <string> |
Отправлено: 23:20, 24-07-2010 | #13 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Перегрузка сервера. | oIo_DeN_oIo | Хочу все знать | 6 | 21-05-2009 10:19 | |
C/C++ - Перегрузка операторов 'operator []' | ganselo | Программирование и базы данных | 3 | 29-03-2009 14:57 | |
Внезапная перегрузка компа | lirer | Хочу все знать | 8 | 07-09-2008 14:18 | |
Перегрузка ЦП от небольших программ | Sanchovy | Непонятные проблемы с Железом | 15 | 29-11-2007 10:42 | |
Перегрузка | Rom K | Хочу все знать | 31 | 16-10-2002 02:41 |
|