- •Вопрос 1. Ссылки и ссылочные параметры.
- •Вопрос 2. Перегрузка функций.
- •Вопрос 3. Шаблоны функций.
- •Вопрос 4. Использование const с указателями.
- •Вопрос 5. Область действия класса. Управление доступом к членам класса. Отделение интерфейса от реализации.
- •Вопрос 6. Понятие конструктора .Использование констр-ра с аргументами по умолчанию. Конструктор по умолчанию.
- •Вопрос 7. Понятие деструктора. Когда вызывается конструктор и деструктор.
- •Вопрос 8. Константные объекты и функции-члены.
- •Вопрос 9. Дружественные функции и друж. Классы.
- •Вопрос 10. Указатель this.
- •Вопрос 11. Операции new и delete.
- •Вопрос 12. Статические члены класса.
- •Вопрос 13. Понятие перегрузки операций.
- •Вопрос 14. Функции-операции как члены класса и как друж-е функции
- •Вопрос 15. Перегрузка операций ввода/вывода в поток, бинар и унар операций.
- •Вопрос 17. Перегрузка операций индексации массива.
- •Вопрос 18. Понятие наследования. Механизм ограничения доступа при наследовании.
- •Вопрос 19. Приведение типа указателя базового класса к указателю производного класса и наоборот.
- •Вопрос 21. Конструкторы и деструкторы в производных классах.
- •Вопрос 22. Неявное преобразование объектов производных классов в объекты базового класса.
- •Вопрос 23. Иерархия классов. Уровни наследования.
- •Вопрос 24. Множественное наследование.
- •Вопрос 25. Неопределённость при множ-м наследовании. Включение «классы в классах».
- •Вопрос 26. Понятие виртуальной функции.
- •Вопрос 27. Понятие полиморфизма.
- •Вопрос 28. Абстрактные и конкретные базовые классы.
- •Вопрос 29. Статическое и динамическое связывание.
- •Вопрос 30. Виртуальные деструкторы.
- •Вопрос 31. Шаблоны классов.
- •Вопрос 32. Шаблоны классов и пользовательские типы
- •Вопрос 33. Шаблоны и наследование.
- •Вопрос 34. Классы и объекты потоков ввода/вывода. Иерархия потоковых классов.
- •Вопрос 35, 38. Предопределённые потоковые объекты. Состояние ошибок потока.
- •Вопрос 36. Манипуляторы потоков.
- •Вопрос 37. Неформатированный ввод/вывод с помощью read/ write
- •Вопрос 38. Состояние ошибок ввода/вывода
- •Вопрос 39. Понятие исключения. Когда должна использоваться обработка исключений.
- •Вопрос 40. Генерация исключений. Повторная генерация исключений.
- •Вопрос 41. Перехват исключений.
- •Вопрос 42. Спецификация исключений. Обработка неожиданных исключений.
- •Вопрос 43. «Раскручивание» стека. Иерархия исключений стандартной библиотеки.
- •Вопрос 44. Конструкторы, деструкторы и исключения. Исключения и наследование.
- •Вопрос 45. Обработка неуспешного выполнения new.
- •Вопрос 46. Класс auto_ptr и динамич выделение памяти.
- •Вопрос 47. Static_cast, reinterpret_cast
- •Вопрос 48. Инфо о типе времени выполнения. Оператор dynamic_cast
- •Вопрос 49. Ключевое слово explicit.
- •Вопрос 50. Ключевое слово mutable.
- •Вопрос 51. Указатели на члены класса.
- •Вопрос 52. Множественное наследование. Виртуальные базовые классы.
- •Вопрос 53. Классы-контейнеры и классы-итераторы.
- •Вопрос 54. Понятие ооп. Три условия ооп-программы. Парадигмы ооп.
- •Вопрос 55.Основные составляющие объектного подхода: абстрагирование, инкапсуляция, модульность.
- •Вопрос 56. Основные составляющие объектного подхода: иерархия, типизация, полиморфизм.
- •Вопрос 57. Природа объекта. Состояние, поведение, идентичность объекта.
- •Вопрос 58. Отношения между объектами. Связи. Агрегация.
- •Вопрос 59. Природа классов. Отношения между классами. Типы отношений.
Вопрос 21. Конструкторы и деструкторы в производных классах.
Поскольку производный класс наследует эл-ты базового класса, то при создании объекта производного класса д. б. вызван конструктор базового класса для задания начальных значений эл-там базового класса, содержащимся в объекте производного класса.
Конструктор производного класса всегда сначала вызывает конструктор своего базового класса для задания начальных значений тем эл-там производного класса, к-ые идентичны эл-там базового класса. Если конструктор производного класса отсутствует, то конструктор по умолчанию производного класса вызывает конструктор базового класса. Деструкторы вызываются в последовательности, обратной вызовам конструкторов, так что деструктор производного класса вызывается раньше соответствующего деструктора базового класса. Т.к. уничтожение объекта баз-го класса влечёт за собой уничтожение объекта производного класса, то дестр-р произв должен выполн перед дестр-ром баз-го.
Производный класс может служить базовым классом для создания следующего производного класса. В этом случае констукторы выполняются в порядке наследования, а деструкторы в обр порядке.
class a
{ int i;
public:
a(int _i): i(_i)
{ cout<<"Init a";
show(); }
void show()
{ cout<<i; } };
class b
{ int j;
public:
b(int _j): j(_j)
{ cout<<"Init b";
show(); }
void show()
{ cout<<j; } };
class c: public a, public b
{ public: c(int _a, int _b): a(_a),b(_b)
{ cout<<"Init c"; }
void show()
{ a::show();
b::show(); } };
int _tmain(int argc, _TCHAR* argv[])
{ c u(1,1);
u.show();
getch();
return 0; }
Вопрос 22. Неявное преобразование объектов производных классов в объекты базового класса.
Св-ва:
Производный класс и базовый класс объединяют разные типы данных.
Объект производного класса может рассматриваться как объект базового класса:
объект производного класса имеет в своём составе все данные и ф-ции соответствующие базовому классу.
в производном классе определяются новые данные и ф-ции
объект базового класса может быть присвоен объекту производного класса
Объекты базового класса не могут рассматриваться как объекты производного класса:
Теряются описанные в производном классе данные и методы.
Объект производного класса не может быть присвоен объекту производного класса.
В базовом классе оператор присваивания может быть перегружен, что бы разрешить подобное присваивание.
Несмотря на тот факт, что объекты производных классов «являются» также и объектами базового класса, типы объектов производного и базового классов различны
Способы комбинирования и попарного сопоставления указателей и объектов базового и производного классов:
Ссылка на объект базового класса с помощью указателя на базовый класс допустима.
Ссылка на объект производного класса с помощью указателя на производный класс допустима.
Ссылка на объект производного класса с помощью указателя на базовый класс. Возможно возникновение синтаксических ошибок. Код должен ссылаться только на члены базового класса.
Ссылка на объект базового класса с помощью указателя на производный класс. В явном виде вызывает синтаксическую ошибку. Требуется явное приведение типа указателя производного класса в указатель базового класса.