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; … };