- •Вопрос 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. Природа классов. Отношения между классами. Типы отношений.
Вопрос 17. Перегрузка операций индексации массива.
В С++ перегрузка рассматривается как бинарный оператор. Его следует перегружать только с помощью ф-ции-члена. Пример:
char operator [](int i)
{
return str[i];
}
Где в аргументе ф-ции передается индекс массива. Тип int не обязателен, но т. к. индексируется целыми числами, то используют его. Достоинство – с его помощью можно предотвратить выход за пределы массива.
Нельзя использовать friend.
Оператор [] м. б. перегружен, чтобы получать единственный аргумент произвольного типа и возвращать произвольный тип в кач-ве своего значения.
class String { private:
char* s;
public:
String(char*);
char operator[](int n) const; }; // n-й символ
char String::operator[](int n)
{ // Здесь должна выполняться проверка диапазона
return s[n]; }
Поскольку оператор [] может вызываться лишь с одним аргументом, для имитации многомерных массивов часто применяют анонимные экземпляры, что позволяет создать произвольное кол-во псевдоаргументов.
Вопрос 18. Понятие наследования. Механизм ограничения доступа при наследовании.
Наследование предст-т собой процесс, благодаря к-му один объект может наследовать, приобретать св-ва от другого объекта. При создании нового класса вместо написания полностью новых данных-эл-тов и ф-ций-эл-тов программист может указать, что новый класс явл-ся наследником данных-эл-тов и ф-ций-эл-тов ранее определенного базового класса. Этот новый класс называется производным классом. Каждый производный класс сам явл-ся кандидатом на роль базового класса для будущих производных классов. При простом наследовании класс порождается одним базовым классом. При множественном наследовании производный класс наследует нескольким базовым классам (возможно неродственным).
При простом наследовании предполагается, что производный класс будет выполнять примерно те же функции, что и базовый класс. Основой наследования явл-ся способность определять в производном классе добавления, замены или усовершенствования черт, унаследованных от базового класса.
Производный класс не может иметь доступ к закрытым Эл-там своего базового класса; Но может иметь доступ к открытым и защищенным Эл-там своего базового класса. Эл-ты базового класса, к-ые не должны быть доступны производному классу ч/з наследование, объявляются в базовом классе закрытыми.
Защищенные элементы
Открытые элементы базового класса доступны всем ф-циям программы. Закрытые Эл-ты базового класса доступны только ф-циям-эл-там и друзьям базового класса.
Защищенный уровень доступа служит промежуточным уровнем защиты м/у открытым доступом и закрытым доступом. Защищенные Эл-ты базового класса могут быть доступны только Эл-там и друзьям базового класса и Эл-там и друзьям производного класса.
Эл-ты производного класса могут ссылаться на открытые и защищенные Эл-ты базового класса простым использованием имен этих элементов.
Вопрос 19. Приведение типа указателя базового класса к указателю производного класса и наоборот.
В общем случае ук-ль одного типа не может указывать на объект другого типа. Из этого правила есть исключение, к-ое относится только к производным классам. Т.е. ук-ль на базовый класс может указывать на объект производного класса, получ-го из этого баз-го класса. Пусть есть базов. класс B_class и производный от него - класс D_class
В_class *p;
B_class B_ob;
D_class D_ob;
p = &B_ob; // р указ на объект типа B_class
p = &D_ob;// р указ-ет на объект типа D_class, явл-ся объектом, произв. от B_class
Используя указ-ль р, можно получить доступ ко всем членам D_ob, к-ые наследованы от B_ob. Однако специфические члены D_ob не могут быть получены с исп-ем указ-ля р (до тех пор, пока не осущ-но приведение типов((D_class *)p)-> f(); \\ здесь ф-я f() член класса D_class). Это явл-ся следствием того, что указатель знает только о членах базового класса и ничего не знает о специфич-х членах производных классов.
Хотя ук-ль, имеющий тип указателя на базовый класс, может исп-ся в кач-ве ук-ля на производный объект, обратное не имеет места. Это означ., что указатель, имеющий тип указателя на производный класс, не может исп-ся для доступа к объектам баз-го класса
Вопрос 20. Переопределение членов базового класса в производном классе. В производных классах существует возможность переопределять ф-ции, объявленные в базовом классе. Для этого в производном классе описывается ф-ция с тем же именем, но с другим набором аргументов. Выбор того, какую ф-цию вызвать делает компилятор на основании типа данных объекта. Для доступа из производного класса к ф-ции базового класса используется оператор (::) разрешения области действия.