Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как компиляторы С++ реализуют ООП?  (Прочитано 10496 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Sharp
Гость
« : 26-01-2004 13:13 » 

Просто преобразуют ООП в обыкновенное процедурное программирование и скомпилированный код метода объекта ничем не отличается от обычной процедуры, либо для этого создаются специальные структуры и дополнительный код, отвечающий за взаимодействие и элементы жизни объектов? Извиняюсь, что немного сумбурно, но стоит задача разработать ООЯВУ и реализовать его в 32-битном компиляторе.
Записан
Alf
Гость
« Ответ #1 : 26-01-2004 14:05 » 

Возможно, именно так просто оно бы и было, если не принимать во внимание возможность создавать производные классы, переопределяющие виртуальные методы классов-родителей. А с учетом их существования нужно еще разобраться с таблицей виртуальных методов vtbl и ее использованием (кстати, заодно пригодится при изучении COM). Плюс, естественно, конструкторы-деструкторы (в том числе виртуальные).
Записан
Sharp
Гость
« Ответ #2 : 26-01-2004 14:53 » new

Спасибо, а не могли бы вы посоветовать, где по этому поводу можно просветиться?
Записан
Alf
Гость
« Ответ #3 : 26-01-2004 21:45 » 

Цитата: Sharp
Спасибо, а не могли бы вы посоветовать, где по этому поводу можно просветиться?
Вообще почему-то по умолчанию считается, что vtbl - вещь общеизвестная (в журнале "MSDN Magazine" я наткнулся именно на такую фразу), поэтому авторы крайне редко снисходят до того, чтобы объяснить подробно, что же это такое. Лично я встречался с описанием ее структуры при описании механизмов работы интерфейсов COM.
Есть неплохая книга Дейла Роджерсона "Основы COM", в ней эта тема раскрывается. Нашел ее здесь: http://src.fitkursk.ru/online/com/ch1/ch16.asp, но куда-то пропали рисунки. Без них, наверное, трудновато будет разобраться.
Вот еще вариант: http://src.fitkursk.ru/online/com/ch1/ch16.asp
Также, раз уж речь зашла о реализации собственного языка, рекомендую посмотреть книгу: Пратт, Зелковиц "Языки программирования: разработка и реализация" (сейчас продается 4-е издание). Сам я ее еще не успел прочитать, но в свое время тщательно проштудировал два первых издания, и на мой взгляд, это одна из лучших книг на эту тему.
Записан
NetRaider
Гость
« Ответ #4 : 27-01-2004 04:21 » 

Цитата: Sharp
Спасибо, а не могли бы вы посоветовать, где по этому поводу можно просветиться?


http://www.codesourcery.com/cxx-abi/abi.html
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #5 : 27-01-2004 06:13 » 

Цитата

Спасибо, а не могли бы вы посоветовать, где по этому поводу можно просветиться?


Про vtbl и размещение объекта в памяти можно прочитать в книге Б. Страуструп "Дизайн и эволюция C++", там объясняется почему vtbl содержит не только указатель на функцию но и смещения до this, там же есть примеры реализациии vtbl на С, только они краткие- надо самому додумать. А по поводу создания компилятора- так уже давно известна книга Ахо, Сети, Ульман "Компиляторы. Принципы, технологии, инструменты", там рассмотрен лексический, синтаксический анализ, генерация промежуточного кода :!: , проверка типов, только там нет ООП, но это не страшно- прибавь Страуструпа и все готово.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines