- •Введение в понятие класса
 - •Void queue::init(void)
 - •Перегруженные функции
 - •Int sqr_it(int I); // Прототипы
 - •Перегрузка операций.
 - •Наследование
 - •Конструкторы и деструкторы
 - •Int sloc,rloc;
 - •Void qput(int); // Прототип
 - •Int qget(void); // Прототип
 - •Конструктор с параметрами
 - •Конструктор копирования
 - •Void input();
 - •Void output();
 - •Void ThreeAngle::input()
 - •Void ThreeAngle::output()
 - •Void main(void)
 - •Дружественные функции
 - •Замечание
 - •Дружественные классы
 - •Аргументы функций, задаваемые по умолчанию
 - •Void main(void)
 - •Void stringxy(char *str, int X, int y)
 - •Структуры и классы
 - •Объединения и классы
 - •Void main()
 - •Наследование классов
 - •Конструкторы с параметрами при наследовании
 - •Множественное наследование
 - •Перегрузка функций и операций
 - •Ключевое слово this
 - •Перегрузка операций ввода/вывода. Инсерторы и экстракторы
 - •Void main(void)
 - •Vector a(1,2,3),b(4,5,6);
 - •Void main(void)
 - •Vector a(1,2,3),b(4,5,6);
 - •Void main(void)
 - •Vector a(1,2,3);
 - •Дружественные функции-операции
 - •Void main(void)
 - •Void swap1(int *I, int *j)
 - •Void swap(int a, int b)
 - •Void swap1(int *I, int *j)
 - •Void swap2(int &a, int &b)
 - •Использование ссылочных переменных для перегрузки унарных операций
 - •Перегрузка операции индексации [ ]
 - •Использование виртуальных функций
 - •Указатели на производные типы
 - •Виртуальные функции
 - •Замечания к использованию виртуальных функций
 - •Пример использования виртуальных функций
 - •Чистые виртуальные функции и абстрактные типы
 - •Производные классы и их конструкторы и деструкторы
 - •Void main()
 - •Конструкторы и деструкторы при множественном наследовании
 - •Void main()
 - •Виртуальные базовые классы.
 - •Операции динамического выделения памяти new и delete
 - •Void main(void)
 - •Void main(void)
 - •Виртуальные деструкторы
 - •Void main(void)
 - •Void main(void)
 - •Шаблоны классов и функций
 - •Шаблоны функций
 - •Void main(void)
 - •Void main(void)
 - •Шаблоны классов
 - •Int sloc, rloc;
 - •Void qput(t I);
 - •Void main(void)
 - •Статические члены класса
 - •Локальные классы
 - •Void f(void);
 - •Void main(void)
 - •Void f(void)
 - •Вложенные классы
 - •Void main(void)
 
С++ - язык объектно-ориентированного программирования
ООП – это новый способ подхода к программированию. Наиболее важное понятие ООП – это понятие объекта (object).
Объект – логическая единица, которая содержит данные и правила (методы) обработки этих данных. В языке С++ в качестве таких правил обработки выступают функции, т. е. объект объединяет в себе данные и функции, обрабатывающие эти данные. Внутри объекта данные и функции могут быть:
частными – (приватными) – private;
защищенными – protected;
общими – public.
Можно сказать, что объект – это переменная определенного пользователем типа.
Объектно-ориентированные языки обладают четырьмя важнейшими характеристиками:
инкапсуляцией – encapsulation;
наследованием – inheritance;
полиморфизмом – polymorphism;
абстракцией типов – abstraction.
Понятие инкапсуляции означает, что в качестве единицы целого рассматривается объединение некоторой группы данных и некоторой группы функций. Свойства объектов хранятся в структурах данных, напоминающих структуры языка С, а поведение объектов реализуется в виде функций, называемых функциями-членами (member function) объектов. В объекте реализована защита данных: если данные или функции-члены объявлены приватными или защищенными, то к ним нет доступа извне.
ООП поддерживает полиморфизм, означающий, что одно и то же имя можно использовать для логически связанных, но разных целей, т. е. имя определяет класс действий, которые в зависимости от типа данных могут существенно отличаться.
Например, можно определить три типа переменных:
целые;
комплексные числа;
векторы.
Для каждого из них можно определить функцию sum(x,y) – сумму двух переменных, а можно сделать так, что для всех этих трех типов будет определена операция сложения x+y. В зависимости от того, какого типа будут переменные x и y, работать эта функция и операция сложения будут по-разному.
Полиморфизм поддерживается и во время компиляции и во время выполнения программы.
Наследование позволяет одним объектам приобретать атрибуты и свойства других объектов. Наследование позволяет строить иерархию объектов, переходя от более общего к частному, уточняя и конкретизируя объект.
Введение в понятие класса
Одним из самых главных понятий С++ является понятие класса (class). В С++ для того, чтобы определить объект, надо сначала определить его форму, с помощью ключевого слова class. Понятие класса напоминает понятие структуры.
Рассмотрим пример, в котором определяется класс queue (очередь), который будет затем использоваться для определения объектов.
Очередь – это структура данных, для которой введены действия “поставить в очередь”, “обслужить”. Постановка в конец очереди, обслуживание с начала очереди. Эта структура называется FIFO (First Input First Output).
Имеем следующую модель:
Очередь состоит из целочисленного массива и двух целочисленных переменных – маркера начала очереди и маркера конца очереди.
Поставить в очередь – заполнить заданным значением очередной элемент массива с конца очереди.
Обслужить – выдать значение очередного элемента с начала очереди.
Очередь полная, если заполнен последний элемент массива.
Очередь пустая – маркер начала и маркер конца очереди указывают на один и тот же элемент массива.
// объявление класса
class queue {
private: // режим доступа к элементам класса
int q[100];
int sloc, rloc; // маркер начала и конца очереди
public: // режим доступа к функциям класса
void init(void);
void qput(int m);
int qget(void);
};
Таким образом, объявлен новый тип переменных класс – class queue. Класс содержит приватную часть – это массив q и маркеры – переменные sloc, rloc.
Приватные элементы не могут использоваться никакими функциями, не являющими членами класса (работает принцип инкапсуляции – контроль доступа к переменным). По умолчанию все члены класса private. Функции init(), qget(), qput() – общедоступные (следуют в объявлении после public).
Как правило, большинство данных объявляются приватными, а доступ к ним осуществляется через общие функции.
Режим доступа protected играет существенную роль при использовании механизма наследования. Private, protected, public могут встречаться в объявлении классов в любом порядке и любое количество раз. Хорошим стилем считается использование каждого из ключевых слов один раз.
Функции init(), qget(), qput() – члены-функции (member function) класса queue.
После создания класса можно определить объект (переменную) этого класса. Например
queue obj1, obj2;
Это означает создание двух объектов одного типа.
Отметим, что классы – это не объекты (переменные), а шаблоны (типы) для создания объектов. Отношение между классом и объектом такое же, как между типом данных и переменной.
Можно создать объект и во время объявления класса, поместив имя объекта после закрывающейся фигурной скобки.
Объявление класса в общем виде следующее:
class имя-класса{
private:
Приватные данные и функции;
protected:
Защищенные данные и функции;
public:
Общие данные и функции;
} [список-объектов];
При объявлении класса, как правило, используются прототипы функций-членов класса. Все функции в С++ должны иметь прототипы.
Когда требуется описать функцию-член класса, необходимо указать к какому классу относится эта функция. Например.
