- •3. Указатели и ссылки. Указатель this.
- •4. Использование операторов new и delete.
- •5. Понятие классов и экземпляров классов.
- •6. Описание классов(class, struct, union).
- •7. Вложенные классы.
- •8. Определение объектов при помощи классов.
- •9. Конструкторы и деструкторы классов.
- •10. Атрибуты доступа к компонентам классов.
- •11. Объявление и определение методов класса.
- •12. Вызов членов класса.
- •13. Перегрузка конструкторов. Конструкторы копий.
- •14. Перегрузка операторов отношения.
- •15. Перегрузка логических операторов.
- •16. Перегрузка унарных операторов.
- •17. Перегрузка бинарных операторов.
- •18. Функция оператор как член класса и как friend функция.
- •19. Дружественные функции.
- •20. Доступ к компонентам классов в зависимости от атрибутов доступа.
- •21. Введение в наследование. Базовые классы.
- •22. Производные классы.
- •23. Ограничение доступа к элементам класса. Наследование свойств и модификаторы доступа. Одиночное наследование. Доступ к компонентам производных и базовых классов.
- •24. Конструкторы базовых и производных классов.
- •25. Виртуальные базовые классы. Чисто виртуальные функции.
- •26. Использование указателей на базовые классы и производные классы. Виртуальные методы.
- •27. Потоки ввода-вывода.
- •28. Иерархия классов ввода-вывода. Основные уровни иерархии. Классы потоков.
- •29. Стандартные классы, объекты и механизмы консольного ввода/вывода.
- •30. Стандартные классы, объекты и механизмы файлового ввода/вывода.
- •31. Понятие манипулятора. Реализация пользовательских манипуляторов.
- •32. Файлы последовательного доступа и произвольного доступа.
- •33. Понятие шаблона. Шаблоны функций и классов.
5. Понятие классов и экземпляров классов.
Класс – это определяемый пользователем тип. Функции объявленные внутри определения класса называются функциями-членами и их можно вызывать только для переменной соответствующего типа, используя стандартный синтаксис доступа к членам структуры. Управление доступом. Метка public разделяет тело класса на две части. Имена в первой (private) части могут использоваться только функциями-членами. Вторая часть образует открытый интерфейс объектов класса. Структура, на самом деле, является классом, члены которого открыты по умолчанию.
6. Описание классов(class, struct, union).
Структура состоит из набора полей, которые никак не защищены. Если элементы структуры имеют переменную длину, их представляют в виде указателей. Выделение и освобождение памяти под эти указатели делаются вручную.
struct Array
{
double* val;
int len;
};
void FreeArray(const struct Array*);
void AllocArray(const struct Array*, int len);
double Elem(const struct Array*, int i);
void ChangeElem(const struct Array*, int i, double x);
В отличие от типа структура (struct) языка Си, состоящей только из полей, класс (class) Си++ состоит из полей и функций-членов (member functions). Поля бывают публичными (public), защищёнными (protected) и собственными (приватными, private). В Си++ тип структура аналогичен типу класс, отличие в том, что по умолчанию поля и функции-члены у структуры публичные, а у класса - собственные.
class Array {
public:
void Alloc(int new_len);
void Free();
inline double Elem(int i);
inline void ChangeElem(int i, double x);
protected:
int len;
double* val;
};
Union - представляет собой структуру, члены которой расположены по одному и тому же адресу. Поэтому размер объединения равен размеру его наибольшего члена. В любой момент времени объединение хранит значение только одного из членов.
union Some {
int i;
double a;
};
7. Вложенные классы.
Вложенные классы - это обычные классы, члены которых имеют полный доступ ко всем членам родителя (слово 'родитель' следует понимать не в плане наследования, а в плане непосредственной принадлежности). Объявляются вложенные классы внутри тела родителя, при этом важна область видимости, в которой класс был объявлен. Через объект родительского класса доступ к членам вложенного класса возможен (при наявности допустимых прав) через оператор ::. Главное преимущество вложенных классов заключается в том, что не засоряется глобальная область видимости - если необходима структура или класс для внутреннего хранения данных, то лучшего, чем вложенный класс трудно придумать. В связи с этим и главная рекомендация - вложенными делайте только те классы, которые логически тесно связаны с родительским классом. Нерекомендуемо сильно развивать иерархию вложенных классов, т.к. это ухудшает читаемость - Вы получите механизм обращения типа A::A1::A2::, а это как правило не способствует упрощению понимания логики программы.
