Язык программирования C++. Вводный курс




.Операторные функции-кандидаты - часть 3


·                  множество встроенных операторов. Учитывая типы, которые можно использовать со встроенным operator+(), кандидатами являются также:

int operator+( int, int );

double operator+( double, double );

T* operator+( T*, I );

T* operator+( I, T* );

Первое объявление относится к встроенному оператору для сложения двух значений целых типов, второе – к оператору для сложения значений типов с плавающей точкой. Третье и четвертое соответствуют встроенному оператору сложения указательных типов, который используется для прибавления целого числа к указателю. Два последних объявления представлены в символическом виде и описывают целое семейство встроенных операторов, которые могут быть выбраны компилятором на роль кандидатов при обработке операций сложения.

Любое из первых четырех множеств может оказаться пустым. Например, если среди членов класса SmallInt нет функции с именем operator+(), то четвертое множество будет пусто.

Все множество операторных функций-кандидатов является объединением пяти подмножеств, описанных выше:

namespace NS {

   class myFloat {

      myFloat( double );

   };

   class SmallInt {

      friend SmallInt operator+( const SmallInt &, int ) { /* ... */ }

   public:

      SmallInt( int );

      operator int();

      SmallInt operator+ ( const myFloat & );

      // ...

   };

   SmallInt operator+ ( const SmallInt &, double );

}

int main() {

   // тип si - class SmallInt:

   // Этот класс объявлен в пространстве имен NS

   NS::SmallInt si(15);

   int res = si + 5.66;  // какой operator+()?

   return 0;

}

В эти пять множеств входят семь операторных функций-кандидатов на роль operator+() в main():

·                  первое множество пусто. В глобальной области видимости, а именно в ней употреблен operator+() в функции main(), нет объявлений перегруженного оператора operator+();




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