- •Вопрос 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. Природа классов. Отношения между классами. Типы отношений.
Вопрос 1. Ссылки и ссылочные параметры.
В случае вызова по ссылке оператор вызова дает вызываемой ф-ции возможность прямого доступа к передаваемым данным, а также возможность изменения этих данных. Вызов по ссылке хорош в смысле производительности, потому что он исключает накладные расходы на копирование больших объемов данных, но вызов по ссылке может ослабить защищенность, т.к. вызываемая ф-ция может испортить передаваемые в нее данные. Ссылка по существу – неявный указатель
Ссылочный параметр — это псевдоним соответствующего аргумента. Чтобы показать, что параметр ф-ции передан по ссылке, после типа параметра в прототипе функции ставится символ амперсанда (&); такое же обозначение используется в списке типов параметров в заголовке функции. Например, объявление
int &count
в заголовке ф-ции может читаться как <<count явл-ся ссылкой на int>>. В вызове ф-ции достаточно указать имя переменной и она будет передана по ссылке. Тогда упоминание в теле вызываемой ф-ции переменной по имени ее параметра в действительности явл-ся обращением к исходной переменной в вызывающей ф-ции и эта исходная переменная может быть изменена непосредственно вызываемой ф-цией.
В С++ можно создавать передаваемые по ссылке параметры. Для этого при объявлении функции перед парам-м став. &. При объявлении ссылки компилятор знает, что это неявный указатель, и обраб. соответств. образом. При вызове ф-и ей автоматически передаётся адрес аргумента => ф-я может модифицировать переменную.
type name(type &val);
Ограничения:
- нельзя взять ссылку от переменной ссылочного типа;
- нельзя создать массив ссылок;
- нельзя создать указатель на ссылку;
- ссылки на битовые поля не допускаются;
При передаче по ссылке объекта его копия не создаётся и деструктор не вызывается.
Ф-я может возвращать ссылку => такая ф-я может исп-ся в левой части оператора присв.
type &name(…);
Независимые сылки – переменные ссылочного типа как самост. переменные; НС должны быть иниц. при объявлении.
int i;
int &j = i;
Вопрос 2. Перегрузка функций.
Аргументы по умолчанию !!!
void name (char ch, int i = 45);
С++ позволяет определить несколько функций с одним и тем же именем, если эти функции имеют разные наборы параметров (по меньшей мере разные типы параметров). Эта особенность называется перегрузкой функции. Значение перегр. ф-й – позв. обесп. доступ к целому набору ф-й, исп-я общее имя. При вызове перегруженной ф-ции компилятор С++ определяет соответствующую ф-цию путем анализа кол-ва, типов и порядка следования аргументов в вызове. Перегрузка функции обычно используется для создания нескольких функций с одинаковым именем, предназначенных для выполнения сходных задач, но с разными типами данных.
// Использование перегруженных функций include<iostream.h> int square(int x) ( return x * x; } double square(double у) { return у * у;
main I
cout « "Квадрат целого числа 7 равен " « square(7) « endl
« "Квадрат числа 7.5 типа double равен « square(7.5) « endl;
return 0;
Перегруженные функции различаются с помощью их сигнатуры — комбинации имени функции и типов ее параметров. Компилятор кодирует идентификатор каждой ф-ции по числу и типу ее параметров (иногда это наз-ся декорированием имени), чтобы иметь возможность осуществлять надежное связывание типов. Надежное связывание типов гарантирует, что вызывается надлежащая ф-ция и что аргументы согласуются с параметрами. Компилятор выявляет ошибки связывания и выдает сообщения о них.
Для различения ф-ций с одинаковыми именами компилятор использует только списки параметров. Перегруженные ф-ции не обязательно должны иметь одинаковое кол-во параметров. Перегруженные ф-ции с параметрами по умолчанию могут стать причиной неопределенности.