Задание 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; просмотров: 658;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.016 сек.