- •Введение в понятие класса
- •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:
Общие данные и функции;
} [список-объектов];
При объявлении класса, как правило, используются прототипы функций-членов класса. Все функции в С++ должны иметь прототипы.
Когда требуется описать функцию-член класса, необходимо указать к какому классу относится эта функция. Например.