![]() |
|
|
![]()
|
|
| Экскалупатор |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: нет Всего: 24 |
Всем привет. есть такая проблемка.
у меня имеется код на С++
у меня есть массив этих классов. вопрос как отсортировать массив этих классов по значению в a, в порядке убывания. понятно что надо как то получить значение а(я так понимаю что для этого нужно вызвать метод GetValue()) и потом по возвращенному значению нужно отсортировать. пока что у меня получилось отсортировать просто массив целых чисел. а вот как быть с массивом объектов классов, в которых есть целые числа я что то не соображу. сортировка должна выполняться в ассемблерной вставке в C++(пишу в VS2008). заранее спасибо. Добавлено @ 22:40
т.е. допустим у меня есть указатель(mas) на массив объектов класса А, в ассемблерной вставке у меня есть адрес начала массива, но вот как обратиться к конкретному элементу этого массива и вызвав метод получить значение, я что то допереть не могу... Это сообщение отредактировал(а) Экскалупатор - 1.5.2011, 22:41 |
||||
|
|||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: нет Всего: 24 |
не ужели нету способа вызвать функцию экземпляра класса? и получить из нее значение? очень надо, может есть какой то обходной путь?
|
|||
|
||||
| Игорь1024 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 151 Регистрация: 11.5.2009 Где: Дальний Восток Репутация: нет Всего: нет |
Интереный вопрос. Но дело в том, как на низком уровне представлены технологии ООП? Я вот не знаю, но может гугл скажет. А почему вам на асме так критично? На плюсах намного быстрее бы получилось (я про время реализации задачи).
--------------------
The God is real,unless he is declared as integer. |
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: нет Всего: 24 |
критично потому что такое условие задачи(курсовая). я так понимаю код на С++ все равно компилятор как то представляет в машинных командах. вопрос как это сделать самому.
|
|||
|
||||
| Игорь1024 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 151 Регистрация: 11.5.2009 Где: Дальний Восток Репутация: нет Всего: нет |
Честно говоря я не натыкался на построение ООП'ых структур, но можно самому покопать.
Вот косвенно относящееся к теме http://www.wasm.ru/article.php?article=oop_from_low Может чем поможет. --------------------
The God is real,unless he is declared as integer. |
|||
|
||||
| 586 |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 2 Всего: 146 |
Не обязательно, можно обратиться к переменной напрямую. Метод вызвать из асм вставки тоже не проблема:
|
||||
|
|||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: нет Всего: 24 |
586, спасибо чел, ты прямо спас проект. я уже хотел начать как нибудь изголяться и искать дурацкие пути решения...
еще один маленький вопрос, у меня по задаче нужно сортировать массив классов,
для того что бы перейти к следующему элементу массива, я так понимаю что мне нужно изменять адрес хранящийся в ebi на длину класса в памяти? но как узнать сколько конкретно байт занимает класс? оговорюсь, что в этом примере у меня просто класс заглушка, для того что бы разобраться как сортировать вообще, реальный класс на много больше. так вот как узнать размер класса, сколько он будет занимать в памяти? и я так понимаю что если у меня в классе есть строки то в классе это только указатель на строку, и его длина не меняется с изменением самой строки, а сама строка хранится где то в другом месте? |
|||
|
||||
| 586 |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 2 Всего: 146 |
В данном случае у тебя массив указателей, и увеличивать edi надо на 4.
Достаточно всего лишь поменять указатели местами в массиве. Да. |
||||
|
|||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: нет Всего: 24 |
586, да, уже догадался, чето сразу тупил только. а как быть если бы у меня был массив не указателей? т.е. был массив экземпляров, а не массив указателей?
|
|||
|
||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 2 Всего: 146 |
Размер можно вычислить через sizeof. Если объект не сложный (как к твоём примере), то содержимое этого объекта можно просто скопировать. Сложные объекты можно скопировать с помощью конструктора копирования или перегруженного оператора присвоения. |
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: нет Всего: 24 |
586, хм. спасибо. попробую разобраться во всем этом...
|
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: нет Всего: 24 |
подскажите еще, как сравнивать значения с плавающей запятой? к примеру типа double?
|
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
какбы для работы с запятой наверно лучше мат. сопроцесор использовать.
-------------------- |
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: нет Всего: 24 |
как?
я в асме совсем недавно. хотелось бы живой примерчик, небольшой такой. |
|||
|
||||
![]()
|
| Правила форума "Asm для начинающих" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm для начинающих | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |