
- •Конспект по "Объектно-ориентированному программированию".
- •1. Что такое объект? Понятия "состояние" и "поведение"?
- •2. Понятия "интерфейс" и "реализация"?
- •3. Понятия "класс" и "абстрактный тип данных"?
- •4. Основные категории классов?
- •5. Объявление класса? Общий вид объявления класса? Включение кода метода внутри объявления класса?
- •6. Особенности локальных классов?
- •7. Понятие inline-метода. Способы создания?
- •9. Константный объект? Константный метод?
- •10. Конструктор. Его назначение и синтаксические конструкции вызова конструктора?
- •11. Конструктор копирования. Общий вид и случаи вызова?
- •12. Что называется конструктором по умолчанию? Конструктором преобразования?
- •13. Основные свойства и правила использования конструкторов.
- •14. Деструктор. Вызов деструкторов (автоматический и явный).
- •15. Основные свойства и правила использования деструкторов.
- •16. Создание и уничтожение объектов.
- •17. Что такое наследование?
- •18. Понятия "базовый класс" и "производный класс"?
- •19. Принцип подстановки. Различие между понятиями "подкласс" и "подтип"?
- •20. Основные формы наследования?
- •21. Преимущества наследования?
- •22. Недостатки наследования?
- •23. Общая форма наследования классов? Спецификаторы доступа при наследовании?
- •24. Конструкторы и деструкторы производных классов? Порядок вызова конструкторов и деструкторов при множественном наследовании?
- •25. Множественное наследование. Общая форма?
- •26. Передача параметров в базовый класс. Назначение. Общая форма?
- •27. Указатели и ссылки на производные классы?
- •28. Виртуальная функция. Объявление виртуальной функции?
- •29. Чисто виртуальная функция. Общая форма чисто виртуальной функции?
- •30. Понятие "абстрактный класс".
- •31. Что такое полиморфизм? в каких формах он может существовать?
- •32. Понятие "перегрузка"?
- •33. Приведение типа. Неопределенность. Причины возникновения неопределенности и способы ее устранения?
- •34. Понятие "параметрическая перегрузка"?
- •35. Понятие "переопределение"? в чем заключается различие между перегрузкой и переопределением?
- •36. В чем заключается процесс уточнения?
- •37. Что такое шаблоны (или обобщенные функции)? Их назначение?
- •38. Функция-шаблон. Назначение функции-шаблона? Общий вид функции-шаблона?
- •39. Класс-шаблон. Общая форма класса-шаблона и экземпляра такого класса?
9. Константный объект? Константный метод?
Константный объект – это объект, значение полей которого изменять запрещено.
К таким объектам применяются только константные методы.
Константный метод:
– объявляется с ключевым словом constпосле списка параметров;
– не может изменять значения полей класса;
– может вызывать только константные методы;
– может вызываться для любых (не только константных объектов).
Как константные рекомендуется описывать те методы, которые предназначены для получения значений полей.
Например:
class monstr
{
…
int get_health() const
{
return health;
}
};
const monstr Dead(0, 0); // константный объект
cout<<Dead.get_health();
10. Конструктор. Его назначение и синтаксические конструкции вызова конструктора?
Конструктор – это метод (функция), имя которого совпадает с именем класса.
Конструктор предназначендля инициализации объекта и вызывается автоматически при его создании.
Конструктор вызывается, если в программе встречается какая-либо из следующих синтаксических конструкций (см. пример класс монстр):
Параметризованный конструктор:
имя_ класса имя_объекта [(список параметров)];// список параметров
// не должен быть пустым
Например, monstr Super(200, 300), Fedia, Z;
Здесь создаются три объекта. Значения неуказанных параметров устанавливаются по умолчанию, т.е. Fedia() - ошибка.
имя класса (список параметров);// создается объект без имени
// (список параметров может быть пустым)
Например, monstr Х=monstr(1000);
Здесь создается безымянный объект со значением параметра health=1000 (значение второго параметра устанавливается по умолчанию). Выделяется память под объект Х, в которую копируется безымянный объект.
Такая форма создания объекта возможна в случае, когда для инициализации объекта допускается задать один параметр:
имя_ класса имя_объекта=выражение;// создается объект без имени
// и копируется
Например, monstr Y=500;
Здесь создается безымянный объект со значением параметра health=500 (значение второго параметра устанавливается по умолчанию). Выделяется память под объект Y, в которую копируется безымянный объект.
Параметры конструктора могут иметь любой тип, кроме этого же класса.
11. Конструктор копирования. Общий вид и случаи вызова?
Конструктор копирования – это специальный вид конструктора, который в качестве единственного параметра получает указатель на объект этого же класса.
Такой конструктор выполняетпоэлементное копирование полей. Если класс содержит указатели или ссылки, скорее всего, это будет неправильно, так как и копия, и оригинал будут указывать на одну и ту же область памяти.
Общий вид конструктора копирования в С++:
имя_класса::имя_класса(constимя_класса&)
{
… // тело конструктора
}
Конструктор копирования вызывается, когда новый объект создается путем копирования существующего:
– при описании нового объекта с инициализацией другим объектом;
– при передаче объекта в функцию по значению;
– при возврате объекта из функции (и при обработке исключений).
Если ни один конструктор копирования не задан в программе, компилятор создает его автоматически.