Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Перегрузка операторов
Форум программистов > Системное программирование > C, С++ и С Builder > Общие вопросы по С и С++
chagin_yav
Здравствуйте,

Столкнулся с такой проблемой: необходимо в программе реализовать перегрузку операторов "больше" и "меньше" )), т.е. ">" и "<".

Попробую на простом примере объяснить суть задачи:

Допустим, есть класс MyClass;

class MyClass 
{
  public:
  MyClass(MyClass *link);
  int i;
  MyClass *next;
};

MyClass::MyClass(MyClass *link)
{
  cout << "\n Введите i: ";
  cin >> this->i;
};


В нашем классе нужно обеспечить реализацию простого односвязного списка, т.е:
void main ()
{

  MyClass *pointer1, *pointer2;
  pointer1 = new MyClass (pointer1);
  pointer2 = new MyClass (pointer2);
  pointer1->next = pointer2;
}

Дело в том что вот эту запись "pointer1->next = pointer2;" нужно заменить записью что-то вроде
pointer1>pointer2


То есть надо перегрузить оператор ">" таким образом, чтобы после записи "pointer1>pointer2"
и для pointer1 и для pointer2 вызывался конструктор создания, то есть такие операции
 
  pointer1 = new MyClass (pointer1);
  pointer2 = new MyClass (pointer2);


Плюс должна быть произведена связка этих двух указателей, то есть "pointer1->next = pointer2;"

Подскажите пожалуйста как реализовать такую задачу.

Буду благодарен за помощь....
gamecreator
CODE
class MyClass
{
...
void operator>(MyClass* p);
};
void MyClass::operator>(MyClass* p)
{
this->next=p;
}
или
class MyClass
{
...
friend void operator>(MyClass* p1,MyClass* p2);
};
void operator>(MyClass* p1,MyClass* p2)
{
p1->next=p2;
}
chagin_yav
! Нашёл решение проблемы,

в теле функции main нужно использовать НЕ указатели на объекты, т.к. указатели - это целый тип, в следствие перегрузка просто не срабатывает.
т.е.

void main ()
{

//!
MyClass  pointer1,  pointer2;
//!

pointer1>pointer2;
cout<<pointer1.i<<endl;
cout<<(pointer1.next->i)<<endl;
getch();
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.