Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.02;
Скачать: CL | DM;

Вниз

Указатель на функцию в Си   Найти похожие ветки 

 
Галинка ©   (2007-11-05 10:55) [0]

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


 
Zeqfreed ©   (2007-11-05 10:57) [1]

> Галинка ©   (05.11.07 10:55)

Суть классов не в описании функций внутри структуры, а в инкапсуляции, наследовании и полиморфизме.


 
Галинка ©   (2007-11-05 11:02) [2]

Zeqfreed ©   (05.11.07 10:57) [1]

это понятно.Поэтому и написала псевдо-классы. точнее такая структура отвечает псевдо-инкапсуляции. Т.е. в одной структуре данных есть данные и методы работы с ними. Наследование тоже возможно. Не возможен только полиморфизм ))


 
wicked ©   (2007-11-05 11:04) [3]


> Интересный ход изобретателей этого языка. Если можно объявить
> указатель на ф-цию, а указатель можно использовать как поле
> струкутры, то можно создавать псевдо-классы?

как много нам открытий чудных....
потрудитесь сначала узнать, для чего был создан си, тогда отпадут многие "открытия" по поводу фич языка


 
DrPass ©   (2007-11-05 11:07) [4]


> Если можно объявить указатель на ф-цию, а указатель можно
> использовать как поле струкутры, то можно создавать псевдо-
> классы?

Это можно и в Паскале сделать. А смысл?


 
Галинка ©   (2007-11-05 11:10) [5]

DrPass ©   (05.11.07 11:07) [4]

а чтоб все в одном флаконе. И не искать по библиотекам и модулям нужные функции.


 
Anatoly Podgoretsky ©   (2007-11-05 11:26) [6]

> Галинка  (05.11.2007 11:02:02)  [2]

Шаблоны что ли?


 
Юрий Зотов ©   (2007-11-05 11:29) [7]

> Галинка ©   (05.11.07 11:02) [2]

> Не возможен только полиморфизм

Возможен. Надо всего лишь ввести в программу таблицу адресов, ее адрес хранить, как поле псевдо объекта, а "метод" псевдообъекта хранить, как смещение в этой таблице - и уже по этому смещению писать реальный адрес исполняемого кода "метода".

А чему, собственно, удивляться? Объектные языки ведь и родились из необъектных. И никаких "объектов", никаких "инкапсуляции, наследования, полиморфизма" в машинной программе ведь реально не существует, это лишь наши абстракции. А в машине существует реализация этих абстракций, и выполнена эта реализация самыми обыкновенными и совершенно необъектными способами. Которые, естественно, можно повторить на любом необъектном языке (кроме, конечно, игрушечных, типа джавы).


 
Думкин ©   (2007-11-05 11:33) [8]

может не стоило опережать классы, а основательно узнавать те в которых учились?


 
vpbar ©   (2007-11-05 11:35) [9]


> Интересный ход изобретателей этого языка. Если можно объявить
> указатель на ф-цию, а указатель можно использовать как поле
> струкутры, то можно создавать псевдо-классы?

Можно. Где то видел такое с двойной диспетчеризацией. Только по-моему у них это случайно "изобрелось". Да и том же делфи такое тоже можно сделать.
Так в чем новость? Так просто восхищение Си?
ЗЫ А по поводу "изобретений" - так указатели на функции-члены еще похлеще будут. На rsdn статья целая была по этому поводу.


 
homm ©   (2007-11-05 11:39) [10]

> [5] Галинка ©   (05.11.07 11:10)
> а чтоб все в одном флаконе. И не искать по библиотекам и
> модулям нужные функции.

NameSpaces?


 
wendy parkinson   (2007-11-05 12:03) [11]

Есть один хитрый объектно-ориентированный фреймворк для C, c заимствованиями из CLOS-а

http://cern.ch/laurent.deniau/html/cos-oopsla07-draft.pdf
http://sourceforge.net/projects/cos

Правда утверждается, что он написан на C99, неизвестно, насколько он совместим с предыдущими стандартами.


 
wicked ©   (2007-11-05 12:04) [12]

> vpbar ©   (05.11.07 11:35) [9]
> homm ©   (05.11.07 11:39) [10]
в си нету ни указателей на функции-члены (за неимением самих функций-членов), ни namespaces
си - он попроще :)


 
vpbar ©   (2007-11-05 12:07) [13]

>>wicked ©   (05.11.07 12:04) [12]
Конечно. Ведь и классов там тоже нет :) Я С++ имел ввиду.


 
Однокамушкин   (2007-11-05 13:30) [14]


> Галинка ©   (05.11.07 10:55)  
> Интересный ход изобретателей этого языка. Если можно объявить
> указатель на ф-цию, а указатель можно использовать как поле
> струкутры, то можно создавать псевдо-классы?

Не только они так думают... Вирт (разработчик Паскаля, если вдруг кто не знает), в своём последнем языке Оберон так и сделал... Вирт вообще очень не любит ООП, отзывается о нём примерно так: "Они называют тип классом, процедуру методом, переменную объектом и говорят, что это новая концепция программирования" Так что в первой версии Оберона, которую делал Вирт, никаких классов не было, Вирт сказал, что кому нужно, пусть вставляет в рекорды поля процедурных типов... Это только в Обероне-2 и Обероне-3 (aka Component Pascal) появилась возможность вставлять процедуры в рекорды, но эти языки делал уже не Вирт, а его ученики Мёссенбек (Оберон-2) и Гуткнехт (Оберон-3)


 
Piter ©   (2007-11-05 14:40) [15]

Нда, что тут сказать?

Если все разложить по полочкам, смысл этой темы - на Си можно написать компилятор Си. Гениально, на Си что хочешь можно написать, на нем даже ОС пишут, какие тут компиляторы ;)

Да и вообще, это хороший тон - писать новый компилятор / IDE на предыдыдущей версии, а потом скомпилировать новым ;)



Страницы: 1 вся ветка

Текущий архив: 2007.12.02;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.024 c
15-1193596876
VladSn
2007-10-28 21:41
2007.12.02
кнопки в заголовке окна


15-1193809034
Flexer
2007-10-31 08:37
2007.12.02
Установка DevExpress на Delphi 7


2-1194334863
Kolan
2007-11-06 10:41
2007.12.02
Как правильно делать диалоги?


2-1192718804
Barracudic
2007-10-18 18:46
2007.12.02
Как програмно запустить приложение?


15-1192365094
Alien1769
2007-10-14 16:31
2007.12.02
Антивирус для 64-разрядной Висты