· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Binary digit !!!

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Апр 13, 2004 00:30:39

Ежели мы порождаем класс, или регестрируем его, то какие процессы происходят, а кто знает или имеет то буду рад и какому-нить коду.
Буду рад ответу!


Дата: Апр 13, 2004 13:38:16

Binary digit, coders !!!

Я уже задавал вопрос, но никто не ответил. Как я понял компетентных в
этом вопросе людей нету. Но все же попробую задать еще раз.
Итак есть язык с++, пишем прогу и в ней создаем класс А, далее по текс-
ту проги порождаем от него класс Б.
Во время трансляции проги процессор он ведь знает только команды:
ну, там всякие push,pop,and,mov и т.д. и ему глубоко фиолетовы, что же
это кодер делает.
Так вот какие процессы происходят при создании, порождении класса. Мо-
жет это вовсе происходит во время работы ассемблирования или линковки.
Я не знаю, а в инфе поэтому вопросу ясно не сказано. А я хочу знать,
ведь я занимаюсь кодингом, не просто: "Раз работает, значит все впоряд-
ке", а ради "Почему это так работает, что заставляет это так работать".
Не ужели сейчас перевелись люди, которые знают эти процессы. Или у них
языки ...
Я ни кого не хочу спровоцировать или оскорбить, но если кто-то знает эти
процессы и укрывает, то это не делает ему чести.

К примеру возьмем туториал Iczelion`а, урок 3, создание окна:
Чтобы создать окно надо породить wc от Winclassex и заполнить ее далее
зарегистрировать класс окна (Если верить описаниям С++, то это совокуп-
ность переменных и методов, в нашем случае в роли метода выступает win-
proc).
Куда? Помещается информация о созданном классе? Во внутреннюю таблицу?
Да, тогда, где она распологается и что за процессы с ней работают? Нет,
тогда, что это дает знать винде что класс зарегистрирован?

Не скупитесь на ответы, буду рад вашим мыслям, высказанные в слух,
может кто-то думает, что понимает верно, а на самом деле нет и его
по правят.

Дайте же наконец поспать спокойно !

С уважением Evil`s Interrupt !!!


Дата: Апр 13, 2004 14:14:57

Я ни кого не хочу спровоцировать или оскорбить, но если кто-то знает эти процессы и укрывает, то это не делает ему чести

Клевая фраза! На стену повешу на работе:))


Дата: Апр 13, 2004 14:30:53

Valery

Тебе улыбаться, а мне спать хочется, а исчо больше знать о том, что спрашивую. Хоть ты то знаешь наверно ;-)


Дата: Апр 13, 2004 14:37:13

EvilsInterrupt
"Класс окна" в Win32 API и "класс" в C++ - это далеко не одно и то же.


Дата: Апр 13, 2004 15:23:32

Aquila

Спасибо, это уже что-то.
Но тогд что такое класс окна для Win32 API?
И где полнее раскрыть эту тему для себя, я что-то ни одной статьи не видел по этой теме.


Дата: Апр 13, 2004 18:16:01

Так вот какие процессы происходят при создании, порождении класса. Мо-
жет это вовсе происходит во время работы ассемблирования или линковки.


Родной, если ты безнадежен, то о какой помощи может идти речь?
Сам вопрос сформулирован настолько по идиотски, что я даже не знаю как ответить. Тебя бы не затруднило разродиться чем-то более внятным, или я тебя язык в ... от природы?


Дата: Апр 13, 2004 23:34:01

Уважаемый volodya!!!
Язык на месте просто люди, как правило думают с начало ..., а потом головой. Но! Это правило не ко всем подходит, что и радует!
Почитай повнимательней и не поддавайся первому впечатлению от прочитанного, выложил довольно ясно, если что непонятно, то что именно?

Если чем обидел тебя или кого друго сорри, искренне!


Дата: Апр 13, 2004 23:55:30

Ну хорошо. Сам напросился. Потрачу на тебя немного букв, как выражается Свин.

Во время трансляции проги процессор он ведь знает только команды:
ну, там всякие push,pop,and,mov и т.д. и ему глубоко фиолетовы, что же
это кодер делает.


Исходя из этого предложения, очевидно, что ты не знаешь, что такое "трансляция". Вовсе необязательно трансляция будет приводить к созданию ассемблерного кода, мой дорогой. Что такое "промежуточная форма", слышал?

Так вот какие процессы происходят при создании, порождении класса

А это целиком зависит от того, что за класс. Скажем, если есть конструктор, будет вызван конструктор. Точнее вопросы задавать можно?

Может это вовсе происходит во время работы ассемблирования или линковки.

Вообще изумительно. Ассемблер ничего не знает и знать не хочет о таких вещах как "классы". Его дело - ассемблировать то, что получилось после разбора промежуточной формы, если таковая есть. С линкером примерно то же, хотя сейчас есть умные линкеры, тоже способные генерировать код, но это немного другая песня.

Бывают и случаи, когда адрес функции можно узнать только в ран-тайме - виртуальная функция, RTTI и т.п.

Я не знаю, а в инфе поэтому вопросу ясно не сказано.

Да ну? А откуда я это знаю? Из воздуха? Все давным-давно написано, просто некоторые ни читать, ни искать не умеют!


Дата: Апр 14, 2004 00:02:08

volodya!
Пока кого нить не оскарбишь и не обидешь ни кто и неделится!
НО все РАвно ГРОмадное СПАСИБО-0-О-О-О-О! В общем рульных тебе задач!


Дата: Апр 14, 2004 00:43:16

Итак, пожевав на скорую руку сел за инфу, что есть и пытаюсь уловить, что хотел сказать Володя и то что уже знаю, а так же то что написано в книгах.

