type
People = class
public
procedure Say ();
procedure Think ();
end;
type
Man= class(People )
private
procedure Think ();
end;
type
Woman= class(People )
private
procedure Think ();
end;
procedure People.Say ();
begin
Think ();
end;
procedure People.Think ();
begin
// ничего не делать, просто заглушка
end;
procedure Man.Think ();
begin
// тут много думает мужчина
end;
procedure Woman.Think ();
begin
// тут много думает женщина
end;
Посоветуйте с ООП
Есть Класс People и два его наследника Man и Woman:
Код:
Суть в том, что у обоих наследников есть общая сложная функция Say, которая определена в классе People, которую они и наследуют.
Разница только в том, что когда вызывавется унаследовання ф-ция Say сначала должна выполниться ф-ция Think. Как сделать так, чтобы ф-ция Think вызывалась для каждого наследника своя, НО чтобы ф-ция Say была унаследована.
Код:
type
People = class
public
procedure Say ();
procedure Think (); virtual; abstract; //объявляем как виртуальную абстактную
end;
type
Man= class(People )
private
procedure Think (); override; //после этого наследники могут перезаписывать этот метод
end;
type
Woman= class(People )
private
procedure Think (); override;//после этого наследники могут перезаписывать этот метод
end;
People = class
public
procedure Say ();
procedure Think (); virtual; abstract; //объявляем как виртуальную абстактную
end;
type
Man= class(People )
private
procedure Think (); override; //после этого наследники могут перезаписывать этот метод
end;
type
Woman= class(People )
private
procedure Think (); override;//после этого наследники могут перезаписывать этот метод
end;
Спасибо. Все заработало
То есть, например,
у меня есть еще один класс
Код:
type TMyPeopleList=class
// Общие методы для обработки списка людей (мужчин и женщин)
end;
type TMyMansList=class(TMyPeopleList)
items array of Man;
// мужские методы
end;
type TMyWOMansList=class(TMyPeopleList)
items array of WoMan;
// женские методы
end;
// Общие методы для обработки списка людей (мужчин и женщин)
end;
type TMyMansList=class(TMyPeopleList)
items array of Man;
// мужские методы
end;
type TMyWOMansList=class(TMyPeopleList)
items array of WoMan;
// женские методы
end;
То есть фактически я хочу иметь два класса TMyMansList и TMyWOMansList.
У каждого из них есть свои методы мужские и женские соответсвенно.
Но есть так же у них и общие методы (например, посчитать кол-во элементов и прочее). Для использования общих методов я создал класс TMyPeopleList с общими методами и от него двух вышеупомянутых наследников.
Теперь не ясно как быть дальше:
1. Чтобы определить и описать эти самые общие методы работы со списком надо сделать в TMyPeopleList список Items. Какого типа не ясно. Если сделать его типа People, а в TMyMansList и TMyWOMansList этот список убрать, то становится весьма мутарно потом работать с этими классами (потсоянгно надо пистаь приведение типа - with (param as TMyMansList ) do begin..)
2. Если в TMyPeopleList список Items сделать типа People, а в TMyMansList, TMyWOMansList этот список переопределить, то потом все общие методы становятся неработоспособными, так как они будут работать с iTems TMyPeopleList, который не заполнен остается
Если кто-нибудь знает как выйти из этой ситуации, то просьба посоветовать как... (
Сделай Items не массивом, а классом с индексированным default-свойством. У этого класса также будет 2 наследника.
Цитата: Phodopus
Если я правильно понял что требуется..
Сделай Items не массивом, а классом с индексированным default-свойством. У этого класса также будет 2 наследника.
Сделай Items не массивом, а классом с индексированным default-свойством. У этого класса также будет 2 наследника.
А конкретнее не могли бы показать, я чтото никак не найду что это такое и с чем его едят.
Гляньте свойство .Items у, например, TListView