3

我需要一个简单的运算符重载示例。不使用类或结构。在这里我尝试过但收到错误:

#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) ?如果是,请在我的来源中进行更正。

4

3 回答 3

8

无法覆盖原始类型(如 int)上的运算符。正如编译器所说,至少一个参数的类型必须是一个类。

于 2013-10-19T02:18:12.723 回答
4

运算符重载仅适用于类类型。原始类型运算符不是由函数定义的。有关详细信息,请参阅此问题

如果你有一个类类型,你可以重载操作符:

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;
}
于 2013-10-19T02:19:55.007 回答
2

如果两个操作数都是原始类型,则无法覆盖运算符。编译器说至少一个操作数应该是一个类的对象。

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

当您使用类成员函数进行运算符重载时,至少第一个操作数应该是对象。你不能这样做10 - d。为此,您需要使用friend函数实现运算符重载。

  friend int operator-(int a, Demo d){
    return a - n;
  }
于 2013-10-19T02:19:55.590 回答