Я задание, которое требует от меня сделать следующее,C++ Перегрузки и переопределение оператора +
Персонаж суперкласс Digit и объекта является суперкласс символов.
Перегрузите оператор + для класса Character, чтобы он мог добавить два объекта типа Character.
Переопределите оператор + в классе Digit, чтобы он добавил числовое значение двух цифр и доставляет цифру, которую мы получаем, если мы наконец применим «по модулю 10». (например, «5» + «6» = «1» // 5 + 6 = 11% 10 = 1)
Я пытался кодировать их, и имеют различные решения для него. Я сделал комментарии в своем коде и надеюсь, что кто-то может ответить на мои вопросы в комментариях.
class Character : public Object {
protected:
char ch;
char getChar() {
return this->ch;
}
char setChar(char in) {
this->ch = in;
}
public:
//Why must I put Character&? What is the purpose of &?
Character operator+(const Character& in) {
Character temp;
temp.ch = this->ch + in.ch;
return temp;
}
};
class Digit : public Character {
public:
//Can i use the commented code instead?
/*
int a, b, c;
Digit operator+(Digit& in){
Digit temp;
temp.c = (in.a + in.b) % 10;
return temp;
}
*/
Digit operator+(const Digit& in) {
Digit tmp;
//Can some one explain what is this?
tmp.ch = (((this->ch - '0') + (in.ch - '0')) % 10) + '0';
return tmp;
}
};
У вас должна быть следующая 'const' после') 'каждой из этих сигнатур функций' operator + '. Ответы объяснили, почему второй параметр должен быть 'const &', но первый также должен быть const. Подразумеваемый первый параметр 'Digit *' (становясь 'this') сделан' Digit const * 'тем, что используется' const' – JSF
В задании указано «переопределение». Я не могу читать ум преподавателя, но обычно «переопределение» означает, что функция, которую вы переопределяете, должна быть объявлена «виртуальной», что добавляет некоторые сложности ко всему этому, помимо добавления этого ключевого слова. Так что лучше всего догадаться, инструктор использовал терминологию небрежно, но, возможно, назначение сложнее. – JSF