Презентация по ООП
.pdfОбъектно-ориентированное программирование
Классы в C++
О.А.Мирзеабасов
Кафедра ИС
Осень 2014
О.А.Мирзеабасов (Кафедра ИС) |
ООП |
Осень 2014 |
1 / 14 |
Содержание
1 Структура класса C++
2 Перегрузка операций
3 Наследование
О.А.Мирзеабасов (Кафедра ИС) |
ООП |
Осень 2014 |
2 / 14 |
Структура класса C++
Элементами класса в C++ могут быть:
поля;
методы;
специальные методы — конструкторы и деструкторы.
class имя_класса { private:
//скрытые поля и методы public:
//открытые поля и методы }; //!!!
О.А.Мирзеабасов (Кафедра ИС) |
ООП |
Осень 2014 |
3 / 14 |
Конструкторы класса
Конструкторы служат для инициализации создаваемых объектов. Особенности конструкторов:
имя совпадает с именем класса;
в классе могут быть определены несколько конструкторов, различающихся списком аргументов;
конструкторы не имеют возвращаемого значения;
конструкторы не наследуются;
если в классе явно не определен ни один конструктор, компилятор автоматически создаст конструктор по умолчанию (без параметров).
О.А.Мирзеабасов (Кафедра ИС) |
ООП |
Осень 2014 |
4 / 14 |
Деструкторы
Деструктор — специальный метод класса, использующийся для освобождения ресурсов при уничтожении объекта. Имя деструктора состоит из знака тильды (~) и имени класса. Деструктор класса не имеет возвращаемого значения и параметров.
Деструктор вызывается автоматически при вызове оператора delete или при выходе объекта из области видимости.
О.А.Мирзеабасов (Кафедра ИС) |
ООП |
Осень 2014 |
5 / 14 |
Пример класса: объявления
#ifndef STROKA_H_DEFINED #define STROKA_H_DEFINED #include <stdio.h> #include <string.h> class Stroka {
private: char *buf; public:
Stroka(char *); Stroka(const Stroka & str); ~Stroka();
void print(); };
#endif
О.А.Мирзеабасов (Кафедра ИС) |
ООП |
Осень 2014 |
6 / 14 |
Пример класса: определения
#include "stroka.h"
Stroka::Stroka(char *str){ int len=strlen(str); buf=new char[len+1]; strcpy(buf,str);
}
// копирующий конструктор Stroka::Stroka(const Stroka & str){
int len=strlen(str.buf); buf=new char[len+1]; strcpy(buf,str.buf);
}
О.А.Мирзеабасов (Кафедра ИС) |
ООП |
Осень 2014 |
7 / 14 |
Пример класса: определения
(продолжение)
// деструктор Stroka::~Stroka(){ if(buf!=NULL)delete buf;
}
void Stroka::print(){ puts(buf);
}
О.А.Мирзеабасов (Кафедра ИС) |
ООП |
Осень 2014 |
8 / 14 |
Перегрузка операций
Правила переопределения действия операторов:
сохраняется количество аргументов, приоритеты операций и правила ассоциации;
нельзя переопределять операции для стандартных типов;
нельзя использовать аргументы по умолчанию;
функция-операция не может быть статической.
О.А.Мирзеабасов (Кафедра ИС) |
ООП |
Осень 2014 |
9 / 14 |
Перегрузка операций
Функцию-оператор можно определить:
как метод класса;
как «дружественную» (friend) функцию;
как обычную функцию (если открыт доступ к необходимым полям и методам класса).
Нельзя перегружать следующие операции:
. .* ?: :: # ## sizeof
Формат переопределения:
тип operator символ(список параметров){тело функции}
О.А.Мирзеабасов (Кафедра ИС) |
ООП |
Осень 2014 |
10 / 14 |