/ / operator przeciążający przykład w C ++ - c ++

operator przeciążający przykład w C ++ - c ++

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 № 1

Nie 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;
}