Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 11.05.2008, 14:23   #1
chagin_yav
 
Регистрация: 04.01.2008
Сообщений: 4
По умолчанию Перегрузка операторов, Организация перегрузки операторов

(C++)

Здравствуйте,

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

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

Допустим, есть класс 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;"

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

Буду благодарен за помощь....
chagin_yav вне форума Ответить с цитированием
Старый 11.05.2008, 23:52   #2
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,623
По умолчанию

Если честно не очень понимаю суть такой перегрузки ">". Но если вам надо, то я думаю вот так
Код:
MyClass MyClass::operator>(MyClass &a)
{
      a=new MyClass(a); //хотя сомневаюсь в данной записи
      this=new MyClass(this); //и в этой тоже

      a->next=this;
}
По вашему алгоритму вроде так, но чувствую не будет оно так работать. Вообще, задачу вы мутную дали. Неясно к чему так усложнять?
MaTBeu вне форума Ответить с цитированием
Старый 12.05.2008, 08:15   #3
chagin_yav
 
Регистрация: 04.01.2008
Сообщений: 4
По умолчанию

! Нашёл решение проблемы,

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

Код:
void main ()
{

//!
MyClass  pointer1,  pointer2;
//!

pointer1>pointer2;
cout<<pointer1.i<<endl;
cout<<(pointer1.next->i)<<endl;
getch();
}
chagin_yav вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программы с использованием операторов ветвления и циклов Vitas1234 Паскаль, Turbo Pascal, PascalABC.NET 9 11.06.2008 15:18
Использование операторов цикла кася Паскаль, Turbo Pascal, PascalABC.NET 3 01.05.2008 23:32
Оптимизировать перегрузку операторов Иллидан Общие вопросы C/C++ 14 24.04.2008 10:18
Несовместимость двух операторов August550 Помощь студентам 16 23.04.2008 20:30
проверить правильность расстановки операторов begin и end Тёмка Помощь студентам 1 10.12.2007 13:07


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS