2. Классы.Полиморфизм.. Перегрузка функций void f(); void f(int value); void f(doublevalue); void f(int value, int nextValue); … f(); f(12); f(12.0);

Презентация:



Advertisements
Похожие презентации
1 Переопределение операций Макаревич Л. Г.. 2 Зачем нужна перегрузка операций? class Complex { double re; double im; public: Complex(double r=0, double.
Advertisements

Перегрузка операторов x = a + b результат 1-й операнд2-й операнд оператор По количеству операндов операторы делятся на: унарные (один операнд) бинарные.
Статические поля класса Статические поля хранят данные, общие для всех элементов класса. Статическое поле существует в единственном экземпляре для всех.
Лекция 13. Введение в ООП. Часть 4 Красс Александр СПбГУ ИТМО, 2008.
1. Классы ООП 1.Наследование 2.Инкапсуляция 3.Полиморфизм.
Прикладное программирование кафедра прикладной и компьютерной оптики Полиморфизм.
ООП Классы – 2.
Инструкции C++ Условная инструкция Формат: if (условие) оператор; else оператор; Пример: if (i!=0) { if (j) j++; if(k) k++; else if(p) k--; } else i--;
Лекция 11. Введение в ООП. Часть 4 Красс Александр СПбГУ ИТМО, 2008.
Лекция 10. Введение в ООП. Часть 3 Красс Александр СПбГУ ИТМО, 2008.
Лекция 12 Перегрузка операторов. Часть 2. Подбельский гл. 9.7, Страуструп гл. 11, Мейрс п. 11,15-17,19. Перегрузка копирующего конструктора T(const T&)
С++, ООП Семинар 2 Рябова Анна Сергеевна
Лекция 22. Шаблоны (часть 2) Красс Александр СПбГУ ИТМО, 2008.
Преобразования типов В языке C/C++ имеется несколько операций преобразования типов. Они используются в случае, если переменная одного типа должна рассматриваться.
Лекция 13 Производные классы и открытое наследование. Подбельский гл , Страуструп гл , Мейрс пп Открытое наследование производного.
Язык C++ Лекция 2. Недостатки enumов Засорение namespaceа, в котором находится enum Соответственно, члены enumа должны иметь уникальный префикс.
Наследование Полиморфизм ВЫЗОВ КОНСТРУКТОРОВ И ДЕСТРУКТОРОВ ПРИ НАСЛЕДОВАНИИ.
ООП Классы Данные отдельно, методы отдельно struct Node { Node* next; void* data; }; struct List { Node* first; int size; }; void* allocate() { … } void.
Лекция 4. Введение в С++ Наследование, множественное наследование. Конструкторы, деструкторы. Виртуальные функции.
Лекция 21. Шаблоны (часть 1) Красс Александр СПбГУ ИТМО, 2008.
Транксрипт:

2. Классы.Полиморфизм.

Перегрузка функций void f(); void f(int value); void f(doublevalue); void f(int value, int nextValue); … f(); f(12); f(12.0); f(12, 2);

Перегрузка операторов A a1, a2, a3; … a1 = a2 + a3; if (a1 < a2) …. If (a1 || a2) Операторы, которые нельзя перегрузить ::..* ?

Перегрузка операторов. operator+ Candle a1, a2, a3; a1 = a2 + a3; class Candle { public: Candle operator+(Candle a); private: double mVolume; }; a1 = a2 + a3 + a3; Candle Candle::operator+(Candle c) { Candle retCandle; retCAndle.mVolume = mVolume + c.mVolume; return retCandle; }

Перегрузка операторов. operator+ Candle a1, a2, a3; a1 = a2 + a3; class Candle { public: friend Candle operator +(Candle l, Candle r); private: double mVolume; }; Candle operator+(Candle l, Candle r) { Candle retCandle; retCandle.mVolume = l.mVolume + r.mVolume; return retCandle; }

Перегрузка операторов. operator+ Candle a1, a2, a3; a1 = a2 + 10; class Candle { public: Candle(double candle); Candle operator+(Candle a); private: double mVolume; }; class Candle { public: explicit Candle(double candle); Candle operator+(double value); private: double mVolume; }; Candle operator+(double value) { Candle retCandle; retCandle.mVolume = l.mVolume + r.mVolume; return retCandle; }

Перегрузка операторов. operator+ Candle a1, a2, a3; a1 = 10 + a2; class Candle { public: Candle(double candle); Candle operator+(Candle a); private: double mVolume; }; class Candle { public: explicit Candle(double candle); friend Candle operator +(double l, Candle r); private: double mVolume; }; Candle operator+(double l, Candle r) { Candle retCandle; retCandle.mVolume = l + r.mVolume; return retCandle; }

Перегрузка операторов. operator+= Candle a1, a2, a3; a1 += a2; class Candle { public: Candle(double candle); Candle operator+=(Candle a); private: double mVolume; };

Перегрузка операторов. Ссылки Candle a1, a2, a3; a1 = a2 + a3; class Candle { public: Candle operator+(Candle a); private: double mVolume; }; class Candle { public: Candle operator+(const Candle & a); private: double mVolume; };

Перегрузка операторов. Явный вызов class Candle { public: Candle operator+(Candle a); private: double mVolume; }; …. Candle a1, a2, a3; a1 = a2.operator+(a3);

Перегрузка операторов. Инкремент class Candle { public: Candle & operator++(); Candle operator++(int); private: double mVolume; }; …. Candle a1; ++a1; a1++; a2 = a1++; Candle & operator++() { mVolume += 1; return this; } Candle operator++(int) { Candle ret(this); mVolume += 1; return ret; }

Перегрузка операторов. operator= class Candle { public: Candle & operator=(const Candle & obj); private: double mVolume; }; …. Candle a1, a2; a2 = a1; a2 = a1 = a3; Candle & Candle :operator=(const Candle & obj) { if (this == &obj) return *this; mVolume = obj; return *this; }

Перегрузка операторов. Operator= class Candle { public: Candle & operator=(const Candle & obj); private: double mVolume; }; class SpecialCandle : public Candle { public: SpecialCandle & operator=(const SpecialCandle & obj); Private: }; Candle & Candle :operator=(const SpecialCandle & obj) { Candle::operator=(obj); … return *this; }

Перегрузка операторов. Операторы преобразования Candle c(2.0); c = 3.0; double volume = c; class Candle { public: Candle(double volume); Candle & operator=(double volume); operator double() const; private: double mVolume; };

Перегрузка операторов. Индексация SmartString str; str[2] = a; char ch = str[1]; class SmartString { public: char & operator[](unsigned int index); private: char *mBuffer; … }; char & SmartString::operator[](unsigned int index) { … return mBuffer[index]; }

Перегрузка операторов. const. Индексация. const SmartString str; str[2] = a; /// необходимо запроетить char ch = str[1]; class SmartString { public: const char & operator[](unsigned int index) const; char & operator[](unsigned int index); private: char *mBuffer; … };