![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() |
Reople |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 2 Пол: Мужской Репутация: ![]() ![]() ![]() |
Доброго времени суток, знаток Turbo Pascal'я (если нет, то можешь дальше не читать).
У меня Есть 2 Вопроса по Turbo Pascal 7.0: 1) Это даже не вопрос, а факты о противоречии разных авторов об одних вещах, - вопрос касается <структуры> Множество <set of ...> Привожу Цитаты: a) <... Исходя из особенностей внутреннего представления множеств можно сделать два основных вывода: [...] - все операции над множествами выполняются значительно эффективней, чем над другими структурами данных> Рапаков Г. Г. (или как там), Ржеуцкая С. У. "Программирование на языке Pascal" Spb 2004. стр 282 б)<... Одна из причин редкого применения - очень низкая скорость выполнения операции с множествами.> Издательская группа BHV "Турбо Паскаль 7.0" Киев 1999г. стр 157 Исходя из внутреннего устройство множества в Tubo Pascal я склонен верит первому высказыванию, и смело переписал некоторые фрагменты одной своей программы с их помощью. However, работа с отдельными битами нам не разрешена (даже в asm'е мы логически складываем, умножаем отдельные БАЙТЫ, чтобы переключить нужный нам бит). У кого-нибудь есть размышления (а лучше конкретные факты в пользу одной из двух высказываний). p.S. Если кто-то посоветует сравнить книги по остальному содержанию, то он может дальше не читать 2) Вопрос второй касается распределения памяти. Вот фрагмент программы, которая корректно работает: Главный Pas файл. {=============================================} {---------------------------------------------------------------------------------} Вот таким способом я передал функцию в процедуры построения графика. Немного короче было бы передать функцию так procedure DrawShedule(... f: TFunk ...); а вызов DrawShedule(... f ...); Но об этом разговор дальше. Так программа рабочая, я вставляю текст в виртуальный метод в другой программе {==============================================} Так Вот, Господа, приверженцы передачи имени процедуры с помощью типа в данном случае компилятор даже не захочет с вами общаться, Утверждая, Что то, что вы передаете в процедуру DrawShedule(... f ...) не указывает на область памяти, это про "f". Передавая указатель, как в данном случае я и написал, компилятор не может отследить этот факт и благополучно компилирует программу. Но, когда программа доходит до использования функции f - начинаются проблемы.... Они связанны с.....?? Это и есть мой вопрос. Мой рассуждения. У виртуального метода локальная функция хранится либо в стеке, либо в сегменте кода, поэтому компилятор не захочет передавать имя функции в качестве формального параметра, ведь он боится, что на этапе позднего связывания, он не сможет определить расположение функции. Рассуждения, как решить проблему: расположить код функции по конкретному адресу в памяти ( где-то тут $C000:0000 ) - Но как это реализовать? А еще может мои рассуждения просто чушь, Посему я и обратился к Вам! Тема покажет, какие тут программисты на форуме. p.s.s отдельная программа работает, как и при передаче имени функции, так и при передачи её адреса (как я написал). В виртуальном методе при передачи имени функции компилятор не захочет с вами иметь дело. А вот при передачи адреса он с вами будет дружить, он то будет, а вот процессор нет... Ну, ваши соображения, уважаемые пользователи форума! Не Забывайте я задал 2 вопроса Сообщение отредактировано: Oleg_Z - 29.05.2005 20:12 |
![]() ![]() |
hiv |
![]()
Сообщение
#2
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 660 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Если по человечески - то если начал писать в ООП, то и пиши все в ООП. Т.е. твоя ф-ция наверняка будет тобой или еще кем-то меняться на свою, вот и определи ее как один из методов твоего объекта и сделай ее виртуальной, чтобы потом ее можно было перегружать. А то что ты ее хоть и прописал внутри своего виртуального метода, то вызвать ее можешь только находясь внутри него, а хочешь использовать ее еще где-то. Ты сам себе противоречишь!
Цитата Возможны ошибки, так как к данным типа rBuff получают доступ все методы модуля, выше которых они описаны. Так опиши rBuff как поле твоего объекта и тогда все методы будут иметь к нему доступ.Сообщение отредактировано: hiv - 1.06.2005 15:12 -------------------- Никогда не жадничай. Свои проблемы с любовью дари людям!
|
![]() ![]() |
![]() |
Текстовая версия | 21.06.2025 2:17 |