Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы по ООП.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
612.86 Кб
Скачать
  1. Определить класс «Дата», в котором производится ввод календарной даты, определение соответствующего дате дня недели, прибавления к дате целой константы и т.п. операции.

  2. Определить класс », в котором производятся операции над обыкновенными дробями (сравнение, сложение, умножение, деление, сокращение).

  3. Определить класс римских цифр. Реализовать алгоритм перевода из десятичной системы и обратно и операции сложения и вычитания.

  4. Определить класс “Точка на шаровой поверхности”, объекты которого задаются в полярной системе координат (широта, долгота, радиус-вектор). Реализовать операцию определения длины линии на поверхности шара между двумя точками.

  5. Определить класс прямоугольников со сторонами, параллельными осям координат. Операции: перемещение, изменение размеров, построение прямоугольника, являющегося пересечением двух других.

  6. Определить класс многочленов от одной переменной, задаваемых степенью многочлена и массивом коэффициентов, с операциями вычисления значения многочлена для заданного аргумента, сложения и вычитания многочленов.

  7. Определить класс «Множество» c методами: добавление элементов, пересечение и объединение множеств. Множество реализовать на основе массива в динамической памяти или списка. Определить функцию ввода элементов с проверкой вводимых данных .

  8. Определить класс вещественных матриц с методами, реализующими сложение и вычитание матриц, транспонирования, вычисления детерминанта. Воспользоваться массивами, создающимися с помощью оператора new.

  9. Написать класс для работы с С-строкой ( завершающим символом строки является '\0'). Поля класcа: указатель на char – хранит адрес динамически выделенной памяти для размещения символов строки, значение типа int для хранения длины строки в байтах. Конструкторы: без параметров, копирования, создающий строку заданной длины. Методы: получение длины строки, очистка строки, сравнение и выделение подстроки, соединения 2 – х строк (перегрузить операцию +). Не использовать соответствующие библиотечные функции.

  10. Реализовать на основе списка класс «Стек» с операциями инициализации, добавления и извлечения элементов согласно соответствующей дисциплине обслуживания.

  11. Реализовать на основе списка класс «Очередь» с операциями инициализации, добавления и извлечения элементов согласно соответствующей дисциплине обслуживания.

  12. Описать класс «Предметный указатель». Каждая компонента указателя содержит слово и номера страниц, на которых это слово встречается. Количество номеров страниц, относящихся к одному слову, изменяется от одного до десяти. Предусмотреть воз­можность формирования указателя с клавиатуры, вывода указателя, вывода номеров страниц для заданного слова, удаления элемента из указателя.

  13. Определить класс « Аэропорт», полями которого являются взлетно-посадочная полоса (ВПП), самолет и пассажирский терминал. Реализовать методы, осуществляющую следующую последовательность действий: а) ВПП занята самолетом, собирающимся взлетать, в терминале находятся пассажиры этого рейса; б) пассажиры перемещаются в самолет, терминал освобождается; в) самолет взлетает, ВПП освобождается.

  14. В следующих вариантах рекомендуется создавать 2 класса и объекты или указатели на один из них включать в другой (агрегация классов)

Определить классы «Автостоянка» и «Автомобиль». Для каждого автомобиля во втором классе описывают госномер, марку, цвет и признак присутствия на стоянке. В первый класс вводится массив автомобилей, которые могут присутствовать на стоянке. Определить в первом классе методы заезда автомобиля на стоянку, его выезда, подтверждения присутствия автомобиля на стоянке по госномеру, вывода списка присутствующих и уехавших автомобилей.

  1. Определить классы «Карта» и «Колода карт». Поля первого – масть и достоинство. Второй содержит массив объектов первого и методы инициализации, раздачи карт на заданное число игроков равными порциями, перемешивание колоды.

  2. Определить классы «Автобусный маршрут» и «Автобус». Во втором задаются госномер, вместимость автобуса и признаки полный /пустой, неподвижен/двигается. Методы этого класса: заполнение автобуса пассажирами, освобождение его, переход к движению, остановка. Объект этого класса вводится в первый класс; наряду с ним в этом классе определяется массив названий остановок конкретного маршрута. В классе необходимо реализовать следующую последовательность действий: заполнение автобуса, перемещение его от одной остановки к другой, освобождение.

  3. Определить классы «Книга» и «Библиотека». Поля книги: ФИО автора(ов), название, год издания, издательcтво. Библиотека содержит массив книг, размер которого является параметром. Массив инициализируется 10-ю реальными книгами. Предусмотреть возможность поиска книги по какому-либо признаку (например, по автору или по году издания), сортировки книг по разным полям. Разработать метод добавления книг в библиотеку с увеличением размера массива.

  4. Определить классы «Студент» и «Студенческая группа». Поля первого: ФИО, дата рождения, адрес, учится/отчислен. Группа содержит массив студентов, размер которого является параметром. Предусмотреть возможность поиска студента по какому-либо признаку, сортировки по разным полям, изменения значения поля учится/отчислен, выдачи списка учащихся и отчисленных студентов.

Контрольные вопросы

1. Для чего служит конструктор ? Может ли в классе быть несколько конструкторов? Чем должны отличаться различные конструкторы одного и того же класса?

2. Для чего служит деструктор класса? Имеет ли деструктор параметры? В каком случае в тело деструктора включается оператор delete?

3. Какие сообщения и в какой последовательности будут выведены на монитор?

class Alpha {

public:

int x, y;

Alpha(){cout<<"Constructor #1"<<endl;}

Alpha(int _m){cout<<"Constructor #2"<<endl; x=y=_m; }

~Alpha(){cout<<"Destructor "<<endl;}

};

void main()

{

Alpha a1;

a1.x=1;

Alpha *a2;

a2=new Alpha;

Alpha a3[2];

Alpha a4(4);

Alpha a5=a1;

Alpha a6(a1);

cout<<a5.x<<endl<<a6.x<<endl;

}

  1. Определен следующий класс.

class Alhpa { public: int abc; };

Запишите обращения к компоненте abc с использованием точки и стрелки.

5. Каким образом компилятор отличает вызов стандартной операции от вызова перегруженной? Вспомните язык С и его операции <<, >> и запишите результат второго выражения

int a=4;

cout<<(a<<3);

6. Найдите ошибку в следующем фрагменте программы:

class X{

/*…*/

public:

friend void print();

/*…*/

};

void X::print(){cout<</*….*/}

Лабораторная работа 2. Наследование классов в С++