Язык программирования C++



             

Как определять операции


Если для класса определяют операции, то обычно определяют достаточно полный их набор, так, чтобы объекты этого класса могли участвовать в полноценных выражениях.

Прежде всего, определим операцию присваивания. Операция присваивания в качестве аргумента использует объект того же класса и копирует значение этого объекта. Однако, в отличие от копирующего конструктора, у объекта уже имеется какое-то свое значение, и его нужно аккуратно уничтожить.

class String { public: // объявление операции присваивания String& operator=(const String& s); }; // Реализация присваивания String& String::operator=(const String& s) { if (this == &s) return *this; if (str != 0) { delete [] str; } length = s.length; str = new char[length + 1]; if (str == 0) { // обработка ошибок } strcpy(str, s.str); return *this; }

Обратим внимание на несколько важных особенностей операции присваивания. Во-первых, в качестве результата операции присваивания объект возвращает ссылку на самого себя. Это дает возможность использовать строки в выражениях типа:

s1 = s2 = s3;

Во-вторых, в начале операции проверяется, не равен ли аргумент самому объекту. Таким образом, присваивание s1 = s1 выполняется правильно и быстро.

В-третьих, перед тем как скопировать новое значение, операция присваивания освобождает память, занимаемую старым значением.

Аналогично операции присваивания можно определить операцию   +=.

Набор операций, позволяющий задействовать класс String в различных выражениях, представлен ниже:

class String { public: String(); String(const String& s); String(const char*); String& operator=(const String& s); String& operator+=(const String& s); bool operator==(const String& s) const; bool operator!=(const String& s) const; bool operator<(const String& s) const; bool operator>(const String& s) const; bool operator<=(const String& s) const; bool operator>=(const String& s) const; String operator+(const String& s) const; };




Содержание  Назад  Вперед