- •«Московский государственный технический университет гражданской авиации»
- •Лабораторная работа № 9 Наследование с использованием виртуальных функций
- •1.1. Цель лабораторной работы
- •1.2. Теоретические сведения Включение и наследование классов
- •Наследование
- •Полиморфизм виртуальных функций
- •Чистая виртуальные функции. Абстрактный класс.
- •Virtual void Func () { }
- •Void f ( );
- •Int Func (char*);
- •Void f ( );
- •Статические члены класса
- •Int main () {
- •Указатель this
- •1.3 Задание на выполнение лабораторной работы
- •1.4 Порядок выполнения
- •1.5 Методические указания
- •1.6 Содержание отчета
- •1.7 Контрольные вопросы
- •1.8 Варианты задания
- •2 Лабораторная работа № 10 Обработка типовых исключений. Исключения типа стандартных данных, исключения - классы.
- •Цель лабораторной работы
- •2.2. Теоретические сведения Общие сведения об исключениях
- •Механизм обработки исключений (мои)
- •Перехват исключений
- •Void f1() {
- •Void f2() {
- •Int main () {
- •Int main () {
- •Int main () {
- •Indeterminacy
- •Исключения, функции и раскручивание стека
- •Int main () {
- •Непойманные исключения и обработчики всех типов исключений catch-all
- •Int main () {
- •Обработчики всех типов исключений
- •Int main (){
- •Int main () {
- •Список исключений функции
- •Int doSomething () throw (double, const char*)
- •Исключения в конструкторах и деструкторах
- •Vector V (I);
- •Int main () {
- •Исключения в перегрузке операций
- •Int& ArrayInt :: operator [] (const int index){
- •Int& ArrayInt :: operator [](const int index) {
- •Void assert (int expression);
- •Int& ArrayInt :: operator [] (const int index) {
- •Классы-Исключения
- •Int getLength () {return 4;}
- •Int main () {
- •В случае иерархии классов.
- •Интерфейсный класс std :: exception
- •Int main () {
- •2.3 Задание на выполнение лабораторной работы
- •2.4 Порядок выполнения работы
- •2.5. Контрольные вопросы
- •2.6. Варианты заданий лабораторной работы
- •3. Лабораторная работа № 11 Разработка программ обработки символьной информации.
- •3.1. Цель лабораторной работы
- •3.2. Теоретические сведения
- •Int main () {
- •Int main (){
- •Конструкторы и присваивание строк
- •Допустимые для объектов класса string операции:
- •3.3 Задание на выполнение лабораторной работы
- •3.4 Порядок выполнения работы
- •3.5. Методические указания
- •Istream& getline (istream& is, string& str, char delim);
- •Istream& getline (istream& is, string& str);
- •Int main () {
- •Int main () {
- •3.6 Контрольные вопросы
- •3.7 Варианты заданий лабораторной работы
- •1.1. Цель лабораторной работы 3
- •1.2. Теоретические сведения 3
Int main () {
TPoint A (1.0,2.0);
TPoint B (4.0,5.0);
TPoint C (7.0,8.0);
cout<< \nОпределены” <<TPoint : : count () << “точки”;
return 0;
}
Указатель this
Когда функция-член класса вызывается для обработки данных конкретного объекта, этой функции автоматически и неявно передается указатель на тот объект, для которого функция вызвана. Этот указатель имеет имя this и неявно определен в каждой функции класса следующим образом:
имя_класса *const this = адрес_объекта
Указатель this является дополнительным скрытым параметром каждой нестатической компонентной функции. При входе в тело принадлежащей классу функции this инициализируется значением адреса того объекта, для которого вызвана функция. В результате этого объект становится доступным внутри этой функции.
В большинстве случаев использование this является неявным. В частности, каждое обращение к нестатической функции-члену класса неявно использует this для доступа к члену соответствующего объекта.
Примером широко распространенного явного использования this являются операции со связанными списками.
1.3 Задание на выполнение лабораторной работы
Написать программу, в которой создается иерархия классов. Использовать механизм виртуальных функций при включении полиморфных объектов в связанный список. Применить статические компоненты класса.
1.4 Порядок выполнения
Определить иерархию классов (в соответствии с вариантом).
Определить в базовом классе статический компонент - указатель на начало (вершину) связанного списка объектов и статические функции для просмотра списка и очистки списка. В базовом классе объявить чистую виртуальную функцию для просмотра объекта.
Реализовать производные классы в соответствии с иерархией классов.
Написать демонстрационную программу, в которой создаются объекты
различных производных классов и помещаются в список, после чего список просматривается и очищается.
Определить методы классов для просмотра объектов и деструкторы
виртуальными.
Реализовать вариант, когда объект добавляется в список при его
создании, то есть в конструкторе.
1.5 Методические указания
Для определения иерархии классов связать отношением наследования классы, приведенные для заданного варианта. Из перечисленных классов выбрать один, который будет стоять во главе иерархии. Это абстрактный класс.
Определить в классах все необходимые конструкторы и деструктор.
Компонентные данные класса специфицировать как protected.
Пример определения статических компонентов:
static person* begin; // указатель на начало списка
static void print(void); // просмотр списка
static void clear(void); //освобождение списка
Статическую компоненту инициализировать вне определения класса, в глобальной области.
Добавление объекта в список можно осуществлять следующими описанными ниже способами.
- Во-первых, можно предусмотреть метод класса, то есть объект сам добавляет себя в список. Например, a.Add() - объект a добавляет себя в список.
- Во-вторых, включение объекта в список можно выполнять при создании объекта, то есть поместить операторы включения создаваемого объекта в конструктор класса. В случае иерархии классов, включение объекта в список
должен выполнять только конструктор базового класса. Программа должна продемонстрировать оба этих способа.
Список будет состоять из объектов производных классов. Список просматривать путем вызова виртуального метода show для каждого объекта списка.
Статический метод просмотра списка вызывать не через объект, а через класс.
Если производные классы ресурсоемкие, то деструктор в базовом классе следует объявлять виртуальным. Чтобы не осталось не освобожденных ресурсов при уже удаленных объектах.
Определение классов, их реализацию, демонстрационную программу поместить в отдельные файлы.
