Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ООП [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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо