Подскажите, можно ли реализовать следующую вещь:
Есть класс CFraction
с конструктором CFraction(int, int)
, что даёт возможность делать такую инициализацию:
const CFraction value = {1, 3};
Можно ли у класса CFraction
переопределить оператор +
так, чтобы можно было писать вот такой код:
const CFraction value2 = value + {2, 5};
?
Т.е. без каких либо явных преобразований типов
Нет, без явной типизации такая перегрузка невозможна.
Единственно, что можно сделать:
CFraction operator+=(initializer_list<int> values) const
{
...
}
И вы можете получить желаемый результат в 2 шага:
value += {2, 5}
value2 = value
Перегрузка +
возможна, но так, как выше описал Harry:
CFraction operator+ (initializer_list<int> values) {
...
}
, но придется обращаться одним из двух методов:
value2 = value.operator + ({1,2});
value2 = value + initializer_list<int>{1,2};
Это обуславливается стандартом C++14 (параграфы 5.17 и 8.5.4 ), где пишется, что initializer_list
в правой части выражения может применяться только к операторам assignment-operator: = *= /= %= += -= >>= <<= &= ˆ= |=
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Первый раз встретил данную конструкцию, когда class в параметрах функции и не могу понять для чего оно используется?
Реализовал класс строк, и сделал оператор >> , когда ввожу строчку с пробелами , например а ааыаыв аы, то выводит только первый символ, то бишь...
необходимо сделать фильтр для бдЕсть поля в них нужно вписать значение, которое потом должно перейти в запрос и вывести результат в tableView