С++ для начинающих



         

Перегрузка операторов


В предыдущих главах мы уже показывали, что перегрузка операторов позволяет программисту вводить собственные версии предопределенных операторов (см. главу 4) для операндов типа классов. Например, в классе String из раздела 3.15 задано много перегруженных операторов. Ниже приведено его определение:

#include <iostream>

class String;

istream& operator>>( istream &, const String & );

ostream& operator<<( ostream &, const String & );

class String {

public:

     // набор перегруженных конструкторов

     // для автоматической инициализации

           String( const char* = 0 );

           String( const String & );

     // деструктор: автоматическое уничтожение

           ~String();

     // набор перегруженных операторов присваивания

           String& operator=( const String & );

           String& operator=( const char * );

     // перегруженный оператор взятия индекса

           char& operator[]( int );

     // набор перегруженных операторов равенства

     // str1 == str2;

           bool operator==( const char * );

           bool operator==( const String & );

     // функции доступа к членам

           int size() { return _size; };

           char * c_str() { return _string; }

private:

           int   _size;

           char *_string;

};

В классе String есть три набора перегруженных операторов. Первый – это набор операторов присваивания:

// набор перегруженных операторов присваивания

String& operator=( const String & );

String& operator=( const char * );

Сначала идет копирующий оператор присваивания. (Подробно они обсуждались в разделе 14.7.) Следующий оператор поддерживает присваивание C-строки символов объекту типа String:

String name;

name = "Sherlock";   // использование оператора operator=( char * )

 (Операторы присваивания, отличные от копирующих, мы рассмотрим в разделе 15.3.)

Во втором наборе есть всего один оператор – взятия индекса:




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