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



         

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


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

SmallInt si(98);

int iobj = 65;

int res = si + iobj;

операторной функцией-кандидатом является operator+. Какие объявления operator+ принимаются во внимание?

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

  • множество операторов, видимых в точке вызова. Объявления функции operator+(), видимые в точке использования оператора, являются кандидатами. Например, operator+(), объявленный в глобальной области видимости, – кандидат в случае применения operator+() внутри main():
  • SmallInt operator+ ( const SmallInt &, const SmallInt & );

    int main() {

       SmallInt si(98);

       int iobj = 65;

       int res = si + iobj;  // ::operator+() - функция-кандидат

    }

    • множество операторов, объявленных в пространстве имен, в котором определен тип операнда. Если операнд имеет тип класса и этот тип объявлен в пользовательском пространстве имен, то операторные функции, объявленные в том же пространстве и имеющие то же имя, что и использованный оператор, считаются кандидатами:
    • namespace NS {

         class SmallInt { /* ... */ };

         SmallInt operator+ ( const SmallInt&, double );

      }

      int main() {

         // si имеет тип SmallInt:

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

         NS::SmallInt si(15);

         // NS::operator+() - функция-кандидат

         int res = si + 566;

         return 0;

      }

      Операнд si имеет тип класса SmallInt, объявленного в пространстве имен NS. Поэтому перегруженный operator+(const SmallInt, double), объявленный в том же пространстве, добавляется к множеству кандидатов;

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



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