Основные понятия объектно-ориентированного программирования справочник с примерами на С++. Учебно-методическое пособие
.pdfВывод в консоль:
Fatal error from CPP!
Fatal error from C#!
Стоит отметить, что класс-родитель может содержать объект любого ти- па-потомка, но не наоборот.
Рассмотрим еще одно применение виртуальных методов:
в базовом классе есть метод (square), реализация которого одинаковая для всех производных классов, и он наследуется. В этом общем методе вызывается метод (print), который переопределяется в производных классах. Посмотрим, как это работает:
#include <iostream> using namespace std;
class shape { public:
void square(){ print();
}
virtual void print(){
cout << "I’m the square of the figure" << endl;
}
};
class rect : public shape { public:
void print(){
cout << "I’m the square of the rect" << endl;
}
};
int main()
{
shape obj1; obj1.square();
rect obj2; obj2.square();
}
В консоль будет выведено:
I’m the square of the figure
I’m the square of the rect
В начале подраздела «Раннее и позднее связывание. Виртуальные методы методы» мы рассмотрели этот пример, но метод print()был не виртуальным. И результат был такой:
21
I’m the square of the figure
I’m the square of the figure
Здесь наглядно видно, что виртуальный метод print()подстроился под объект, который его вызвал, на этапе выполнения программы, т.е. вызов виртуального метода произошел из того класса, к которому принадлежит объект, вызвавший этот метод.
Если в классе объявлена хотя бы одна виртуальная функция, то компилятор строит для этого класса (! не для объектов) Таблицу виртуальных методов
(VMT).
Таблица виртуальных методов содержит адреса виртуальных методов и предназначена для вызова нужных реализаций виртуального метода во время исполнения программы.
Вопросы для самоконтроля
1.Что происходит, если имя метода-наследника совпадает с именем базового метода?
2.Объясните, зачем нужны виртуальные функции?
3.Что такое связывание? Чем «раннее» связывание отличается от «позднего»?
4.Основные случаи применения виртуальных методов? В чем их преимущество?
5.Поясните термин «сокрытие» метода.
6.Что обозначается ключевым словом this?
7.В чем особенность методов класса, объявленных с ключевым словом static?
8.Укажите команду, которая вызывает метод print объекта p класса
TCount:
Код программы: |
Выбери верные варианты: |
|
|
class TCount { |
|
int count; |
|
public: |
1) print(p); |
TCount(){count=0; cout<<count;} |
2) p.print(); |
void print(){count++;cout<<count;} |
3) TCount.print(p); |
}; |
|
int main() |
4) p.print(TCount); |
|
|
{ |
5) p=TCount.print(); |
TCount p; |
|
… |
|
} |
|
|
|
22 |
|
7 Абстрактные классы
Абстрактный класс – класс, в котором есть хотя бы один чистый (обнуленный) виртуальный метод. Объекты таких классов создавать запрещено. Абстрактный класс определяет интерфейс для переопределения производными классами.
Чистые виртуальные функции
Чистые виртуальные функции – функции, которые объявляются в базовом классе как виртуальные и не содержат описания выполняемых действий. Шаблон объявления:
virtual возвращаемый_тип имя_функции (список_параметров) = 0;
Конструкция =0 называется чистым спецификатором.
Чистая виртуальная функция недоступна для вызова, единственная ее задача – служить основой для подменяющих ее функций в производных классах.
Если в производном классе чистая виртуальная функция не подменяется, то данный класс становится абстрактным.
Пример:
#include <iostream> using namespace std; class A { protected:
virtual void fan(int) = 0; void print(int);
};
class B: public A{
void fan(int){};
};
class C: public A{
void print(int){};
};
int main()
{
// A objA; B objB;
// C objC;
}
23
В примере А и С являются абстрактными классами, в то время как В – не абстрактный. В закомментированных строках ошибка – попытка создать объект абстрактного типа.
Вопросы для самоконтроля
1.Дайте определение абстрактного класса.
2.Дайте определение чистой виртуальной функции.
3.Наследуются ли чистые виртуальные функции?
4.Запишите название абстрактного метода одного из классов:
class TPet {
virtual void run() = 0;
};
class TDog {
void say() { cout << "Гав!"; } void run() { cout << "Побежал!"; }
};
24
ЗАКЛЮЧЕНИЕ
Врамках дисциплины «Объектно-ориентированное программирование» технологии ООП изучаются на языке С++. Принципы объектноориентированного программирования в разных языках примерно одинаковые, но, конечно, реализация именно в С++ может отличаться.
Внастоящее время объектно-ориентироанный подход к разработке программного обеспеения считаеся самым популярный. Применение технологий ООП позволяет сделать код более понятным и ускорить разработку ПО.
Центральным понятием в ООП является объект. Объект – это экземпляр какого-то класса (типа особого вида). Применение объектно-ориентированного подхода к разработке программы подразумевает разбиение задачи на отдельные объекты, описание каждого объекта (его характеристики и возможные действия), определение взаимодействия между объектами.
25
ЛИТЕРАТУРА
1.Букунов С. В. Основы объектно-ориентированного программирования : учебное пособие / С. В. Букунов, О. В. Букунова. – Санкт-Петербург : СанктПетербургский государственный архитектурно-строительный университет,
ЭБС АСВ, 2017. – 196 c. – ISBN 978-5-9227-0713-8. – Текст : электронный //
Электронно-библиотечная система IPR BOOKS : [сайт]. – URL: http://www.iprbookshop.ru/74339.html. – Режим доступа: для авторизир. пользо-
вателей.
2.Лисицин Д. В. Объектно-ориентированное программирование [Электронный ресурс]: конспект лекций / Лисицин Д. В. – Электрон. текстовые данные. – Новосибирск: Новосибирский государственный технический университет, 2010. – 88 c. – Режим доступа: http://www.iprbookshop.ru/44970. –
ЭБС «IPRbooks», по паролю. Гарантированный срок размещения в ЭБС до 05.02.2025 (автопролонгация).
3.Маляров А. Н. Объектно-ориентированное программирование : учебник для технических вузов / А. Н. Маляров. – Самара : Самарский государственный технический университет, ЭБС АСВ, 2017. – 332 c. – ISBN 978-5- 7964-1952-6. – Текст : электронный // Электронно-библиотечная система IPR BOOKS : [сайт]. – URL: http://www.iprbookshop.ru/91772.html. – Режим доступа:
для авторизир. пользователей. Гарантированный срок размещения в ЭБС до 06.02.2025 (автопролонгация).
4. Сорокин, А. А. Объектно-ориентированное программирование : учебное пособие. Курс лекций / А. А. Сорокин. – Ставрополь : Северо-Кавказский федеральный университет, 2014. – 174 c. – ISBN 2227-8397. – Текст : электронный // Электронно-библиотечная система IPR BOOKS : [сайт]. – URL: http://www.iprbookshop.ru/63110.html. – Режим доступа: для авторизир. пользо-
вателей.
26
Учебное издание
Ситняковская Елена Игоревна Янченко Елена Викторовна
Основные понятия объектно-ориентированного программирования: справочник с примерами на С++
Корректор А.Р. Шерстнёва
Подписано в печать 13.03.2024.
Формат бумаги 62 × 84/16, отпечатано на ризографе, шрифт № 10, п. л. – 1,7, заказ № 3, тираж – 50.
СибГУТИ 630102, г. Новосибирск, ул. Кирова, 86
27
