Индивидуальные задания по вариантам

Лабораторная работа № 1

Простейшие классы и объекты

Теоретическое описание.

  Классы представляют абстрактные типы данных с открытым интерфейсом и скрытой внутренней реализацией. В классах реализованы базовые принципы объектно- ориентированного программирования (ООП):

1) абстракция данных;

2) инкапсуляция – в классах объединяются данные и методы (функции) для работы с ними, так как лишь через методы возможен доступ к сокрытым данным класса;

3) наследование – в производных классах наследуются члены базового класса;

4) полиморфизм – возможность использования одних и тех же методов для работы с различными объектами базового и порожден- ных им классов.

Определение простейшего класса без наследования имеет вид:

class имя_класса {

// по умолчанию раздел private – частные члены класса

Public: // открытые функции и переменные класса

};

Имя класса является новым типом данных. Понятию переменной данного типа соответствует понятие объекта класса. Список членов класса включает описание данных и функций. Функции, описания которых находятся в определении класса, называются функциями- членами класса.

Переменные и функции, объявленные в разделе класса по умолчанию или явно как private, имеют область видимости в пределах класса. Их можно сделать видимыми вне класса, если объявить в разделе public:. Обычно переменные объявляются в разделе private, а функции в разделе public.

Классами в С++ являются также структуры (struct) и объединения (union). В отличие от класса члены структуры по умолчанию являются открытыми, а не закрытыми. Кроме того, объединения не могут наследоваться и наследовать.

При реализации функциональной части класса могут быть использованы функции-члены класса, конструкторы, деструкторы, функции-операторы. Функции класса всегда объявляются внутри класса. Определение функции может находиться и внутри класса. Такие функции называются inline -функциями. Обычно определения функций-членов класса помещаются вне класса. При этом перед именем функции указывается имя_класса::.

Тип имя_класса:: имя_функции (описание аргументов)

{ /*тело функции*/ }

Вызов функций осуществляется одним из двух способов: имя_объекта.имя_функции(аргументы); указатель_на_объект -> имя_функции(аргументы);

Обращение к данным объекта класса осуществляется с помощью функций, вызываемых из объектов. При этом функции-члену класса передается скрытый указатель this на объект, вызывающий функцию.

Функции-«друзья» класса, объявляемые в классе со спецификатором friend, указатель this не содержат. Объекты, с кото- рыми работают такие функции, должны передаваться в качестве их аргументов. Это обычные функции языка С++, которым разрешен доступ к закрытым членам класса.

Пример.

/* Создается класс Student. Формируется динамический массив объектов. При тестировании выводится: сформированный список студентов, список студентов заданного факультета, список студентов для заданных факультета и курса.*/ #include <conio.h>

#include <string.h> #include <iostream.h> struct date // дата рождения

{char daymon[6]; int year; };

//=======                  class Student      ================= class Student{

char name[30]; //private date t;

char adr[30], fac[20]; int kurs;

public:

Student(); char *getfac(); int getkurs(); void show();

};

Student::Student()

{cout<<"Input name:"; cin>>name; cout<<"Input date of born\n"; cout<<"Day.mon:";                                       cin>>t.daymon; cout<<"Year:"; cin>>t.year; cout<<"Input adr:"; cin>>adr; cout<<"Input fac:"; cin>>fac;


cout<<"Input kurs:"; cin>>kurs;

}

void Student::show()

{

cout<<"Name:"<<name<<endl;

cout<<"Was born:"<<t.daymon<<'.'<<t.year<<endl; cout<<"Address  :"<<adr<<endl;

cout<<"Fac:"<<fac<<endl; cout<<"Kurs         :"<<kurs<<endl;

}

char *Student::getfac() { return fac; } int Student::getkurs() { return kurs; }

void spisfac(Student spis[],int n)//список студентов заданного факультетата

