|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Окт 10, 2004 22:34:13 >После ассемблера не понять какой-либо язык просто невозможно :) Ну это как сказать, Я вот уже привык к ячейкам памяти и регистрам. Так мне классы с таким трудом даются, если ваще когда нить дадутся! |
|
|
Дата: Окт 11, 2004 08:39:41 Дык это потому, что многие авторы книг, которые ты читаешь, знают кучу всяких слов вроде инкапсуляции, агрегирования и прочая. А объяснить русским языком, что такое таблица виртуальных методов им не досуг. |
|
|
Дата: Окт 15, 2004 13:37:48 IMHO знание внутренних механизмов виртуальных функций МЕШАЕТ при написании программ на C++. Вся его (C++) прелесть именно в инкапсуляции, агрегировании, шаблонах и пр.. Просто очень немногие могут это по русски и доходчиво объяснить. Жду шишек на свою голову от ассемблерщиков =) |
|
|
Дата: Окт 15, 2004 13:42:50 S_T_A_S_ Не будет от тебя статьи по этому поводу, обижусь! |
|
|
Дата: Окт 15, 2004 19:28:02 >После ассемблера не понять какой-либо язык просто невозможно :) У нас в ВУЗе был язычок для создания экспертных систем (местная разработка, но рельно используемая) - так я ее ни после ассемблера (трех ассемблеров, если быть до конца точным), ни после бутылки понять не смог. Там фичи примерно такие: 1. Более-менее традиционных управляющих структур не было не только в языке, но и в мозгу разработчика ЭТОГО 2. Все "операторы" на каждом шаге исполнялись одномоментно. Даже взаимоисключающие :-) 3. Одна и та же переменная могла 1. "переименоваться" в другую переменную _без_малейших_указаний_ в тексте "программы" (было какое-то правило, которое позволяло постфактум осмыслить, что во что превратилось, но я его так и не смог понять по причине его абсолютной шизофреничности) 2. иметь два равноценных имени одновременно Возможно, тут помогли бы нейролептики и галлюциногены, но это категорически не наш метод :-) В общем, чувство было такое, что нас учили использованию альфа-версии тулкита для создания противоестественных интеллектов. И после этого я начал очень хорошо понимать, за что Терминаторы хотели уничтожить человечество. |
|
|
Дата: Окт 15, 2004 20:22:50 EvilsInterrupt По какому поводу? |
|
|
Дата: Окт 15, 2004 20:34:15 Стасу: По вопросам: 1. Классы и структуры(как их представить человеку имеющего только опыт низкого уровня) 2. Их реализация на низком уровне 3. Работа компиляторы когда он видит такие вещи можно также виртуалные функции! |
|
|
Дата: Окт 15, 2004 20:36:18 А объяснить русским языком, что такое таблица виртуальных методов им не досуг. Это почему не досуг? Еще и как досуг! Просто ты не те книжки читаешь :))) Почитай трупа страуса - "Дизайн и эволюция С++" - там все это есть! Может, труп страуса и хреново объясняет - не дано ему, но, тем не менее, информации достаточно много. :) |
|
|
Дата: Окт 15, 2004 23:05:07 volodya один чел сказал мы слишком мало живем, чтобы думать и знаешь, он в чем то прав. |
|
|
Дата: Окт 15, 2004 23:15:59 О-о-о! Так как истина вечно уходит из рук, Не пытайся понять непонятное, друг. Чашу в руки бери, оставайся невеждой, Нету смысла, поверь, в изученьи наук. |
|
|
Дата: Окт 15, 2004 23:38:41 EvilsInterrupt 1 & 2 - Предположим, мы пишем игру ТЕТЯIS (название искажено умышленно, т.к. afaik за его использование нужно платить $$) Есть у нас всякие переменные (ячейки памяти) - время, счёт, уровень, координата фигуры X, координата фигуры Y и т.д. Наш пример прост, поэтому запутаться в них сложно. Но, тем не менее, то что перечисленно выше, логично выделить группы: - статистика игры; - координаты фигуры. И объявить свой формат данных: ; fasm
struc statistic
{
.time dd ?
.score dd ?
.level dd ?
}
struc sprite
{
.x dd ?
.y dd ?
}
Теперь, вместо просто имени переменной мы будем использовать имя структуры, и, через точку, имя, гм.. назовём это словом "свойство" :). Какой в этом смысл, кроме усложнения имени? Очень простой: когда мы определяем конкретные экземпляры данных в программе, данные одной группы быдут расположены физически в соседних ячейках памяти. А это плюс, когда данные будут считываться процем из памяти в кэш. Теперь вспоминаем, что спрайты у нас в игре имеют не только координаты, но и форма у них может быть разная - 2х2, 1х4 и т.д. Можно сделать так: struc sprite
{
.x dd ?
.y dd ?
.image dd ?
}В последнеё ячейке будем хранить номер, соответствующий фигуре.
Если этот номер 1 - рисуем 2х2, если номер 2, то - 1х4.. Но что-то много тут "Если" - а на каждую нужен свой Jcc вызывающий соответствующую подпрограмму рисования. Как зделать проще? А вот так: struc sprite
{
.x dd ?
.y dd ?
.draw dd ?
}
В последней ячейке мы будем хранить не номер фигуры, а адрес подпрограммы (или функции, кому что больше по душе :). Так мы избавились от "Если" - код упростился. Если мы хотим сдвинуть спрайт вниз, то мы вызываем соответсятующую ф-цию, для всех фигур она одна (и адрес её тоже один). Если же нужно нарисовать - то ф-ция тоже как бы одна, но адреса у них разные, для каждой фигуры свой. Основной же код общий для всех фигур - и ф-ция рисования для него "виртуально" - одна и таже. Причём, если мы захотим реализовать новую разновидность игры, где фигуры будут из 5 кубиков, нам нужно будет только добавить ф-ции рисования этих кубиков, всё остально е уже готово. В данном случае видно, что мы получили приимущества - упрощение кода (ушли от многих "Если") и ускорение (данные лучше кешируются). В каких-то других случаях, такого приимущества может не быть поэтому нет смысла везде и всюду пытаться так делать. > Работа компиляторы когда он видит такие вещи Я как раз и думаю над этим, что он должен делать и, самое главное, как. Вот только не знаю, сколько над этим нужно будет ещё думать, перед тем как что-то писать :-) > один чел сказал мы слишком мало живем, чтобы думать и знаешь, он в чем то прав. Думаю, в первой половине %) volodya > Просто ты не те книжки читаешь :))) Почитай трупа страуса Дык, он у меня есть, но объясняет-то англицким :-) А поскольку у меня с ним не очень, читаю ISO/IEC14882 там вроде язык понятней, тока вот крыша бы не поехала после этого %) |
|
|
Дата: Окт 15, 2004 23:49:51 Книга Страуструп'а, по-моему, не лучшая книга по C++ %) |
|
|
Дата: Окт 15, 2004 23:55:48 S_T_A_S_ > но объясняет-то англицким :-) Но есть ведь и переведённый, и в сети его навалом, хотя бы на том сайте где книжка 15Mb pdf по BCB лежит ;-) |
|
|
Дата: Окт 15, 2004 23:59:39 Книга Страуструп'а, по-моему, не лучшая книга по C++ %) Я бы сказал, что это ХУДШАЯ книга по С++, но, 1) Все пункты освещены 2) Как-никак создатель, мать его за ногу и об угол. А о "дизайне и эволюции" я сказал в ответ на вопли EvilsInterrupt. Asterix - а ты учи и С, и С++ - работы много. Я тебя и привлеку тут же :) |
|
|
Дата: Окт 16, 2004 01:18:04 volodya Так как истина вечно уходит из рук, Не пытайся понять непонятное, друг. Чашу в руки бери, оставайся невеждой, Нету смысла, поверь, в изученьи Омар Хайям что ли? |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.112 |