Тема. Простейшие
Скачать 39.46 Kb.
|
Лабораторная работаТема. Простейшие классы и объектыТеоретическое введение. Классы представляют абстрактные типы данных с открытым интерфейсом и скрытой внутренней реализацией. В классах реализованы базовые принципы объектно-ориентированного программирования(ООП): абстракция данных; инкапсуляция – в классах объединяются данные и методы (функции) для работы с ними, так как лишь через методы возможен доступ к сокрытым данным класса; наследование – в производных классах наследуются члены базового класса; полиморфизм – возможность использования одних и тех же методов для работы с различными объектами базового и порожден- ных им классов. Определение простейшего класса без наследования имеет вид: class имя_класса {// по умолчанию раздел private – частные члены класса public: // открытые функции и переменные класса };Имя класса является новым типом данных. Понятию переменной данного типа соответствует понятие объекта класса. Список членов класса включает описание данных и функций. Функции, описания которых находятся в определении класса, называются функциями- членами класса. Переменные и функции, объявленные в разделе класса по умолчанию или явно как private, имеют область видимости в пределах класса. Их можно сделать видимыми вне класса, если объявить в разделе public:. Обычно переменные объявляются в разделе private, а функции в разделе public. Классами в С++ являются также структуры (struct) и объединения (union). В отличие от класса члены структуры по умолчанию являются открытыми, а не закрытыми. Кроме того, объединения не могут наследоваться и наследовать. При реализации функциональной части класса могут быть использованы функции-члены класса, конструкторы, деструкторы, функции-операторы. Функции класса всегда объявляются внутри класса. Определение функции может находиться и внутри класса. Такие функции называются inline-функциями. Обычно определения функций-членов класса помещаются вне класса. При этом перед именем функции указывается имя_класса::. тип имя_класса:: имя_функции (описание аргументов){ /*тело функции*/ } Вызов функций осуществляется одним из двух способов: имя_объекта.имя_функции(аргументы); указатель_на_объект -> имя_функции(аргументы); Обращение к данным объекта класса осуществляется с помощью функций, вызываемых из объектов. При этом функции-члену класса передается скрытый указатель thisна объект, вызывающий функцию. Функции-«друзья» класса, объявляемые в классе со спецификатором friend, указатель this не содержат. Объекты, с кото- рыми работают такие функции, должны передаваться в качестве их аргументов. Это обычные функции языка С++, которым разрешен доступ к закрытым членам класса. Пример./* Создается класс Student. Формируется динамический массив объектов. При тестировании выводится: сформированный список студентов, список студентов заданного факультета, список студентов для заданных факультета и курса.*/ #include #include {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 :"< cout<<"Was born :"< cout<<"Fac :"< } 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 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 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 spis[i].show(); } spisfac(spis,n); spisfackurs(spis,n); delete [] spis; cout<<"press any key!" while(!kbhit()); } Задания для самостоятельного решенияРазработать классы для описанных ниже объектов. Включить в класс методы set (…), get (…), show (…). Определить другие методы. Student: Фамилия, Имя, Отчество, Дата рождения, Адрес, Теле- фон, Факультет, Курс. Создать массив объектов. Вывести: а) список студентов заданного факультета; б) списки студентов для каждого факультета и курса; в) список студентов, родившихся после заданного года. Abiturient: Фамилия, Имя, Отчество, Адрес, Оценки. Создать массив объектов. Вывести: а) список абитуриентов, имеющих неудовлетворительные оценки; б) список абитуриентов, сумма баллов у которых не меньше за- данной; в) выбрать N абитуриентов, имеющих самую высокую сумму бал- лов, и список абитуриентов, имеющих полупроходной балл. Aeroflot: Пункт назначения, Номер рейса, Тип самолета, Время вылета, Дни недели. Создать массив объектов. Вывести: а) список рейсов для заданного пункта назначения; б) список рейсов для заданного дня недели; в) список рейсов для заданного дня недели, время вылета для ко- торых больше заданного. Book: Автор, Название, Издательство, Год, Количество страниц. Создать массив объектов. Вывести: а) список книг заданного автора; б) список книг, выпущенных заданным издательством; в) список книг, выпущенных после заданного года. Worker: Фамилия и инициалы, Должность, Год поступления на работу, Зарплата. Создать массив объектов. Вывести: а) список работников, стаж работы которых на данном предпри- ятии превышает заданное число лет; б) список работников, зарплата которых больше заданной; в) список работников, занимающих заданную должность. Train: Пункт назначения, Номер поезда, Время отправления, Число общих мест, Купейных, Плацкартных. Создать массив объек- тов. Вывести: а) список поездов, следующих до заданного пункта назначения; б) список поездов, следующих до заданного пункта назначения и отправляющихся после заданного часа; в) список поездов, отправляющихся до заданного пункта назначе- ния и имеющих общие места. Product: Наименование, Производитель, Цена, Срок хранения, Количество. Создать массив объектов. Вывести: а) список товаров для заданного наименования; б) список товаров для заданного наименования, цена которых не превышает указанной; в) список товаров, срок хранения которых больше заданного. Patient: Фамилия, Имя, Отчество, Адрес, Номер медицинской карты, Диагноз. Создать массив объектов. Вывести: а) список пациентов, имеющих данный диагноз; б) список пациентов, номер медицинской карты которых находится в заданном интервале. Bus: Фамилия и инициалы водителя, Номер автобуса, Номер маршрута, Марка, Год начала эксплуатации, Пробег. Создать массив объектов. Вывести: а) список автобусов для заданного номера маршрута; б) список автобусов, которые эксплуатируются больше 10 лет; в) список автобусов, пробег у которых больше 10 000 км. Customer: Фамилия, Имя, Отчество, Адрес, Телефон, Номер кредитной карточки, Номер банковского счета. Создать массив объек- тов. Вывести: а) список покупателей в алфавитном порядке; б) список покупателей, номер кредитной карточки которых нахо- дится в заданном интервале. File: Имя файла, Размер, Дата создания, Количество обраще- ний. Создать массив объектов. Вывести: а) список файлов, упорядоченный в алфавитном порядке; б) список файлов, размер которых превышает заданный; в) список файлов, число обращений к которым превышает задан- ное. Word: Слово, Номера страниц, на которых слово встречается (от 1 до 10), Число страниц. Создать массив объектов. Вывести: а) слова, которые встречаются более чем на N страницах; б) слова в алфавитном порядке; в) для заданного слова номера страниц, на которых оно встреча- ется. House: Адрес, Этаж, Количество комнат, Площадь. Создать массив объектов. Вывести: а) список квартир, имеющих заданное число комнат; б) список квартир, имеющих заданное число комнат и расположен- ных на этаже, который находится в определенном промежутке; в) список квартир, имеющих площадь, превосходящую заданную. Phone: Фамилия, Имя, Отчество, Адрес, Номер, Время внутри- городских разговоров, Время междугородних разговоров. Создать массив объектов. Вывести: а) сведения об абонентах, время внутригородских разговоров кото- рых превышает заданное; б) сведения об абонентах, воспользовавшихся междугородней свя- зью; в) сведения об абонентах, выведенные в алфавитном порядке. Person: Фамилия, Имя, Отчество, Адрес, Пол, Образование, Год рождения. Создать массив объектов. Вывести: а) список граждан, возраст которых превышает заданный; б) список граждан с высшим образованием; в) список граждан мужского пола. Тесты Для чего нужны классы? 1) для определения новых типов в программе; 2) для упрощения работы с функциями; *3) для соединения данных и операций над ними; 4) для упроще- ния работы с указателями. Методы класса определяют: 1) какие операции можно выполнять с объектами данного класса; 2) какие типы значений могут принимать данные-члены класса; 3) каким образом реа- лизуется защита данных-членов класса. Атрибуты (данные-члены) класса могут быть: 1) только целыми числами; 2) любыми встроенными типами; *3) любого оп- ределенного в программе типа. Какая из записей соответствует обращению к атрибуту arg класса А в опре- делении метода этого же класса? Вариантыответа: 1) this –> arg; 2) arg; 3) A –> arg; 4) A –> this –> arg. Если имеется код class A {public: int a; }; A *obj; то как обратиться к переменной а? Вариантыответа: 1) obj.a; 2) (obj) –> a; 3) obj –> a; 5) obj :: a. Если имеется код class A {public: int a, b, c;}; A obj; то как обратиться к переменной b? Вариантыответа: 1) (obj) –> b; 2) A :: b; *3) (*obj).b; 4) obj –> a.b. Каков будет результат выполнения следующего кода: class A { public: int inc (int x) {return x++;} int inc (short x) (return x+2;} }; A obj; int y=5; cout << obj.inc(y); ? Вариантыответа: 1) 5; 2) 6; 3) 7; 4) ошибка при компиляции. Каков будет результат выполнения следующего кода: class A { public: int y; int inc (int x) {return y++;} int inc (short x) {return x+y;} }; A obj; int y=5; obj.y= 6; cout << obj.inc(y); ? Вариантыответа: 1) 5; 2) 6; 3) 11; 4) 7; 5) ошибка при компиляции. Какими по умолчанию объявляются элементы структуры? 1) private; 2) public; 3) protected; 4) по умолчанию не объявляются. |