我有一个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();
}
答案 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 );
}