Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

cpp1

.pdf
Скачиваний:
13
Добавлен:
29.03.2016
Размер:
195.18 Кб
Скачать

Объектно-ориентированное программирование

Классы в C++

О.А.Мирзеабасов

Кафедра ИС

Осень 2015

О.А.Мирзеабасов (Кафедра ИС)

ООП

Осень 2015

1 / 14

Содержание

1 Структура класса C++

2 Перегрузка операций

3 Наследование

О.А.Мирзеабасов (Кафедра ИС)

ООП

Осень 2015

2 / 14

Структура класса C++

Элементами класса в C++ могут быть:

поля;

методы;

специальные методы — конструкторы и деструкторы.

class имя_класса { private:

//скрытые поля и методы public:

//открытые поля и методы }; //!!!

О.А.Мирзеабасов (Кафедра ИС)

ООП

Осень 2015

3 / 14

Конструкторы класса

Конструкторы служат для инициализации создаваемых объектов. Особенности конструкторов:

имя совпадает с именем класса;

в классе могут быть определены несколько конструкторов, различающихся списком аргументов;

конструкторы не имеют возвращаемого значения;

конструкторы не наследуются;

если в классе явно не определен ни один конструктор, компилятор автоматически создаст конструктор по умолчанию (без параметров).

О.А.Мирзеабасов (Кафедра ИС)

ООП

Осень 2015

4 / 14

Деструкторы

Деструктор — специальный метод класса, использующийся для освобождения ресурсов при уничтожении объекта. Имя деструктора состоит из знака тильды (~) и имени класса. Деструктор класса не имеет возвращаемого значения и параметров.

Деструктор вызывается автоматически при вызове оператора delete или при выходе объекта из области видимости.

О.А.Мирзеабасов (Кафедра ИС)

ООП

Осень 2015

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

О.А.Мирзеабасов (Кафедра ИС)

ООП

Осень 2015

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);

}

О.А.Мирзеабасов (Кафедра ИС)

ООП

Осень 2015

7 / 14

Пример класса: определения

(продолжение)

// деструктор Stroka::~Stroka(){ if(buf!=NULL)delete buf;

}

void Stroka::print(){ puts(buf);

}

О.А.Мирзеабасов (Кафедра ИС)

ООП

Осень 2015

8 / 14

Перегрузка операций

Правила переопределения действия операторов:

сохраняется количество аргументов, приоритеты операций и правила ассоциации;

нельзя переопределять операции для стандартных типов;

нельзя использовать аргументы по умолчанию;

функция-операция не может быть статической.

О.А.Мирзеабасов (Кафедра ИС)

ООП

Осень 2015

9 / 14

Перегрузка операций

Функцию-оператор можно определить:

как метод класса;

как «дружественную» (friend) функцию;

как обычную функцию (если открыт доступ к необходимым полям и методам класса).

Нельзя перегружать следующие операции:

. .* ?: :: # ## sizeof

Формат переопределения:

тип operator символ(список параметров){тело функции}

О.А.Мирзеабасов (Кафедра ИС)

ООП

Осень 2015

10 / 14

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]