Я занят выполнением задания для модуля Comp Sci на C ++, и меня немного смущает один из вопросов. Он просит дать 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);
}
Извините за ошибки в коде. Предполагается, что это перегрузка оператора перед приращением.
Возможно, вы неправильно поняли, что делает оператор приращения, или вы не опубликовали полный текст домашней работы.
Это модифицирует объект. Это может быть член и не член. Это может быть префикс и постфикс. Вот примеры того, как обычно реализовано увеличение префикса (++ 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.
Первый вопрос я интерпретирую как «реализовать оператор ++ в терминах функции-члена Adjust, которая была закодирована ранее».
Adjust, скорее всего, будет публичной функцией, поэтому нет необходимости в членской реализации оператора ++. Вы бы реализовали это как
Chequebook& operator++(Chequebook& i_lhs)
{
i_lhs.Adjust(1); // Or whatever Adjust actually takes as parameters.
return i_lhs;
}
Что ж, ваша попытка № 2 явно не удалась, потому что вы фактически не изменили объект, и это не семантика ++
либо до, либо после. Кроме того, вы, кажется, вычитая от баланса до приращение?