Здравствуйте peter@work, Вы писали:
ПК>>Просто определяешь для своего класса операции `<', `>': <...>
peter>Они оформляются как friend или как члены класса?
Если нужен доступ к private части класса, то как friend:
class CStudent
{
friend bool operator <(const CStudent& l, const CStudent& r);
. . .
};
// два аргумента
bool operator <(const CStudent& l, const CStudent& r);
. . .
Или как члены класса:
class CStudent
{
public:
// только "второй" аргумент, "первый" -- this
bool operator <(const CStudent& r);
. . .
};
Если, например, объект класса CStudent может быть неявно сконструирован из строки, то, выражение "Вася" < student1 будет допустимым в первом случае и не будет допустимым во втором.
Если же операции <, > и т.п. можно реализовать, не требуя доступа к private части класса, то предпочтительнее реализовывать их как внешние функции (не члены и не friend):
class CStudent
{
public:
const std::string& name() const;
. . .
private:
std::string m_name;
. . .
};
// два аргумента
inline bool operator <(const CStudent& l, const CStudent& r)
{
return l.name() < r.name();
}
. . .
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен