- •Вопрос 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. Природа классов. Отношения между классами. Типы отношений.
Вопрос 8. Константные объекты и функции-члены.
Для написания программ необходимо пользоваться принципом наименьших привилегий , т.е. задавать объекту только те привилегии, к-ые ему необходимы Используя слово const—указывающее на то, что объект не может быть модифицирован. Когда используется объект, объявленный с модификацией const , то для него могут вызываться только те ф-ции класса, к-ые так же объявлены с модификатором const. Такие ф-ции не могут изменить состояние объекта. Конструкторы и деструкторы не могут быть объявлены с модификатором const.
Только константные ф-ции-члены могут оперировать константными объектами. но не могут изменять объект — это не позволит компилятор.
Константная ф-ция указывается как const и в объявлении, и в описании с помощью ключевого слова const после списка параметров функции, но перед левой фигурной скобкой, которая начинает тело функции. Например, в приведенном ниже предложении объявлена как константная функция-элемент некоторого класса А
int A::getValue() const {return privateDateMember};
которая просто возвращает значение одного из данных-элементов объекта. Константный объект не может быть изменен с помощью присваивания, так что он должен получить начальное значение.
Константная функция, аргументы которой совпадают с аргументами неконстантной функции, тем не менее считается другой функцией. Компилятор вызывает константную или неконстантную версию в зависимости от типа переменной, указывающей или ссылающейся на объект.
class Foo { public:
void Fn();
void Fn() const; // Другая функция!
};
Foo* f = new Foo;
f->Fn(); // Вызывается неконстантная версия
const Foo* f1 = f;
f1->Fn(); // Вызывается константная версия
Вопрос 9. Дружественные функции и друж. Классы.
Ф-я, не явл-ся членом класса, может иметь доступ к его членам, если она объявлена другом класса (ключ. слово friend). Ограничения: производные классы не наследуют друж. ф-й; друж. ф-и не могут объявляться с ключ. словами static, друзья не имеют указателя this; друзьями класса могут быть объявлены перегруж ф-ии.
Классы также могут быть друзьями других классов; в этом случае во всех ф-ях класса-друга видны все члены того класса, другом к-ого он является.
Дружественные функции класса определяются вне области действия этого класса, но имеют право доступа к закрытым элементам private данного класса. Функция или класс в целом могут быть объявлены другом (friend) другого класса.
Дружественные функции используются для повышения производительности. Чтобы объявить функцию как друга (friend) класса, перед ее прототипом в описании класса ставится ключевое слово friend..Дружественность требует разрешения, т.е. чтобы класс В стал другом класса А, класс А должен объявить, что класс В — его друг. Т.о. дружественность не обладает ни св-вом симметричности, ни св-вом транзитивности, т.е. если класс А — друг класса В, а класс В — друг класса С, то отсюда не следует, что класс В — друг класса А, что класс С — друг класса В, или что класс А — друг класса С.
#include <iostream.h>
// Измененный класс Count class Count{
friend void setX(Count &, int}; // объявление друга
public:
Count() { x = 0; } // конструктор
void print() const {cout « x <<endl;) // вывод private:
int x; // элемент данных
Друзьями класса можно определить перегруженные функции. Каждая перегруженная функция, предназначенная в друзья, должна быть явно объявлена в описании класса как друг этого класса.