Создам небольшой код на С++:
class a
{
};
Вспомню что класс - это совокупность переменных и методов.

1.
Вот тут я и не врублюсь, что далее происходит с этим классом?
Преобразуется ли он в опкод или нет?
2.
Если мы будем кодить с использованием MFC и породим ска-
жем класс А от какого-нить класса Б. То непонятно мне, это порождение происходит при выполнении программы после ее приведения к исполнителю или же это процесс порождения
происходит во время компиляции кода?


Возьму теперь Iczelion`а там сказано, что бы создать окно надо зарегестрировать класс окна, путем заполнения Winclassex и вызова api по регистрации класса.
Смотрю на описание Winclassex и вижу, что туда включается и Winproc - процедура окна! А ведь структура это совокупность переменных, а тут процедура! Выходит что Winclassex не структура, а класс?!

3.
Регистрация когда происходит во время выполнения исполни-
теля или вовремя компиляции кода? Если первое, то куда заносится информации о порожденном классе и от куда берется информация об отце?

Volodya вряд ли ты снизойдешь до ответов, но был очень рад твоему ответу или ответу какого нить другого грамотного кодера!
Сорри за вопросы, возможно кому-то они
кажутся и глупыми, но ведь глупость прос-
то так не уйдет. Ее терминами, знаниями
бить надо.
Всем спасибо!


Дата: Апр 14, 2004 00:51:00

Вот тут я и не врублюсь, что далее происходит с этим классом?
Преобразуется ли он в опкод или нет?


Блядь, да как же так можно вопросы задавать. Отвечаю. В твоем конкретном случае класс вообще не будет скомпилирован - он ПУСТОЙ. В какой, на хер, опкод? В ассемблер? В тройки-четверки? ЧЕГО ТЕБЕ НАДО?

или же это процесс порождения происходит во время компиляции кода

Во-во. Уже лучше.

А ведь структура это совокупность переменных, а тут процедура!

Да ну? Серьезно? Не шутишь? А что такое "указатель на функцию", слышал? А что такое callback, а?


Дата: Апр 14, 2004 01:14:09

Вот так и надо отвечать!

Глядишь меня уму разуму научишь, ежели не поседеешь раньше!
А ваще спасибо!


Дата: Апр 14, 2004 04:59:42

В Сях я не силён, но мне кажется, что происходит следующее:
Допустим определён какой то класс, он содержит несколько методов, которые реализуются и вызываются как функции с удобочитаемыми именами на момент разработки (используется человеком), ассемблирования (пока используется ассемблером) и линкером (имена функций заменяются адресами). Так же создаются переменные (вполне возможно в виде структуры или структур) доступ к которым так же унифицирован таким образом, чтобы доступ к переменной был типа MyClass.MyVar а доступ к методу MyClass.MyMetod. При определении нового класса с добавлением каких то своих методов все функции (читай методы) и переменные доступные в контексте класса родителя "копируются" в ребёнка плюс добавляется несколько новых, которые Вы определили. Фактически в исполняемом файле остаются переменные и функция обработки сообщений окну. Внутри функции обработки сообщений реализуется или сами методы или вызовы функций их реализующих. При этом часть параметров, на C не передаются явно, они подразумеваются, как логическая часть класса. В исполняемом же файле параметры передаются явно в любом случае (их туда подставляет ассемблер или компилятор).


Дата: Апр 14, 2004 10:15:33

2EvilsInterrupt:
1) Четко определись с понятием класс. Это слово много чего значит, и ты эти понятия явно путаешь. Есть класс в винде, есть класс в сях, есть класс в школе, есть класс животных в природе... Помоему это разные понятия?

2) По-видимому тебя интересуют классы в сях. Тогда перестань ссылаться на исцелиона - там совсем другие классы.

3) Я тоже не силён в сях, поэтому буду рассказывать (как я это себе представляю) об организации классов вообще. Классы бывают динамические и статические. Вторые существуют только на момент написания программы, после компиляции они превращаются в обычный код, как обычные переменные и функции. Динамические - тут класс существует как на момент написания программы, так и на момент выполнения программы. Если тебе легче это представить то думай о классе во время выполнения программы как о структуре находящейся в памяти. Допустим у нас есть простой класс у которого есть один метод и одно поле данных размерностью четыре байта. Тогда твой класс займет восемь байт (размер метода не учитываю). В поле данных может находится какоето число - обычная переменная, а вот в поле метода (так называемые виртуальные методы) хранится указатель на этот самый метод. А теперь то что ты спрашивал: возможно что метод вообще не определён, тогда в этой переменной будет лежать NULL, возможно там будет какой-то метод который определён в классе, тогда гдето в памяти будет находится код этого метода, а в поле метода будет лежать указатель на него. Возможно метод наследуется, тогда в поле метода будет лежать указатель на метод предка, причем любой вложенности. Дальше, я не знаю как это в сях, но предположу что изначально поле метода заполняется компилятором. А теперь ответь на вопрос, если ты захочешь в этот указатель на метод занести другое значение - тебе чтото может помешать??? Ну в сях может и да, а вообще то нет. Например ты можешь в конструкторе класса занести в поле метода всё что хочешь, ты можешь сослать метод в NULL, можешь указть на какой-то метод, причем любого другого класса, можешь по идее вообще указать на API, можешь вообще это поле использовать для хранения каких то чисел, кто тебе мешает?

4) А вообще вопрос сформулирован, мягко говоря, неккоректно. Лично когда я его прочитал, я даже не понял что ты спрашиваешь, а как можно ответить на вопрос который ты не понял? Я вот и щас ответил про классы в си посути наугад, может те нужны были классы в винде? А там совсем другая кухня...

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.050