c++ переопределение оператора + с использованием конструкции {x, y}

99
25 марта 2022, 19:20

Подскажите, можно ли реализовать следующую вещь:

Есть класс CFraction с конструктором CFraction(int, int), что даёт возможность делать такую инициализацию:

const CFraction value = {1, 3};

Можно ли у класса CFraction переопределить оператор + так, чтобы можно было писать вот такой код:

const CFraction value2 = value + {2, 5};

?

Т.е. без каких либо явных преобразований типов

Answer 1

Нет, без явной типизации такая перегрузка невозможна.

Единственно, что можно сделать:

CFraction operator+=(initializer_list<int> values) const
    {
        ...
    }

И вы можете получить желаемый результат в 2 шага:

  1. value += {2, 5}
  2. value2 = value

Перегрузка + возможна, но так, как выше описал Harry:

CFraction operator+ (initializer_list<int> values) {
        ...
    }

, но придется обращаться одним из двух методов:

  1. value2 = value.operator + ({1,2});
  2. value2 = value + initializer_list<int>{1,2};

Это обуславливается стандартом C++14 (параграфы 5.17 и 8.5.4 ), где пишется, что initializer_list в правой части выражения может применяться только к операторам assignment-operator: = *= /= %= += -= >>= <<= &= ˆ= |=

READ ALSO
Выдвигающееся меню PyQt

Выдвигающееся меню PyQt

Возможно ли реализовать выдвигающееся меню нa Pyqt5 ?!

98
Слово класс в аргументе функции

Слово класс в аргументе функции

Первый раз встретил данную конструкцию, когда class в параметрах функции и не могу понять для чего оно используется?

170
Оператор in &gt;&gt; в собственном классе строк

Оператор in >> в собственном классе строк

Реализовал класс строк, и сделал оператор >> , когда ввожу строчку с пробелами , например а ааыаыв аы, то выводит только первый символ, то бишь...

106
Qt C++ фильтр для бд

Qt C++ фильтр для бд

необходимо сделать фильтр для бдЕсть поля в них нужно вписать значение, которое потом должно перейти в запрос и вывести результат в tableView

83