Re[10]: std::list.sort()
От: Павел Кузнецов  
Дата: 13.10.02 17:05
Оценка: 3 (1)
Здравствуйте 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();
}

. . .
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.