Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.23;
Скачать: CL | DM;

Вниз

ООП   Найти похожие ветки 

 
IvanB   (2007-11-30 11:06) [0]

Подскажите пожалуйста.

У меня есть начальный класс:
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 из начального класса?


 
IvanB   (2007-11-30 11:08) [1]

Забыл. Но при этом в наследнике вызвать функции из начального класса:

function TOtherClass.func1(Int: Integer): string;
begin
ShowMessage("dddd");
TSomeClass.proc1();
TSomeClass.proc2();  
....
end;


 
Сергей М. ©   (2007-11-30 11:16) [2]

объявить метод TSomeClass.func1 виртуальным (virtual), а в классе TOtherClass перекрыть метод func1 (override)

В теле перекрытого метода обращение к соотв. методу класса-предка осуществляется при пом. зарезерв.слова inherited


 
Ш-К   (2007-11-30 11:16) [3]

Сделать виртуальной?


 
IvanB   (2007-11-30 11:17) [4]

Я птыался сделать такое:
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:19) [5]

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;


 
trubin ©   (2007-11-30 11:20) [6]

TSomeClass  и TOtherClass в одном юните?


 
IvanB   (2007-11-30 11:23) [7]

Нет, в разных. Наверное стоит убрать из private в начальном классе?


 
ЮЮ ©   (2007-11-30 11:25) [8]

> Нет, в разных. Наверное стоит убрать из private в начальном
> классе?


стоит поместить хотя бы в protected.


 
Сергей М. ©   (2007-11-30 11:26) [9]


> Наверное стоит убрать из private в начальном классе?
>


Если в разных, то конечно следует перенести как минимум в protected


 
Amoeba ©   (2007-11-30 11:26) [10]


> ООП [D7, 2003]
>
> IvanB   (30.11.07 11:06)
>
> Подскажите пожалуйста.
>

Читай учебники! Иначе далеко не уедешь.
Найдешь здесь в электронном виде
http://www.podgoretsky.com/ddp.html



Страницы: 1 вся ветка

Текущий архив: 2007.12.23;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.033 c
15-1195800245
KSergey
2007-11-23 09:44
2007.12.23
Пресловутый переход на висту


2-1195824372
Student00
2007-11-23 16:26
2007.12.23
вызов процедур из модуля, delphi


3-1187120241
Anti
2007-08-14 23:37
2007.12.23
Как создать генератор


15-1195574695
TwentyThird
2007-11-20 19:04
2007.12.23
Карта звездного неба в реальном времени: созвездия, планеты...


15-1195607659
Mozart
2007-11-21 04:14
2007.12.23
Видеонаблюдение