在c ++中重载少于运算符会出错

时间:2014-02-02 12:03:09

标签: c++ overloading operator-keyword

我有一个c ++程序来重载少于运算符和一个错误 - 预期的类型名称。 我想超载<刚刚学习12班的操作员。

  bool operator <(abc x,abc y)
   {
     return(x.a<y.a);
   }

完整的计划:

#include<iostream.h>
#include<conio.h>
class abc
 {
  int a;
  public:
  abc()
  {
   a=0;
   }
  abc(int x)
  {
   a=x;
  }
  void show()
  {
   cout<<"\n"<<a;
  }

  bool operator <(abc x,abc y)
   {
     return(x.a<y.a);
   }


 };
void main()
 {
  clrscr();
  abc p(4),q(2);
  p.show();
  q.show();
  if(p<q)
   cout<<"\nP is Less than Q";
  getch();
 }

3 个答案:

答案 0 :(得分:2)

问题在于,当您将operator<定义为成员函数时,它应该只接受一个参数,该参数是运算符的第二个操作数。第一个操作数是*this表示的对象:

bool operator<(const abc& y)
{
  return(this->a < y.a);
}

请注意,main应返回int

答案 1 :(得分:1)

您将运算符定义为成员函数。在这种情况下,运算符的左操作数是this

正确的定义将显示为

bool operator <( const abc &rhs ) const
{
     return ( a < rhs.a );
}

虽然将它定义为非成员函数会更好。例如

class abc
{
//...
   friend bool operator <( const abc &lhs, const abc &rhs );
//...
};

bool operator <<( const abc &lhs, const abc &rhs )
{
   return ( lhs.a < rhs.a );
} 

考虑到函数main应具有返回类型int

答案 2 :(得分:0)

运营商&lt;函数应该只带一个参数。试试这个:

  bool operator <(abc& other)
   {
     return(a < other.a );
   }