У меня есть программа c++ для перегрузки меньше, чем оператор, и ожидается имя типа error-. Я хочу перегрузить <оператор для изучения 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();
}
Проблема в том, что когда вы определяете operator<
как функцию-член, он должен принимать только один аргумент, который является вторым операндом оператора. Первый операнд - это объект, обозначаемый *this
:
bool operator<(const abc& y)
{
return(this->a < y.a);
}
Обратите внимание, что main
должен возвращать int
.
Вы определили оператор как функцию-член. В этом случае левым операндом оператора является 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
Оператор <функция должен принимать только один аргумент. попробуй это:
bool operator <(abc& other)
{
return(a < other.a );
}
void main
.