{char fac[20];

cout<<"Input faculty:"; cin>>fac; for(int i=0;i<n;i++)

if(strcmp(spis[i].getfac(),fac)==0)spis[i].show();

}

void spisfackurs(Student spis[],int n)

//список студентов заданных факультета и курса

{int i,k;

char fac[20];

cout<<"Input faculty:"; cin>>fac; cout<<"Input the course:"; cin>>k; for(i=0;i<n;i++)

if ((strcmp(spis[i].getfac(),fac)==0)&&(spis[i].getkurs()==k)) spis[i].show();

}

//========= main ================

void main()

{       Student *spis; int n;

cout<<"Input a number of students: "; cin>>n; spis=new Student [n];

for(int i=0;i<n;i++) { cout<<"=============================="<<endl;

spis[i].show();

}

spisfac(spis,n); spisfackurs(spis,n); delete [] spis; cout<<"press any key!" while(!kbhit());

}

 

Каждый объект имеет какие-то свои свойства или атрибуты, которые характеризуют его на протяжении всей жизни. Атрибуты объекта хранятся в переменных, объявленных внутри класса, которому принадлежит данный объект. Причём, объявление переменных должно выполняться со спецификатором доступа private. Такие переменные называются элементами данных. Так как элементы данных объявлены в private, то и доступ к ним могут получить только методы класса, внешний доступ к элементам данных запрещён. Поэтому принято объявлять в классах специальные методы — так называемые set и get функции, с помощью которых можно манипулировать элементами данных. set-функции инициализируют элементы данных, get-функции позволяют просмотреть значения элементов данных. Доработаем класс CppStudio так, чтобы в нём можно было хранить дату в формате дд.мм.гг. Для изменения и просмотра даты реализуем соответственно set и get функции.

// classes.cpp: определяет точку входа для консольного приложения.

 

#include "stdafx.h"

#include <iostream>

using namespace std;

 

class CppStudio // имя класса

{

private: // спецификатор доступа private

int day, // день

   month, // месяц

   year; // год

public: // спецификатор доступа public

void message() // функция (метод класса) выводящая сообщение на экран

{

   cout << "\nwebsite: cppstudio.comntheme: Classes and Objects in C + +\n";

}

void setDate(int date_day, int date_month, int date_year) // установка даты в формате дд.мм.гг

{

   day = date_day; // инициализация день

   month = date_month; // инициализация месяц

   year = date_year; // инициализация год

}

void getDate() // отобразить текущую дату

{

   cout << "Date: " << day << "." << month << "." << year << endl;

}

}; // конец объявления класса CppStudio

 

int main(int argc, char* argv[])

{

setlocale(LC_ALL, "rus"); // установка локали

int day, month, year;

cout << "Введите текущий день месяц и год!\n";

cout << "день: "; cin >> day;

cout << "месяц: "; cin >> month;

cout << "год: "; cin >> year;

CppStudio objCppstudio; // объявление объекта

objCppstudio.message(); // вызов функции класса message

objCppstudio.setDate(day, month, year); // инициализация даты

objCppstudio.getDate(); // отобразить дату

system("pause");

return 0;

}

В определении класса появился новый спецификатор доступа private, строка 9. Данный спецификатор доступа ограничивает доступ к переменным, которые объявлены после него и до начала спецификатора доступа public, строки 9 — 12. Таким образом к переменным day, month, year, могут получить доступ только методы класса. Функции не принадлежащие классу, не могут обращаться к этим переменным. Элементы данных или методы класса, объявленные после спецификатора доступа private, но до начала следующего спецификатора доступа называются закрытыми элементами данных и закрытыми методами класса. Следуя принципу наименьших привилегий и принципу хорошего программирования, целесообразно объявлять элементы данных после спецификатора доступа private, а методы класса — после спецификатора доступа public. Тогда, для манипулирования элементами данных, объявляются специальные функции — get и set. В класс CppStudio мы добавили два метода setDate() и getDate(), подробно рассмотрим каждый метод. Метод setDate() определён с 18 по 23 строки. Как уже ранее упоминалось, set — функции инициализируют элементы данных, поэтому метод setDate() выполняет именно такую функцию. То есть метод setDate() инициализирует переменные day, month, year. Чтобы просмотреть, значения в закрытых элементах данных объявлена функция getDate(), которая возвращает значения из переменных day, month, year в виде даты.На этом определение класса закончено, в main(), как и всегда, создаем объект класса, и через объект вызываем его методы,строки 39 — 41. Если бы элементы данных были объявлены после спецификатора public мы бы смогли к ним обратиться точно также, как и к методам класса. Результат работы программы показан:

 

