#cpp #перегрузка_операторов
У меня есть класс Time, с собственными переменными hour, minute, second. Я хочу, чтобы можно было сделать так: Time ex2(5, 5, 5); ex2 = (10, 10, 10); Но при попытке перегрузить оператор тремя переменными подобным образом: Time& operator = (const int, const int, const int); И реализовать его примерно подобным образом: Time& Time::operator=(const int hour, const int minute, const int second) { itsHour = hour; itsMinute = minute; itsSecond = second; } Мне выдает ошибку "слишком много параметров для данного оператора". Кто-нибудь знает как это реализовать или это в принципе невозможно?
Ответы
Ответ 1
Оператор всегда, при любой перегрузке имеет один и тот же синтаксис. Грубо говоря, вы не можете сделать ! бинарным оператором или = - оператором с тремя аргументами. Но вы можете использовать присвоение самого Time: #includeusing namespace std; struct Time { int h,m,s; Time(int h, int m, int s = 0):h(h),m(m),s(s){}; Time(const Time&) = default; Time& operator =(const Time&) = default; }; int main(int argc, const char * argv[]) { Time e(2,3,4); e = {5,6,7}; cout << e.h <<":"< Ответ 2
Оператор присваивания по-определению оперирует только с двумя операндами. Однако во второй можно запихнуть несколько элементов: #includestruct foo { void operator =([[maybe_unused]] ::std::initializer_list items) {} }; int main() { foo f{}; f = {1, 2, 3}; return 0; }
Комментариев нет:
Отправить комментарий