Проблема в понимании перегрузки операторов - PullRequest
0 голосов
/ 08 января 2019

Я читаю TCPPPL Бьярна Страуструпа, и я наткнулся на следующий фрагмент кода (показанный ниже). У меня два вопроса:

  1. Где тело оператора функции +? Я имею в виду, что в классе X есть только объявление функции.

  2. Что означает строка X (int)? Это конструктор с int в качестве параметра или что-то еще?


 class X {
     public:
     void operator+(int);
     X(int);   
 };

 void operator+(X,X);
 void operator+(X,double);

 void f(X a)
 {
     a+1;    // a.operator+(1)
     1+a;    // ::operator+(X(1),a)
     a+1.0;  // ::operator+(a,1.0)
 }

Ответы [ 2 ]

0 голосов
/ 08 января 2019

1) Где тело оператора функции +? Я имею в виду, что в классе X есть только объявление функции.

Определение (тело) operator+ может быть где угодно. Код, очевидно, не полная программа (нет main). Поэтому определения могут быть ниже показанного кода или даже в другом модуле компиляции.

2) Что означает строка X (int)? Это конструктор с int в качестве параметра или что-то еще?

Это объявление конвертирующего конструктора класса X, который принимает целое число в качестве аргумента.

0 голосов
/ 08 января 2019

Что означает строка X (int)?

X(int) - это объявление конструктора, принимающего единственный целочисленный параметр. Определение отсутствует.

Где находится тело оператора функции +

Где бы вы ни определили это.

Этот код не будет работать без правильных определений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...