Введите текущий день месяц и год!

день: 10

месяц: 11

год: 2011

 

 




Общие задания

1. Создать класс с двумя переменными. Добавить функцию вывода на экран и функцию изменения этих переменных. Добавить функцию, которая находит сумму значений этих переменных, и функцию которая находит наибольшее значение из этих двух переменных.

2. Создайте структуру с именем student, содержащую поля: фамилия и инициалы, номер группы, успеваемость (массив из пяти элементов). Создать массив из десяти элементов такого типа, упорядочить записи по возрастанию среднего балла. Добавить возможность вывода фамилий и номеров групп студентов, имеющих оценки, равные только 4 или 5.

3. Описать класс, реализующий счетчик из 10 позиций (например, электрический счетчик), который может увеличивать или уменьшать свое значение на единицу в заданном диапазоне. Предусмотреть инициализацию счетчика значениями по умолчанию и произвольными значениями. Счетчик имеет два метода: увеличения и уменьшения, — и свойство, позволяющее получить его текущее состояние. Написать программу, демонстрирующую все возможности класса.

Индивидуальные задания по вариантам

Разработать классы для описанных ниже объектов. Включить в класс методы set (…), get (…), show (…). Определить другие методы. Входные данные загружать из файлов (не менее 20 записей).

1. Student: Фамилия, Имя, Отчество, Дата рождения, Адрес, Телефон, Факультет, Курс. Создать массив объектов. Вывести:

а) список студентов заданного факультета;

б) списки студентов для каждого факультета и курса;

в) список студентов, родившихся после заданного года.

2. Abiturient: Фамилия, Имя, Отчество, Адрес, Оценки. Создать массив объектов. Вывести:

а) список абитуриентов, имеющих неудовлетворительные оценки;

б) список абитуриентов, сумма баллов у которых не меньше заданной;

в) выбрать N абитуриентов, имеющих самую высокую сумму баллов, и список абитуриентов, имеющих полупроходной балл.

3. Aeroflot: Пункт назначения, Номер рейса, Тип самолета, Время вылета, Дни недели. Создать массив объектов. Вывести:

а) список рейсов для заданного пункта назначения;

б) список рейсов для заданного дня недели;

в) список рейсов для заданного дня недели, время вылета для которых больше заданного.

4. Book: Автор, Название, Издательство, Год, Количество страниц. Создать массив объектов. Вывести:

а) список книг заданного автора;

б) список книг, выпущенных заданным издательством;

в) список книг, выпущенных после заданного года.

5. Worker: Фамилия и инициалы, Должность, Год поступления на работу, Зарплата. Создать массив объектов. Вывести:

а) список работников, стаж работы которых на данном предприятии превышает заданное число лет;

б) список работников, зарплата которых больше заданной;

в) список работников, занимающих заданную должность.

6. Train: Пункт назначения, Номер поезда, Время отправления, Число общих мест, Купейных, Плацкартных. Создать массив объектов. Вывести:

а) список поездов, следующих до заданного пункта назначения;

б) список поездов, следующих до заданного пункта назначения и отправляющихся после заданного часа;

в) список поездов, отправляющихся до заданного пункта назначения и имеющих общие места.

