IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

 
 Ответить  Открыть новую тему 
> Как взаимно использовать модули?
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 2
Пол: Женский
Реальное имя: *

Репутация: -  0  +


Приветик! Не подскажете, как можно сделать, чтоб модули друг друга использовали? Они категорически отказываются!) Как вообще можно использовать эту возможность - чтоб uses было после implementation и все работало?) он выдает такие разнообразные ошибки компилляции.. lol.gif
И еще..Вот, допустим, в одном модуле описан объект, в другом - его потомок, у который часть методов переопределил. Как можно из него воспользоваться одноименным родительским методом? а еще желательнее - из родителя - методом потомка..
Наверно - вообще низзя? mega_chok.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
Как вообще можно использовать эту возможность - чтоб uses было после implementation и все работало?)
Если Uses - после Implementation - то все работает... Если же ты два модуля присоединиши друг к другу в Interface - то будет Circullar Unit Reference (я даже объяснял, почему это происходит...)

Поскольку ты не сказала, какие именно "разнообразные" ошибки тебе выдает компилятор, то все, что могу сделать - сказать, что вот ЭТО:

Unit P1;
interface

implementation
uses P2;

end.


Unit P2;
interface

implementation
uses P1;

end.
будет прекрасно компилироваться... Хотя модули тоже циклически вызывают друг друга...

Цитата
допустим, в одном модуле описан объект, в другом - его потомок, у который часть методов переопределил. Как можно из него воспользоваться одноименным родительским методом?
Опять же, смотря как переопределил... Но из метода потомка всегда можно попробовать вызвать метод родителя:
Type 
TA = object
procedure P;
end;

Type
TB = object
procedure P;
end;

procedure TB.P;
begin
Inherited P; { <--- Вызов метода родителя }
end;


Цитата
а еще желательнее - из родителя - методом потомка..

FAQ: ООП -> Виртуальные методы
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Опытным путем установлено, что, если у P нет параметров, можно писать не
 Inherited P;

а просто
Inherited

в чем разница - не знаю.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4





Группа: Пользователи
Сообщений: 2
Пол: Женский
Реальное имя: *

Репутация: -  0  +


Спасибочки, и правда работает) Я просто пыталась сделать ему малость ненужную вещь, надо ее по-другому реализовать. Начал говорить, например, что ошибка 70- что-то там изменилось.. И ведь прально делал..
Inherited - точно! blush.gif не зря, не зря было такое слово в чужой лекции))) пасиб !yessir.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Цитата
в чем разница - не знаю.
smile.gif В том, что если нет параметров, то компилятор вполне способен подставить имя метода самостоятельно, чего не сможет сделать с параметрами...

Кстати, в TP это не проходит. Он в любом случае требует название метода...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


не между тем разница smile.gif
в смысле, если он у нас без параметров и
1. вызываем через inherited с указанием имени
2. вызываем без указания

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

Сообщение отредактировано: мисс_граффити -


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Цитата
ситуация примерно такая же, как с функциями с параметрами по умолчанию - можно писать, можно не писать...?
Если НЕ писать, то вызовется одноименный метод предка... Не забывай, ты можешь сделать и так:

type
ta = object
procedure a;
procedure b;
end;

tb = object(ta)
procedure a;
end;

procedure ta.a;
begin
writeln('a.a');
end;
procedure ta.b;
begin
writeln('a.b');
end;

procedure tb.a;
begin
inherited b;
inherited;
writeln('b.a');
end;

var X: tb;
begin
X.a;
end.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


я не забыла... я не знала smile.gif
классно.
у меня на защите лабораторки задача подобная была....

а если b тоже заместить - будет работать?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






А какая разница замещен он или нет? Ты ж обращаешься к предку, и замещены его методы или нет он не знает...
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 21.09.2020 19:00
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name