C ++ Инкремент перегрузки оператора

Я занят выполнением задания для модуля Comp Sci на C ++, и меня немного смущает один из вопросов. Он просит дать 3 реализации перегруженного оператора приращения:

  1. Использование функции-члена Adjust (), которая была закодирована в предыдущем вопросе.
  2. Реализация перегруженного оператора в качестве функции друга.
  3. Реализация перегруженного оператора в качестве функции-члена.

Теперь я понимаю концепцию перегрузки операторов, я думаю, это нормально. Но я на самом деле не слишком уверен в первом, используя существующую функцию-член Adjust (). Потому что, конечно, если я перегружаюсь и просто вызываю другую функцию, это будет либо функция-член, либо функция-член, вызывающая другую функцию-член, если вы понимаете, что я имею в виду. В любом случае, любая помощь будет принята с благодарностью. Ниже мой код для № 2 и 3 просто для справки.

//Friend Function
friend Chequebook operator ++(const Chequebook &c); //Declaration in class.
Chequebook operator++(const Chequebook &c) //Function
{
return Chequebook(c.Balance+100);
}

//Member Function
Chequebook operator++(); //Declaration in class.
Chequebook Chequebook::operator++() //Function.
{
return Chequebook(Balance+100);
}

Извините за ошибки в коде. Предполагается, что это перегрузка оператора перед приращением.

2

Решение

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

Это модифицирует объект. Это может быть член и не член. Это может быть префикс и постфикс. Вот примеры того, как обычно реализовано увеличение префикса (++ x):

class X
{
int i;
public:

// member prefix ++x
X& operator++() { ++i; return *this;}
};

class Y
{
int i;
public:
void adjust() {++i;}
};

// non-member prefix ++y
Y& operator++(Y& y) { y.adjust(); return y;}

class Z
{
int i;
public:
// friend prefix ++z
friend Z& operator++(Z& z) { z.i++; return z;}
};

Постфиксный инкремент (x ++) отличается, должен иметь дополнительный параметр int.

2

Другие решения

Первый вопрос я интерпретирую как «реализовать оператор ++ в терминах функции-члена Adjust, которая была закодирована ранее».

Adjust, скорее всего, будет публичной функцией, поэтому нет необходимости в членской реализации оператора ++. Вы бы реализовали это как

Chequebook& operator++(Chequebook& i_lhs)
{
i_lhs.Adjust(1); // Or whatever Adjust actually takes as parameters.
return i_lhs;
}
2

Что ж, ваша попытка № 2 явно не удалась, потому что вы фактически не изменили объект, и это не семантика ++либо до, либо после. Кроме того, вы, кажется, вычитая от баланса до приращение?

0
По вопросам рекламы [email protected]