7. Product: Наименование, Производитель, Цена, Срок хранения, Количество. Создать массив объектов. Вывести:

а) список товаров для заданного наименования;

б) список товаров для заданного наименования, цена которых не превышает указанной;

в) список товаров, срок хранения которых больше заданного.

8. Patient: Фамилия, Имя, Отчество, Адрес, Номер медицинской карты, Диагноз. Создать массив объектов. Вывести:

а) список пациентов, имеющих данный диагноз;

б) список пациентов, номер медицинской карты которых больше заданного числа.

в) список пациентов, имеющих данный диагноз и номер медицинской карты которых находится в заданном интервале список пациентов, номер медицинской карты которых находится в заданном интервале.

9. Bus: Фамилия и инициалы водителя, Номер автобуса, Номер маршрута, Марка, Год начала эксплуатации, Пробег. Создать массив объектов. Вывести:

а) список автобусов для заданного номера маршрута;

б) список автобусов, которые эксплуатируются больше 10 лет;

в) список автобусов, пробег у которых больше 10 000 км.

10. Customer: Фамилия, Имя, Отчество, Адрес, Телефон, Номер кредитной карточки, Номер банковского счета. Создать массив объектов. Вывести:

а) список покупателей в алфавитном порядке;

б) список покупателей, номер кредитной карточки которых находится в заданном интервале.

в) список покупателей, живущих на заданной улице

11. File: Имя файла, Размер, Дата создания, Количество обращений. Создать массив объектов. Вывести:

а) список файлов, упорядоченный в алфавитном порядке;

б) список файлов, размер которых превышает заданный;

в) список файлов, число обращений к которым превышает заданное.

12. Word: Слово, Номера страниц, на которых слово встречается

(от 1 до 10), Число страниц. Создать массив объектов. Вывести:

а) слова, которые встречаются более чем на N страницах;

б) слова в алфавитном порядке;

в) для заданного слова номера страниц, на которых оно встречается.

13. House: Адрес, Этаж, Количество комнат, Площадь. Создать массив объектов. Вывести:

а) список квартир, имеющих заданное число комнат;

б) список квартир, имеющих заданное число комнат и расположенных на этаже, который находится в определенном промежутке;

в) список квартир, имеющих площадь, превосходящую заданную.

14. Phone: Фамилия, Имя, Отчество, Адрес, Номер, Время внутригородских разговоров, Время междугородних разговоров. Создать массив объектов. Вывести:

а) сведения об абонентах, время внутригородских разговоров которых превышает заданное;

б) сведения об абонентах, воспользовавшихся междугородней связью;

в) сведения об абонентах, выведенные в алфавитном порядке.

15. Person: Фамилия, Имя, Отчество, Адрес, Пол, Образование, Год рождения. Создать массив объектов. Вывести:

а) список граждан, возраст которых превышает заданный;

б) список граждан с высшим образованием;

в) список граждан мужского пола.

16. Student: Фамилия, Имя, Отчество, Дата рождения, Адрес, Теле- фон, Факультет, Курс. Создать массив объектов. Вывести:

а) список студентов заданного курса;

б) списки студентов для каждого факультета и курса;

в) список студентов, родившихся до заданного года.

17. Abiturient: Фамилия, Имя, Отчество, Адрес, Оценки. Создать массив объектов. Вывести:

а) список абитуриентов, имеющих удовлетворительные оценки;

б) список абитуриентов, сумма баллов у которых не больше заданной;

в) выбрать N абитуриентов, имеющих самую низкую сумму баллов, и список абитуриентов, имеющих полупроходной балл.

18. Aeroflot: Пункт назначения, Номер рейса, Тип самолета, Время вылета, Дни недели. Создать массив объектов. Вывести:

а) список рейсов для заданного пункта назначения;

б) список рейсов для заданного времени вылета;

в) список рейсов для заданного дня недели, время вылета для которых меньше заданного.

