Приветик! Не подскажете, как можно сделать, чтоб модули друг друга использовали? Они категорически отказываются!) Как вообще можно использовать эту возможность - чтоб uses было после implementation и все работало?) он выдает такие разнообразные ошибки компилляции..
И еще..Вот, допустим, в одном модуле описан объект, в другом - его потомок, у который часть методов переопределил. Как можно из него воспользоваться одноименным родительским методом? а еще желательнее - из родителя - методом потомка..
Наверно - вообще низзя?
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;
Опытным путем установлено, что, если у P нет параметров, можно писать не
Inherited P;
Inherited
Спасибочки, и правда работает) Я просто пыталась сделать ему малость ненужную вещь, надо ее по-другому реализовать. Начал говорить, например, что ошибка 70- что-то там изменилось.. И ведь прально делал..
Inherited - точно! не зря, не зря было такое слово в чужой лекции))) пасиб
не между тем разница
в смысле, если он у нас без параметров и
1. вызываем через inherited с указанием имени
2. вызываем без указания
зачем-то же реализована возможность делать и так, и так?
или ситуация примерно такая же, как с функциями с параметрами по умолчанию - можно писать, можно не писать...?
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.
я не забыла... я не знала
классно.
у меня на защите лабораторки задача подобная была....
а если b тоже заместить - будет работать?
А какая разница замещен он или нет? Ты ж обращаешься к предку, и замещены его методы или нет он не знает...