- •Вопрос 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. Природа классов. Отношения между классами. Типы отношений.
Вопрос 46. Класс auto_ptr и динамич выделение памяти.
Обычной стратегией работы с динамической памятью является выделение некоторого пространства (возможно, объекта) в области свободной памяти, присваивание адреса выделенной памяти указателю, использование этого указателя для манипулирования памятью и освобождения памяти с помощью delete, когда она больше не нужна. Если после того, как память была выделена, и до того, как будет выполнен оператор delete, возникает исключение, может иметь место утечка памяти. Шаблон класса auto_ptr для разрешает данную ситуацию.
Объект класса auto_ptr хранит указатель на динамически выделенную память. Когда объект auto_ptr выходит из области действия, он выполняет над своим элементом-указателем операцию delete. Шаблон класса auto_ptr предусматривает операции * и -> , чтобы с объектом auto_ptr можно было обращаться как с обычной переменной-указателем.
class Integer
{ public:
Integer(int i=0):Value(i)
{
cout<<”Конструктор Integer ”<<value;
}
~Integer()
{
cout<<”Деструктор Integer”<<value;
}
void setInteger() const
{
return value;
}
private:
int value;
}
int main()
{
auto_ptr<Integer> ptrToInteger(new Integer(7));
ptr ToInteger->setInteger(99);
cout<<(*ptrToInteger).getInteger();
}
Вопрос 47. Static_cast, reinterpret_cast
Основные формы
static_cast< целевой тип >(выражение)
reinterpret_cast < целевой тип >(выражение)
Здесь <целевой тип> - это тип, к-ым должен стать тип параметра (выражение) после выполнения операции приведения типов.
Оператор static_cast предназначен для выполнения операции приведения типов над объектами неполиморфных классов. Может выполнять любую стандартную операцию преобразования, но не во время выполнения программы).
Оператор reinterpret_cast даёт возможность преобразовать указатель одного типа в указатель совершенно другого типа. Он также позволяет приводить указатель к типу целого и целое к типу указателя. Используется для выполнения операции приведения внутренне несовместимых типов указателей.
//пример оператора reinterpret_cast
#include <iostrean.h>
int main(){
int I;
char *p=”This is a string”;
i=reinterpret_cast<int>(p);..преобразование указателя к целому
cout<<i;
return 0;
}
Вопрос 48. Инфо о типе времени выполнения. Оператор dynamic_cast
Используя идентификацию типа времени исполнения (run-time-type-identification — RTTI) можно определить тип объекта во время исполнения программы. Для этого используется функция typeid (оператор для выявления типа объекта). Общая форма записи имеет вид: typeid(А). Здесь А - объект, чей тип требуется определить. Функция typeid возвращает ссылку на объект типа typeinfo, который описывает тип объекта А.
Когда функция typeid применяется к указателю на базовый класс полиморфного класса, она автоматически возвращает тип объекта, на к-ый указывает ук-ль, в том числе любой класс, выведенный из базового класса.
RTTI не явл-ся, тем средством, к-ое используется всякой программой. Однако при работе с полиморфными типами она позволяет знать тип объекта в любой ситуации.
Оператор dynamic_cast
Оператор dynamic_cast относится непосредственно к RTTI. Он реализует преобразования, приведение типов в динамическом режиме, что позволяет контролировать правильность этой операции во время работы программы. Если при выполнении оператора dynamic_cast приведение типов не произошло, будет выдана ошибка приведения типов. Основная форма:
dynamic_cast<целевой тип>(выражение)
<целевой тип> - это тип, которым должен стать тип параметра (выражение) после выполнения операции приведения типов. Оператор dynamic_cast используется для приведения типа одного указателя к типу другого или типа одной ссылки к типу другой.
При неудачной попытке приведения типов результатом выполнения оператора является NULL, если в операции использовались указатели. Если же в операции использовались ссылки, возбуждается исключительная ситуация bad_cast.
Осн. применение:
приведение полиморфных типов. Например, пусть имеются два полиморфных класса B и D, где D выведено из B. Оператор dynamic_cast всегда может привести указатель D* к указателю B*. Оператор dynamic_cast может привести указатель В* к указателю D* только в то м случае, если указатель фактически указывает на объект D.