#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; }
Комментариев нет:
Отправить комментарий