Для упражнения я нуждаюсь в том, чтобы реализовать операции между int и класс, который я определил (Рационально)
int main(){
Racional *r1 = new Racional(1,2);
Racional *r2 = new Racional(2,3);
Racional *r;
// y debo poder hacer las siguientes operaciones:
r = *r1 + *r2;
r = *r1 + 52;
r = *10 + *r2;
}
Осуществите класс следующего способа и он дает мне ошибку 'многообразный definition of operator+(Racional&, Racional&)
'
class Racional{
private:
int numerador;
int denominador;
public:
Racional* suma(Racional *);
// y otras funciones...
};
Racional* operator +(Racional &r1, Racional &r2){
return r1.suma(&r2);
}
Racional* operator +(Racional r1, int i){
Racional *r2 = new Racional(i);
Racional *ret = r1.suma(r2);
delete r2;
return ret;
}
Racional* operator +(int i,Racional r1){
Racional *r2 = new Racional(i);
Racional *ret = r1.suma(r2);
delete r2;
return ret;
}
Как он был бы должен делать, чтобы мочь делать операции? Большое спасибо
Ты идешь из-за хорошей дорожки, так как ты понимаешь два типа перегрузок:
Перегружает как método класса , когда оператора один método самого класса:
struct Ejemplo {
Ejemplo operator+(int);
};
В этом случае, классе всегда estarÃ: левая сторона оператора и tipo_t
в правую сторону:
Ejemplo e;
Ejemplo a = e + 1; // Correcto
Ejemplo b = 1 + e; // ERROR!!!
Перегружает, как funci¦n я освободил , когда оператор - свободный funci¦n:
struct Ejemplo {
Ejemplo operator+(int);
};
Ejemplo operator+(int, Ejemplo);
В этом случае ты можешь выбирать типы в левую сторону и правую сторону оператора:
Ejemplo e;
Ejemplo a = e + 1; // Correcto, llama a Ejemplo Ejemplo::operator+(int);
Ejemplo b = 1 + e; // Correcto, llama a Ejemplo operator+(int, Ejemplo);
того, что ты не понимаешь, состоит в том, что НЕ ты должен использовать указатели ни для чего из того, что ты нуждаешься в том, чтобы сделать: Предложенные
Способствуй тому, чтобы все операторы были свободными функциями
class Racional {
friend Racional operator+(const Racional &, const Racional &);
friend Racional operator+(int, const Racional &);
friend Racional operator+(const Racional &, int);
};
int main(){
Racional r1 = Racional(1,2);
Racional r2 = Racional(2,3);
Racional r;
// y debo poder hacer las siguientes operaciones:
r = r1 + r2; // Primer caso, Racional + Racional
r = r1 + 52; // Segundo caso, Racional + int
r = 10 + r2; // Tercer caso, int + Racional
}
Racional operator+(const Racional &, const Racional &) {
// Código primer caso
}
Racional operator+(int, const Racional &) {
// Código segundo caso
}
Racional operator+(const Racional &, int) {
// Código tercer caso
}
Ввиду того, что Racional
- класс, для того, чтобы операторы имели доступ к данным о классе, deberÃ: n быть подругами функциями класса.