Задание 1 . Описание простейшего класса
Каждому студенту рекомендуется выполнить хотя бы одно из упражнений 1-12 задания 1 из главы 2, заменив описание структуры на описание класса.
Пример. Решим пример из задания 7.1., заменив описание структуры на описание класса. Описать класс ДАТА с полями ЧИСЛО, МЕСЯЦ, ГОД и следующими методами:
a) ввода и вывода на экран даты;
b) вычисления порядкового номера дня в году по введенной дате;
c) нахождения в массиве введенных дат самой ранней.
Будем использовать технологию модульного программирования для написания программы. Описание класса поместим в заголовочный файл date.h, реализацию методов класса – в файл date.сpp, а главную программу в файл date_main.сpp
// Файл date.h
#ifndef __DATE_H
#define __DATE_H
class date
{
int year;
int month;
int day;
int visokos(int) const;//скрытый метод, проверяющий
//является ли год високосным
public:
date ();//Конструктор
int get_year() const {return year;}// метод,
//возвращающий год
int get_month() const {return month;} ;}// метод, возвращающий месяц
int get_day() const {return day;} ;}// метод,
//возвращающий день
void vvod();// метод, обеспечивающий ввод даты
void vivod () const; ();// константный метод,
//обеспечивающий вывод даты
int day_number() const; // константный метод, вычисляющий
// порядковый номер дня в
//году по введенной дате;
date & min (date & ) ;// метод, возвращающий самую
//раннюю из двух дат
};
#endif
Заметим, что в данной задаче нет необходимости описывать конструктор явным образом – он создастся автоматически и будет корректно работать, так как в классе нет полей, память под которые выделяется динамически. Однако мы описали конструктор явным образом. В теле конструктора укажем отладочную запись cout<<"Done!"; чтобы увидеть, в какие именно моменты работает конструктор. Этот прием полезен для начинающих программистов и для выявления трудно диагнастируемх ошибок.
// Файл date.cpp
#include <iostream.h>
#include <iomanip.h>
#include "date.h"
int tab_day [2][12]= {{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31}};
/************************* конструктор*********************************
date:: date (){cout<<"Done!";}
/******* Метод, проверяющий является ли год високосным******
int date:: visokos(int year) const
{
int k=year%4==0&&year%100!=0||year%400==0;
return k;
}
//*********Метод, обеспечивающий ввод даты*****************
void date::vvod()
{
N: cout<<"Введите день, месяц, год\n";
cin>>day>>month>>year;
int k=visokos(year);
if (day<1||day>tab_day[k][month-1]||month<1||month>12||year<0)
{cout<<"Ошибка ввода\n"; goto N;}
else cout<<"Дата введена\n";
}
//*********Метод, обеспечивающий ввод даты****************
void date:: vivod () const
{
cout<<setw(2)<<day<<'.'<<setw(2)<<month<<'.'<<year<<"\n";
}
//Метод, вычисляющий порядковый номер дня в году по //веденной дате
int date::day_number() const
{
int d=day;
int k=visokos(year);
for (int i=0; i<month-1; i++)
d+=tab_day[k][i];
return d;
}
//********Метод, возвращающий раннюю из двух дат **********
date & date:: min (date & M)
{
if (year<M.get_year() || year==M. get_year()&&(month<M.get_month()|| month==M.get_month()&& day<M.get_day())) return *this;
return M;
}
//Файл date_main.cpp
# include <iostream.h>
# include <stdio.h>
# include <conio.h>
# include <stdlib.h>
# include "date.h"
main ()
{
N:
clrscr();
cout<< "Выберети функцию\n";
cout<<" 1 – Ввод даты\n";
cout<<" 2 – Вывод даты\n";
cout<<" 3 – Порядковый номер даты\n";
cout<<" 4 – Самая ранняя дата\n";
cout<<" 0 – Выход из программы\n";
int nom;
cin>>nom;
switch (nom)
{
case 0: exit(0);
case 1: {date d; d.vvod(); break;}
case 2: {date d; d.vvod(); d.vivod(); break;}
case 3: {date d; d.vvod(); cout<<"\nПорядковый номер"<<d.day_number(); break;}
case 4:
{
cout<<"\nВведите количество дат ";
int n; cin>>n;
date* mas = new date [n];
for (int i=0; i<n; i++)
mas[i].vvod();
cout<<"\nИз введенных дат:\n";
date m=mas[0];
for (int i=0; i<n; i++)
{
mas[i].vivod();
m=mas[i].min(m);
}
cout<<"\nСамая ранняя ";
m.vivod();
delete []mas;
break;
}
default: cout<<"Ошибка ввода ";
}
cout<<"\nДля продолжения нажмите Enter "; getch();
goto N;
}
Дата добавления: 2015-10-09; просмотров: 663;