| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm для начинающих > сортировать массив экземпляров класса |
| Автор: Экскалупатор 1.5.2011, 22:27 | ||||
| Всем привет. есть такая проблемка. у меня имеется код на С++
у меня есть массив этих классов. вопрос как отсортировать массив этих классов по значению в a, в порядке убывания. понятно что надо как то получить значение а(я так понимаю что для этого нужно вызвать метод GetValue()) и потом по возвращенному значению нужно отсортировать. пока что у меня получилось отсортировать просто массив целых чисел. а вот как быть с массивом объектов классов, в которых есть целые числа я что то не соображу. сортировка должна выполняться в ассемблерной вставке в C++(пишу в VS2008). заранее спасибо. Добавлено @ 22:40
т.е. допустим у меня есть указатель(mas) на массив объектов класса А, в ассемблерной вставке у меня есть адрес начала массива, но вот как обратиться к конкретному элементу этого массива и вызвав метод получить значение, я что то допереть не могу... |
| Автор: Экскалупатор 3.5.2011, 00:56 |
| не ужели нету способа вызвать функцию экземпляра класса? и получить из нее значение? очень надо, может есть какой то обходной путь? |
| Автор: Игорь1024 3.5.2011, 07:54 |
| Интереный вопрос. Но дело в том, как на низком уровне представлены технологии ООП? Я вот не знаю, но может гугл скажет. А почему вам на асме так критично? На плюсах намного быстрее бы получилось (я про время реализации задачи). |
| Автор: Экскалупатор 3.5.2011, 12:37 |
| критично потому что такое условие задачи(курсовая). я так понимаю код на С++ все равно компилятор как то представляет в машинных командах. вопрос как это сделать самому. |
| Автор: Игорь1024 3.5.2011, 14:01 |
| Честно говоря я не натыкался на построение ООП'ых структур, но можно самому покопать. Вот косвенно относящееся к теме http://www.wasm.ru/article.php?article=oop_from_low Может чем поможет. |
| Автор: Экскалупатор 4.5.2011, 09:57 | ||
| 586, спасибо чел, ты прямо спас проект. я уже хотел начать как нибудь изголяться и искать дурацкие пути решения... еще один маленький вопрос, у меня по задаче нужно сортировать массив классов,
для того что бы перейти к следующему элементу массива, я так понимаю что мне нужно изменять адрес хранящийся в ebi на длину класса в памяти? но как узнать сколько конкретно байт занимает класс? оговорюсь, что в этом примере у меня просто класс заглушка, для того что бы разобраться как сортировать вообще, реальный класс на много больше. так вот как узнать размер класса, сколько он будет занимать в памяти? и я так понимаю что если у меня в классе есть строки то в классе это только указатель на строку, и его длина не меняется с изменением самой строки, а сама строка хранится где то в другом месте? |
| Автор: 586 4.5.2011, 19:17 | ||||||||
В данном случае у тебя массив указателей, и увеличивать edi надо на 4.
Достаточно всего лишь поменять указатели местами в массиве.
Да. |
| Автор: Экскалупатор 4.5.2011, 22:16 |
| 586, да, уже догадался, чето сразу тупил только. а как быть если бы у меня был массив не указателей? т.е. был массив экземпляров, а не массив указателей? |
| Автор: 586 4.5.2011, 22:33 | ||
Размер можно вычислить через sizeof. Если объект не сложный (как к твоём примере), то содержимое этого объекта можно просто скопировать. Сложные объекты можно скопировать с помощью конструктора копирования или перегруженного оператора присвоения. |
| Автор: Экскалупатор 5.5.2011, 01:24 |
| 586, хм. спасибо. попробую разобраться во всем этом... |
| Автор: Экскалупатор 8.5.2011, 23:13 |
| подскажите еще, как сравнивать значения с плавающей запятой? к примеру типа double? |
| Автор: 500mhz 9.5.2011, 09:58 |
| какбы для работы с запятой наверно лучше мат. сопроцесор использовать. |
| Автор: Экскалупатор 9.5.2011, 11:04 |
| как? я в асме совсем недавно. хотелось бы живой примерчик, небольшой такой. |