Слайд 1Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
ОСНОВЫ ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ С++
Введение
в ООП
Слайд 2Структуры в С++
Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
Структура — это
, некое объединение различных переменных (даже с разными типами данных), которому можно присвоить имя.
Например можно объединить данные об объекте Дом: город (в котором дом находится), улица, количество квартир, интернет(проведен или нет) и т.д. в одной структуре.
Слайд 3Структуры в С++
Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
#include
using namespace
std;
struct building //Создаем структуру!
{
char *owner; //здесь будет храниться имя владельца
char *city; //название города
int amountRooms; //количество комнат
float price; //цена
};
int main()
{
setlocale(LC_ALL, "rus");
building apartment1; //это объект структуры с типом данных, именем структуры, building
Слайд 4Структуры в С++
Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
apartment1.owner
= "Денис"; //заполняем данные о владельце и т.д.
apartment1.city = "Симферополь";
apartment1.amountRooms = 5;
apartment1.price = 150000;
cout << "Владелец квартиры: " << apartment1.owner << endl;
cout << "Квартира находится в городе: " << apartment1.city << endl;
cout << "Количество комнат: " << apartment1.amountRooms << endl;
cout << "Стоимость: " << apartment1.price << " $" << endl;
return 0;
}
Слайд 5Классы
Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
Класс — это фундамент, на
котором построена в С++ поддержка объектно-ориентированного программирования, а также ядро многих более сложных программных средств.
Класс — это базовая единица инкапсуляции, которая обеспечивает механизм создания объектов
Слайд 6Классы
Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
В информатике инкапсуляцией (лат. en
capsula) называется упаковка данных и/или функций в единый компонент.
Инкапсуляция, наследование и полиморфизм (в форме ad hoc полиморфизма или полиморфизма подтипов) являются тремя столпами объектно-ориентированного программирования, реализуя в нём принцип абстракции данных
Слайд 7Классы и объекты
Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
Классы в С++ -
это логическая абстракция описывающая методы, свойства, ещё не существующих объектов.
Класс включает как данные, так и код, предназначенный для выполнения действий над этими данными.
Слайд 8Классы и объекты
Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
В классе данные
объявляются в виде переменных, а код оформляется в виде функций
Функции и переменные, составляющие класс, называются его членами
Переменные – это свойства класса
Функции – это методы класса
Слайд 9Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
В ООП существует три основных
принципа построения классов:
Инкапсуляция - это свойство, позволяющее объединить в классе и данные, и методы, работающие с ними и скрыть детали реализации от пользователя.
Наследование - это свойство, позволяющее создать новый класс-потомок на основе уже существующего, при этом все характеристики класса родителя присваиваются классу-потомку.
Слайд 10Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
В ООП существует три основных
принципа построения классов:
Полиморфизм - свойство классов, позволяющее использовать объекты классов с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
Слайд 11Классы и объекты
Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
Объекты - конкретное представление
абстракции, имеющее свои свойства и методы.
Созданные объекты на основе одного класса называются экземплярами этого класса.
Слайд 12Классы и объекты
Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
Объявление класса начинается
с ключевого слова class
class /*имя класса*/
{
private:
/* список свойств и методов */
public:
/* список свойств и методов */
protected:
/* список свойств и методов */
};
Слайд 13Классы и объекты
Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
Спецификатора доступа private. Все
методы и свойства класса, объявленные после спецификатор будут доступны только внутри класса.
Спецификатор доступа public. Все методы и свойства класса, объявленные после спецификатора доступа будут доступны другим функциям и объектам в программе.
Спецификатор доступа protected. Все методы и свойства класса, объявленные после спецификатора будут доступы внутри класса и из производных экземпляров класса.
Слайд 14Классы и объекты
Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
Следующий класс определяет
тип queue, который предназначен для реализации очереди. (Под очередью понимается список с дисциплиной обслуживания в порядке поступления, т.е. "первым прибыл — первым обслужен".)
Слайд 15Классы и объекты
Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
class queue {
int q[100];
int sloc, rloc;
public:
void init();
void qput(int i);
int qget();
};
Слайд 16Классы и объекты
Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
Определив класс, можно
создать объект этого "классового" типа, используя имя класса.
Например, при выполнении следующей инструкции создается два объекта Q1 и Q2 типа queue,
queue Q1, Q2;
Слайд 17Классы и объекты
Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
После создания объект
класса будет иметь собственную копию данных, которые составляют класс.
Это означает, что каждый из объектов Q1 и Q2 будет иметь собственные отдельные копии переменных q, sloc и rloc.
В объявлении класса queue содержатся прототипы методов. Поскольку методы обеспечены своими прототипами в определении класса, их не нужно помещать больше ни в какое другое место программы.
Слайд 18Классы и объекты
Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
Реализация функции класса
void
queue::qput(int i)
{
if (sloc == 100) {
cout << "Очередь заполнена.\n";
return;
}
sloc++;
q[sloc] = i;
}
Слайд 19Классы и объекты
Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
Реализация функции класса
void
queue::init()
{
rloc = sloc = 0;
}
Слайд 20Классы и объекты
Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
Реализация функции класса
int
queue::qget()
{
if (rloc == sloc) {
cout << "Очередь пуста.\n";
return 0;
}
rloc++;
return q[rloc];
}
Слайд 21Классы и объекты
Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
int main()
{
queue a, b; // Создание двух объектов класса queue.
a.init();
b.init();
a.qput(10);
b.qput(19);
a.qput(20);
b.qput(1);
cout << "Содержимое очереди a: ";
cout << a.qget() << " ";
cout << a.qget() << "\n";
cout << "Содержимое очереди b: ";
cout << b.qget() << " ";
cout << b.qget() << " ";
cout << b.qget() << "\n";
return 0;
}
Слайд 22Классы и объекты
Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
Не забывайте, что
закрытые члены класса доступны только функциям, которые являются членами этого класса. Например, такую инструкцию
a.rloc = 0;
нельзя включить в функцию main() нашей программы.
Как надо изменить класс, чтобы такое обращение стало возможным?
Слайд 23Классы и объекты
Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
class queue {
int q[100];
int sloc, rloc;
public:
void init();
void qput(int i);
int qget();
};
Слайд 24Классы и объекты
Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
class queue {
int q[100];
int sloc;
public:
int rloc;
void init();
void qput(int i);
int qget();
};
Слайд 25Конструкторы и деструкторы
Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
Конструктор — это
функция, которая вызывается при создании объекта.
Как правило, некоторую часть объекта, прежде чем его можно будет использовать, необходимо инициализировать.
Прежде чем класс queue можно будет использовать, переменным rloc и sloc нужно присвоить нулевые значения.
Слайд 26Конструкторы и деструкторы
Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
Конструктор — это
специальная функция, которая является членом класса и имя которой совпадает с именем класса.
class queue {
int q[100];
int sloc, rloc;
public:
queue(); // конструктор
void qput(int i);
int qget();
};
Обратите внимание на то, что в объявлении конструктора queue() отсутствует тип возвращаемого значения.
Слайд 27Конструкторы и деструкторы
Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
queue::queue()
{
sloc =
rloc = 0;
cout << "Очередь инициализирована.\n";
}
Конструктор объекта вызывается при создании объекта. Это означает, что он вызывается при выполнении инструкции объявления объекта.
Слайд 28Конструкторы и деструкторы
Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
Деструктор — это
функция, которая вызывается при разрушении объекта.
Имя деструктора совпадает с именем конструктора, но предваряется символом "~"
Подобно конструкторам деструкторы не возвращают значений, а следовательно, в их объявлениях отсутствует тип возвращаемого значения.
Слайд 29Конструкторы и деструкторы
Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
class queue {
int q[100];
int sloc, rloc;
public:
queue(); // конструктор
~queue(); // деструктор
void qput(int i);
int qget();
};
Слайд 30Конструкторы и деструкторы
Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
queue::~queue()
{
cout
<< "Очередь разрушена.\n";
}
Слайд 31Конструкторы и деструкторы
Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
class queue {
int q[100];
int sloc, rloc;
public:
queue();
queue(int id);
~queue();
void qput(int i);
int qget();
};
Есть ли ошибки в коде?
Слайд 32Конструкторы и деструкторы
Никитин Михаил Евгеньевич, 2013
ГБПОУ ПК имени П.А.Овчинникова
int main()
{
queue a, b(2); // Создание двух объектов класса queue.
a.qput(10);
b.qput(19);
a.qput(20);
b.qput(1);
cout << "Содержимое очереди a: ";
cout << a.qget() << " ";
cout << a.qget() << "\n";
cout << "Содержимое очереди b: ";
cout << b.qget() << " ";
cout << b.qget() << " ";
cout << b.qget() << "\n";
return 0;
}