Potrzebuję dobrego prostego przykładu przeciążenia operatora. bez użycia klasy lub struktury. tutaj próbowałem, ale otrzymuję błąd:
#include <iostream.h>
int operator+(int a, int b)
{
return a-b;
}
void main()
{
int a,b,sum;
cin>>a>>b;
sum=a+b; //Actually it will subtruct because of + operator overloading.
cout<<"Sum of "<<a<<" & "<<b<<"(using overloading)"<<sum;
}
pojawia się następujący błąd:
Compiling OVERLOAD.CPP:
Error OVERLOAD.CPP 3: "operator +(int,int)" must be a member function or have a parameter of class type
daj mi znać, czy możliwe jest przeciążenie operatora (suma = a + b)? jeśli tak, proszę zrób korektę w moim źródle.
Odpowiedzi:
8 dla odpowiedzi № 1Nie można przesłonić operatorów na typach pierwotnych, takich jak int. Jak stwierdza kompilator, przynajmniej jeden typ parametru musi być klasą.
3 dla odpowiedzi № 2
Przeciążenie operatora dotyczy tylko typów klas. Operatory typu pierwotnego nie są zdefiniowane przez funkcję. Widzieć to pytanie dla szczegółów.
Jeśli masz typ klasy, możesz przeciążyć operatora:
class A
{
int _num;
public:
A(int n) : _num(n) {}
int operator+(const int b) const
{
return _num + b;
}
}
int main()
{
A a(2);
int result = a + 4; // result = 6
return 0;
}
2 dla odpowiedzi nr 3
Nie jest możliwe przesłonięcie operatorów, jeśli oba operandy są typu pierwotnego. Kompilator mówi, że co najmniej jeden operand powinien być obiektem klasy.
class Demo{
int n;
Demo(int n){
this.n = n;
}
int operator+(int a){
return n + a;
}
}
int main(){
Demo d(10);
int result = d + 10; //See one operand is Object
return 0;
}
Kiedy robisz przeciążanie operatora przy użyciu funkcji składowej klasy, co najmniej pierwszy operand powinien być obiektem. Nie możesz zrobić 10 - d
. Aby to zrobić, należy zaimplementować przeciążanie operatorów friend
funkcjonować.
friend int operator-(int a, Demo d){
return a - n;
}