![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ООП [D7, 2003]
IvanB © (2007-11-30 11:06:00)Подскажите пожалуйста.
У меня есть начальный класс:
TSomeClass = class(TComponent)
private
FStr1: string;
FInt1: Integer;
FWord1: Word;
FStr2: string;
procedure ...
function ...
function func1(Int: Integer): string;
...
end;
function TSomeClass.func1(Int: Integer): string;
begin
if FStr1 = ... then
case FInt1 of ...
TSomeClass.proc1();
TSomeClass.proc2();
...
Result := ...
end;
и наследник
TOtherClass = class(TSomeClass)
private
function func1(Int: Integer): string;
end;
как мне в таком случае перекрыть func1 из начального класса?
Сергей М. (2007-11-30 11:26:00) [1]
> Наверное стоит убрать из private в начальном классе?
>
Если в разных, то конечно следует перенести как минимум в protected
Amoeba (2007-11-30 11:26:00) [2]
> ООП [D7, 2003]
>
> IvanB (30.11.07 11:06)
>
> Подскажите пожалуйста.
>
Читай учебники! Иначе далеко не уедешь.
Найдешь здесь в электронном виде
http://www.podgoretsky.com/ddp.html
ЮЮ (2007-11-30 11:25:00) [3]> Нет, в разных. Наверное стоит убрать из private в начальном
> классе?
стоит поместить хотя бы в protected.
IvanB (2007-11-30 11:23:00) [4]Нет, в разных. Наверное стоит убрать из private в начальном классе?
trubin (2007-11-30 11:20:00) [5]TSomeClass и TOtherClass в одном юните?
ЮЮ (2007-11-30 11:19:00) [6]TSomeClass = class(TComponent)
private
...
function func1(Int: Integer): string; virtual;
...
end;
TOtherClass = class(TSomeClass)
private
function func1(Int: Integer): string; override;
end;
function TOtherClass.func1(Int: Integer): string;
begin
Result := inherited func1(Int);
proc1();
// а если proc1() тоже перекрыт и нужен proc1() именно предка, то
inherited proc1();
....
end;
IvanB (2007-11-30 11:17:00) [7]Я птыался сделать такое:
TSomeClass: function func1(Int: Integer): string; virtual;
TOtherClass: function func1(Int: Integer): string; override;
Но ругается на Method '...' not found in base class
F1 не помогло. Ошибки в написании точно нет.
Сергей М. (2007-11-30 11:16:00) [8]объявить метод TSomeClass.func1 виртуальным (
virtual), а в классе TOtherClass перекрыть метод func1 (override)
В теле перекрытого метода обращение к соотв. методу класса-предка осуществляется при пом. зарезерв.словаinherited
Ш-К (2007-11-30 11:16:00) [9]Сделать виртуальной?
IvanB (2007-11-30 11:08:00) [10]Забыл. Но при этом в наследнике вызвать функции из начального класса:
function TOtherClass.func1(Int: Integer): string;
begin
ShowMessage('dddd');
TSomeClass.proc1();
TSomeClass.proc2();
....
end;