- •Конспект по "Объектно-ориентированному программированию".
- •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. Класс-шаблон. Общая форма класса-шаблона и экземпляра такого класса?
5. Объявление класса? Общий вид объявления класса? Включение кода метода внутри объявления класса?
Объявление классахарактеризует объекты (внутренние переменные, типы поведения), но само по себе не создает новых данных. То есть при объявлении класса всего лишь описываются его данные и функции.
Данные класса называются полями данных, а функции класса –методами.
Поля и методы называются элементами класса.
Поля данных класса:
– могут иметь любой тип, кроме типа этого же класса (но могут быть указателями или ссылками на этот класс);
– могут быть описаны с модификатором const, но при этом они инициализируются только один раз (с помощью конструктора) и не могут изменяться;
– могут быть описаны с модификатором static (статические поля), но не как auto, extern и register.
Инициализация полей при описании не допускается!
Объявление метода содержит описание имени метода, типов его параметров и типа возвращаемого значения.
В С++ объявление класса начинается с ключевого слова class и во многом напоминает структуру в языке С, за исключением того, что вместе с полями данных могут быть объявлены заголовки процедур.
Общий вид объявления класса в С++:
class имя_класса
{
[private:]
скрытые (частные) данные и функции
public:
доступные (публичные) данные и функции
}; //описание класса заканчивается точкой с запятой
список объектов; // список объектов может быть пустым
Спецификаторы доступа privateиpublicуправляют видимостью элементов класса. По умолчанию все члены класса являются частными (private) и видимы только внутри класса.
Ключевое слово private:используется в случае, когда частные объявления делаются после публичных и ставится перед фрагментами кода, доступ к которым разрешен только из самого класса.
Ключевое слово public:обозначает область интерфейса – т. е. то, что видно извне класса.
Действие любого спецификатора распространяется до следующего спецификатора или до конца класса. Можно задавать несколько секций privateиpublic, порядок их следования значения не имеет.
Включение кода метода внутри объявления класса
Любой метод, определенный внутри объявления класса, является автоматически inline-методом, если только это допустимо. В таком случае нет необходимости предварять объявление метода (функции) ключевым словом inline.
Если внутри класса находится только объявление (заголовок) метода, сам метод определяется в другом месте программы с помощью операции доступа к области видимости (::). Например:
void monstr::draw(int x, int y, int scale, int position);
{
... // тело метода
}
6. Особенности локальных классов?
Классы могут быть глобальными, то есть объявленными вне любого блока, илокальными, то есть объявленными внутри блока (например, функции или другого класса).
Особенности локальных классов:
– внутри локального класса можно использовать типы, статические (static) и внешние (extern) переменные, внешние функции и элементы перечислений из области, в которой он описан;
– запрещается использовать внутри класса автоматические переменные из области, в которой он описан;
– локальный класс не может иметь статических элементов;
– методы локального класса могут быть описаны только внутри класса;
– если один класс вложен в другой класс, они не имеют каких-либо особых прав доступа к элементам друг друга и могут обращаться к ним только по общим правилам.