Мені потрібен хороший простий приклад перевантаження оператора. без використання класу або структури. тут я спробував отримати помилку:
#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;
}
я отримую таку помилку:
Compiling OVERLOAD.CPP:
Error OVERLOAD.CPP 3: "operator +(int,int)" must be a member function or have a parameter of class type
дайте мені знати, чи можливо перевантаження оператора (sum = a + b)? якщо так, будь ласка, внесіть виправлення в моє джерело.
Відповіді:
8 для відповіді № 1Неможливо переопределити оператори на примітивних типах, як ints. Як стверджує компілятор, принаймні один тип параметра "s повинен бути класом.
3 для відповіді № 2
Перевантаження оператора призначене лише для класів. Оператори примітивного типу не визначаються функцією. Подивитися це питання для подробиць.
Якщо у вас є тип класу, ви можете перевантажити оператора:
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 для відповіді № 3
Неможливо переопределити оператори, якщо обидва операнда мають примітивний тип. Компілятор, який говорить, що принаймні один операнд повинен бути об'єктом класу.
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;
}
Коли ви виконуєте перевантаження оператора за допомогою функції клас-члена, atleast перший операнд повинен бути об'єктом. Ви не можете зробити 10 - d
. Для цього потрібно виконати перевантаження оператора за допомогою friend
функція
friend int operator-(int a, Demo d){
return a - n;
}