19. Book: Автор, Название, Издательство, Год, Количество страниц. Создать массив объектов. Вывести:

а) список книг заданного года;

б) список книг, выпущенных заданным издательством;

в) список книг, выпущенных до заданного года.

20. Worker: Фамилия и инициалы, Должность, Год поступления на работу, Зарплата. Создать массив объектов. Вывести:

а) список работников, стаж работы которых на данном предприятии меньше заданное число лет;

б) список работников, зарплата которых меньше заданной;

в) список работников, занимающих заданную должность.

21. Train: Пункт назначения, Номер поезда, Время отправления, Число общих мест, Купейных, Плацкартных. Создать массив объектов. Вывести:

а) список поездов, следующих до заданного пункта назначения;

б) список поездов, следующих до заданного пункта назначения и отправляющихся до заданного часа;

в) список поездов, отправляющихся до заданного пункта назначения и имеющих заданное число купейных мест.

22. Product: Наименование, Производитель, Цена, Срок хранения, Количество. Создать массив объектов. Вывести:

а) список товаров для заданного производителя;

б) список товаров для заданного наименования, цена которых больше указанной;

в) список товаров, срок хранения которых меньше заданного.

23. Patient: Фамилия, Имя, Отчество, Адрес, Номер медицинской карты, Диагноз. Создать массив объектов. Вывести:

а) список пациентов, имеющих данный диагноз;

б) список пациентов, номер медицинской карты которых меньше заданного числа.

в) список пациентов, имеющих данный диагноз и номер медицинской карты которых находится в заданном интервале

24. Bus: Фамилия и инициалы водителя, Номер автобуса, Номер маршрута, Марка, Год начала эксплуатации, Пробег. Создать массив объектов. Вывести:

а) список автобусов для заданного номера маршрута;

б) список автобусов, которые эксплуатируются больше 15 лет;

в) список автобусов, пробег у которых меньше 10 000 км.

25. Customer: Фамилия, Имя, Отчество, Адрес, Телефон, Номер кредитной карточки, Номер банковского счета. Создать массив объектов. Вывести:

а) список покупателей в обратном алфавитном порядке (от Я до А);

б) список покупателей, номер банковского счета которых находится в заданном интервале.

в) список покупателей, живущих в заданном городе

26. File: Имя файла, Размер, Дата создания, Количество обращений. Создать массив объектов. Вывести:

а) список файлов, упорядоченный в обратном алфавитном порядке (от Я до А);

б) список файлов, размер которых меньше заданного;

в) список файлов, число обращений к которым меньше заданного.

27. Word: Слово, Номера страниц, на которых слово встречается

(от 1 до 10), Число страниц. Создать массив объектов. Вывести:

а) слова, которые встречаются меньше чем на N страницах;

б) слова в обратном алфавитном порядке (от Я до А);

в) для заданного слова номера страниц, на которых оно встречается.

28. House: Адрес, Этаж, Количество комнат, Площадь. Создать массив объектов. Вывести:

а) список квартир, имеющих заданное число комнат;

б) список квартир, имеющих заданное число комнат и расположенных на этаже, который находится в определенном промежутке;

в) список квартир, имеющих площадь, меньше заданной.

29. Phone: Фамилия, Имя, Отчество, Адрес, Номер, Время внутригородских разговоров, Время междугородних разговоров. Создать массив объектов. Вывести:

а) сведения об абонентах, время междугородних разговоров которых превышает заданное;

б) сведения об абонентах, воспользовавшихся внутригородской связью;

в) сведения об абонентах, выведенные в обратном алфавитном порядке (от Я до А).

30. Person: Фамилия, Имя, Отчество, Адрес, Пол, Образование, Год рождения. Создать массив объектов. Вывести:

а) список граждан, возраст которых меньше заданного;

б) список граждан со средним профессиональным образованием;

в) список граждан женского пола.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: