Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.12.02;
Скачать: [xml.tar.bz2];

Вниз

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

 
Галинка ©   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.042 c
8-1170614408
K@KTUS
2007-02-04 21:40
2007.12.02
PNG-изображения


15-1193421519
Vendict
2007-10-26 21:58
2007.12.02
Географические координаты в метры


15-1193379486
bva
2007-10-26 10:18
2007.12.02
Создание инсталяции программы


2-1194419913
Aragorn
2007-11-07 10:18
2007.12.02
TMainMenu ShortCut


4-1179585869
alex1961
2007-05-19 18:44
2007.12.02
Windows server 2003 setvice pack 2





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский