Страницы

Поиск по вопросам

понедельник, 9 декабря 2019 г.

Перегрузка присваивания с использованием больше одного элемента

#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: #include using 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



Оператор присваивания по-определению оперирует только с двумя операндами. Однако во второй можно запихнуть несколько элементов: #include struct foo { void operator =([[maybe_unused]] ::std::initializer_list items) {} }; int main() { foo f{}; f = {1, 2, 3}; return 0; }

Комментариев нет:

Отправить комментарий