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

Вниз

доступ к структуре из разных классов?   Найти похожие ветки 

 
User   (2003-05-14 16:09) [0]

Привет всем!

пишу свою библиотеку классов, проблема, есть некая структура и функция схожая для всех классов, как можно красиво выделить это все в отдельный класс так чтоб другие могли к нему достучатся, вернее где и как объявить и создать этот самый класс структуры, конечно можно было бы все впихать в какойнибудь родительский класс но тогда будет ненужное дублирование данных?

Спасибо.


 
Digitman ©   (2003-05-14 16:15) [1]

в раздел interface помести декларацию стуктуры и переменную ее типа, а так же ф-цию, которая будет работать с этой переменной

во всех модулях, в которых декларированы/реализованы заинтересованные классы, в uses укажи этот модуль

всех делов !


 
Palladin ©   (2003-05-14 16:17) [2]


> конечно можно было бы все впихать в какойнибудь родительский
> класс но тогда будет ненужное дублирование данных

обоснуй


 
User   (2003-05-14 16:27) [3]


type
TParent = class
x0,y0 : Integer;
public
procedure Proc(x0,y0:Integer);
end;

type
TChild1 = class(TParent)
...
constructor Create;
...
end;

type
TChild2 = class(TParent)
...
constructor Create;
...
end;

...

constructor TChild1.Create;
begin
x0:=10;
y0:=10;
end;

constructor TChild2.Create;
begin
x0:=10;
y0:=10;
end;
...


тем не мение процедуру можно было бы использовать


 
User   (2003-05-14 16:29) [4]

>Digitman
там не структура там класс, объявить та я его объявлю а где создать ? куда Creat ставить?


 
Digitman ©   (2003-05-14 16:30) [5]


> User


и в результате у тебя какждый экземпляр-наследник класса TParent будет работать со своей областью памяти, распределенной под поля класса X0, Y0


 
User   (2003-05-14 16:38) [6]

ну так и я отом же, это не вариант, объясни как достучатся из одного класса в другой
type
TStruct = class
x0,y0 : Integer;
public
procedure Proc(x0,y0:Integer);
end;

var
Struct : TStruct;

type
TmyClass = class
...
constructor Create;
...
end;

...

constructor TmyClass.Create;
begin
Struct.Proc(1,5); ??????? где его создать ????????
end;
...


 
Digitman ©   (2003-05-14 16:45) [7]

имеешь ввиду - где конструктор экз-ра TStruct вызвать ?
да где угодно !! хоть здесь же, в этом же модуле, в разделе initialization


 
Serginio   (2003-05-14 16:50) [8]

Используй Интерфейсы
Например
Istruct=Interfase(IUnknown)
procedure Proc(x0,y0:Integer);stdcall;
end;
Если все объекты будут поддерживать данный интерфейс
TmyClass = class(TObject,Interfase)
...
constructor Create;
procedure Proc(x0,y0:Integer);stdcall;

...
end;
то можно вызвать
и вызываешь (myClass as Istruct).Proc(x0,y0:Integer)
или Istruct(myClass).Proc(x0,y0:Integer)




 
Serginio   (2003-05-14 16:52) [9]

Ошибочка TmyClass = class(TObject,Istruct)
Данный способ очень широко используется в Net


 
User   (2003-05-14 17:04) [10]

>Digitman

неужто так сложно пример черкнуть?
если бы все понимал так и не спрашивал наверно?


 
Digitman ©   (2003-05-14 17:08) [11]

initialization
Struct := TStruct.Create;

finalization
Struct.Free;


 
Serginio   (2003-05-14 17:11) [12]

Создаешь в
Var Parent:TParent;
----
initialization
Parent:=TParent;
end;
И во всех объектах ссылаешься на Parent


 
Тих   (2003-05-14 20:39) [13]

Вроде если я все правильно понимаю, человек хочет создать синглтон, т.е. экземпляр некоего класса, существующий всегда в единственном числе, и использовать указатель на оный как в родительском классе, так и его потомках? Верно, USER?


 
User   (2003-05-15 11:01) [14]

Тих>
да, это должен быть некий класс содержащий некую информацию о структуре проекта и некие функции, при этом это все должно быть доступно другим классам, но я вроде разобрался с этим, правда появился ещё вопрос:

в функции класс-структура (синглтон) ведется обработка декскриптора формы откуда будут создаватся классы (структуры, родители, потомки), но в библиотеке понятное дело этого дескриптора ещё нет, он появится потом, как можно реализовать механизм последующего доступа?



 
evvcom ©   (2003-05-15 11:13) [15]


> в функции класс-структура (синглтон) ведется обработка декскриптора
> формы откуда будут создаватся классы (структуры, родители,
> потомки), но в библиотеке понятное дело этого дескриптора
> ещё нет, он появится потом, как можно реализовать механизм
> последующего доступа?

Все так сложно написано. Если я правильно понял, то тебе поможет идея, которая реализована при создании форм в Application. Обрати внимание на Application.CreateForm



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

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

Наверх




Память: 0.5 MB
Время: 0.012 c
9-83312
GameBoy
2002-12-15 22:09
2003.05.26
Взрывы и дымы


1-83527
$HiC0
2003-05-13 15:15
2003.05.26
Рисование прямо на Bitmapе


14-83679
-=DeMoH=-
2003-05-04 12:56
2003.05.26
КАК УЗНАТЬ, ЧТО НУЖНО ПРОГЕ?


14-83680
dbDev
2003-05-05 06:27
2003.05.26
Ресурсы.


4-83817
Kron
2003-03-31 12:31
2003.05.26
Как обработать событье максимизации формы?