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

Вниз

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

 
parovoZZ ©   (2006-07-08 21:47) [0]

Здарова

Не могу никак въехать, как выделить память для экземпляра класса. Класс вида

type
 TADOConnection = class
   procedure SetConnectionString (const Value : ShortString);
   procedure SetConnected (const Value : boolean);
   function GetConnected : boolean;
   function GetErrors : Errors;
 public
   constructor Create;
   destructor Destroy;
 published
   property ConnectionString : ShortString write SetConnectionString;
   property Connected : boolean read GetConnected write SetConnected;
   property Errors : Errors read GetErrors;
 end;


Что писать в constructor и destructor? И вообще, нужны ли они в данном случае?


 
PSPF2003 ©   (2006-07-08 21:53) [1]

По моему здесь они не нужны.


 
jack128 ©   (2006-07-08 21:54) [2]

parovoZZ ©   (08.07.06 21:47)
Что писать в constructor и destructor? И вообще, нужны ли они в данном случае?

Нет, если те не нужно ничего особенно при созданнии/уничтожении объекта делать.  Пользуйся конструктором, кторый те достался по наследству от TObject.


 
PSPF2003 ©   (2006-07-08 21:57) [3]

Единственное, если ты хочешь задать какое-то значение по умолчанию. Например
ConnectionString := ‘Привет Вася’;


 
parovoZZ ©   (2006-07-09 00:17) [4]

А почему в мой класс лезут всякие процедуры типа AfterConstruction, BeforeConctruction и т.д. Как от них избавится?

> Пользуйся конструктором, кторый те достался по наследству
> от TObject.

TADOConnection = class (TObject)
так?

и дальше по тексту

Constructor ......
begin
inherited Create;
end;

Так ?

Меня напрягает, что экземпляр моего класса nil.


 
Loginov Dmitry ©   (2006-07-09 00:21) [5]

> Как от них избавится?


А зачем?


> Constructor ......
> begin
> inherited Create;
> end;


А зачем?


 
DrPass ©   (2006-07-09 01:21) [6]


> Меня напрягает, что экземпляр моего класса nil

Где? %-)


 
parovoZZ ©   (2006-07-09 01:50) [7]


> Где? %-)

В RunTime


 
Германн ©   (2006-07-09 02:32) [8]


> Меня напрягает, что ...

А этот свой класс ты писАл сам? Или пользовал Copy+Paste?


 
DrPass ©   (2006-07-09 02:43) [9]


> В RunTime

Он и будет равен nil до тех пор, пока ты не создашь экземпляр MyClass:= TMyClass.Create(...)


 
parovoZZ ©   (2006-07-09 02:54) [10]


> > Меня напрягает, что ...А этот свой класс ты писАл сам?
>  Или пользовал Copy+Paste?


Компонент ADOConnection у меня находится в dll, а этот класс всего лишь "обёртка".


> > Как от них избавится?А зачем?


Да ну их, мешаютЪ мне.


> DrPass ©   (09.07.06 02:43) [9]
> > В RunTime Он и будет равен nil до тех пор, пока ты не создашь
> экземпляр MyClass:= TMyClass.Create(...)

А как убить?


 
Loginov Dmitry ©   (2006-07-09 10:08) [11]

> Компонент ADOConnection у меня находится в dll, а этот класс
> всего лишь "обёртка".


В "обертке" не можнет быть конструкторов или деструкторов. Все вызываемые методы должны быть абстрактными. Все объекты должны создаваться и унижтожаться в DLL. Только так можно работать с классом, хранимым в DLL (хотя есть еще интерфейсы и пакеты).


 
XbI   (2006-07-09 10:55) [12]


> А как убить?

MyClass.Free;


 
Ketmar ©   (2006-07-09 11:46) [13]

хм... а может, сначала литературку почитать по ООП? глядишь, куча вопросов исчезнет...


 
parovoZZ ©   (2006-07-09 15:20) [14]

Если б была литературка, почитал бы. А та, что есть, там всё поверхностно. Изучать приходится по исходникам.


 
parovoZZ ©   (2006-07-09 15:22) [15]


> В "обертке" не можнет быть конструкторов или деструкторов.
>  Все вызываемые методы должны быть абстрактными. Все объекты
> должны создаваться и унижтожаться в DLL. Только так можно
> работать с классом, хранимым в DLL (хотя есть еще интерфейсы
> и пакеты).

Штурмуйте

unit ADO;

interface

type
TErrors = packed record
 NativeError : integer;
 Description : ShortString;
end;

type
 Errors   = TErrors;

type
 TADOConnection = class
 private
   procedure SetConnectionString (const Value : ShortString);
   procedure SetConnected (const Value : boolean);
   function GetConnected : boolean;
   function GetErrors : Errors;
 published
   property ConnectionString : ShortString write SetConnectionString;
   property Connected : boolean read GetConnected write SetConnected;
   property Errors : Errors read GetErrors;
 end;

TADOCommand = class
private
  procedure SetCommandText (const Value : ShortString);
published
  property CommandText : ShortString write SetCommandText;
  procedure Execute;
end;

TADODataSet = class
private
  procedure SetCommandText (const Value : ShortString);
  function GetRecordCount : integer;
published
  property CommandText : ShortString write SetCommandText;
  property RecordCount : integer read GetRecordCount;
  procedure Open;
  procedure Close;
  procedure ParamByName (const Param : ShortString; Value : Variant);
  procedure Next;
  function FieldByNameAsString (const FieldByName : ShortString) : ShortString;
  function FieldByNameAsInteger (const FieldByName : ShortString) : integer;
end;

procedure Init; stdcall;
procedure UnInit; stdcall;
procedure SetConnectionStringd (aString : ShortString); stdcall;
function GetConnectedd : boolean; stdcall;
procedure SetConnectedd (Connection : boolean); stdcall;
procedure SetCmdCommandText (Text : ShortString); stdcall;
procedure CmdExecute; stdcall;
procedure SetDSCommandText (Text : ShortString); stdcall;
procedure DSOpen; stdcall;
procedure DSClose; stdcall;
procedure DSParamByName (const Param : ShortString; Value : Variant); stdcall;
function DSFieldByNames (const FieldByName : ShortString) : ShortString; stdcall;
function DSFieldByNamei (const FieldByName : ShortString) : integer; stdcall;
function DSRecordCount : integer; stdcall;
procedure DSNext; stdcall;
function GetErrorsd : Errors; stdcall;

const
ADOdll  = "bin/MySQL_driver";

implementation

procedure TADOConnection.SetConnectionString (const Value : ShortString);
begin
SetConnectionStringd (Value);
end;

procedure TADOConnection.SetConnected (const Value : boolean);
begin
SetConnectedd (Value);
end;

function TADOConnection.GetConnected : boolean;
begin
result := GetConnectedd;
end;

function TADOConnection.GetErrors : Errors;
begin
result := GetErrorsd;
end;

procedure TADOCommand.SetCommandText (const Value : ShortString);
begin
SetCmdCommandText (Value);
end;

procedure TADOCommand.Execute;
begin
CmdExecute;
end;

procedure TADODataSet.SetCommandText (const Value : ShortString);
begin
SetDSCommandText (Value);
end;

procedure TADODataSet.Open;
begin
DSOpen;
end;

procedure TADODataSet.Close;
begin
DSClose;
end;

procedure TADODataSet.ParamByName(const Param : ShortString; Value : Variant);
begin
DSParamByName (Param, Value);
end;

function TADODataSet.FieldByNameAsString (const FieldByName : ShortString) : ShortString;
begin
result := DSFieldByNames (FieldByName);
end;

function TADODataSet.FieldByNameAsInteger (const FieldByName : ShortString) : integer;
begin
result := DSFieldByNamei (FieldByName);
end;

function TADOdataset.GetRecordCount : integer;
begin
result := DSRecordCount;
end;

procedure TADODataSet.Next;
begin
DSNext;
end;

procedure Init; external ADOdll; stdcall;
procedure UnInit; external ADOdll; stdcall;
procedure SetConnectionStringd (aString : ShortString); external ADOdll name "SetConnectionString"; stdcall;
function GetConnectedd : boolean; external ADOdll name "GetConnected"; stdcall;
procedure SetConnectedd (Connection : boolean); external ADOdll name "SetConnected"; stdcall;
procedure SetCmdCommandText (Text : ShortString); external ADOdll name "SetCmdCommandText"; stdcall;
procedure CmdExecute; external Adodll name "CmdExecute"; stdcall;
procedure SetDSCommandText (Text : ShortString); external ADOdll name "SetDSCommandText"; stdcall;
procedure DSOpen; external ADOdll name "DSOpen"; stdcall;
procedure DSClose; external ADOdll name "DSClose"; stdcall;
procedure DSParamByName (const Param : ShortString; Value : Variant); external ADOdll name "DSParamByName"; stdcall;
function DSFieldByNames (const FieldByName : ShortString) : ShortString; external ADOdll name "DSFieldByNames"; stdcall;
function DSFieldByNamei (const FieldByName : ShortString) : integer; external ADOdll name "DSFieldByNamei"; stdcall;
function DSRecordCount : integer; external ADOdll name "DSRecordCount"; stdcall;
procedure DSNext; external ADOdll name "DSNext"; stdcall;
function GetErrorsd : Errors; external ADOdll name "GetErrors"; stdcall;

end.


 
tesseract ©   (2006-07-09 16:35) [16]

> Все объекты должны создаваться и унижтожаться в DLL.


В пределах одной функции. Про объекты в DDL столько копий поналомано ......


> В "обертке" не можнет быть конструкторов или деструкторов.

С чего бы это? Могут быть.  


> Все вызываемые методы должны быть абстрактными.

Не все, только те которые перекрываются.

Например у меня абстрактный метод Read класса потока чтения с порта.
Но метод StartThread одинаков для всех потомков - зачем его перекрывать.

Пересмотрите свое мнение об ООП ИМХО.


 
Loginov Dmitry ©   (2006-07-09 22:50) [17]

> tesseract ©   (09.07.06 16:35) [16]


Все это на днях прочел в какой-то умной буржуйской книжке по Delphi 5 :)


 
tesseract ©   (2006-07-09 23:15) [18]

> [17] Loginov Dmitry ©   (09.07.06 22:50)


Не читай книги "стань Билло Гейтсом за 24 часа"
Лучше читать Бакнелла.


 
Loginov Dmitry ©   (2006-07-09 23:41) [19]

> Лучше читать Бакнелла.


А это что за крендель?

Я вообще-то предпочитаю Тейксейра & Пачеко...


 
Джо ©   (2006-07-09 23:43) [20]

> [19] Loginov Dmitry ©   (09.07.06 23:41)
> > Лучше читать Бакнелла.
>
>
> А это что за крендель?

"Алгоритмы и структуры данных в Delphi". Весьма неплохая книга.


 
tesseract ©   (2006-07-09 23:44) [21]

Джулиан Бакнелл
"Фундаментальные алгоритмы и структуры данных на Delphi"

У меня от чтения почти развалилась :-)

Must Read начинающим и студентам.


 
tesseract ©   (2006-07-09 23:45) [22]

> "Алгоритмы и структуры данных в Delphi". Весьма неплохая
> книга.


Лучшая по Delphi по мнению забугорных Delphi-стов. :-)


 
Loginov Dmitry ©   (2006-07-09 23:47) [23]

> "Алгоритмы и структуры данных в Delphi". Весьма неплохая
> книга.


А млин, я ж ее не давече, чем пару месяцев назад прочел...

Склероз, прямо :)


 
Desdechado ©   (2006-07-10 11:48) [24]

Ты что, пытаешься написать свое ADO ?


 
Ega23 ©   (2006-07-10 12:07) [25]


> type
>  TADOConnection = class


Такой класс уже есть. Я бы тебе порекомендовал его как-нибудь иначе назвать.


 
parovoZZ ©   (2006-07-10 20:26) [26]


> Ты что, пытаешься написать свое ADO ?

Нет, ADO лежит в dll.
> > type>  TADOConnection = classТакой класс уже есть. Я бы
> тебе порекомендовал его как-нибудь иначе назвать.

И ЧТО?


 
Desdechado ©   (2006-07-11 11:14) [27]

Да то, что при работе ты явно запутаешься (если, конечноЮ компилятор пропустит), с каким из адо ты будешь работать.
Лишние колючки для своей з...ы выращивать - странное желание.



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

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

Наверх




Память: 0.54 MB
Время: 0.041 c
2-1152519393
fast2
2006-07-10 12:16
2006.07.30
Как узнать, что строка состоит из сивмолов верхнего регистра?


3-1148743113
Sword
2006-05-27 19:18
2006.07.30
Fast report и два запроса


15-1151394901
MsGuns
2006-06-27 11:55
2006.07.30
Слава сб.Украины по футболу !


2-1152621860
Вован Сем
2006-07-11 16:44
2006.07.30
Провертьте мое задание


15-1151425083
Джо
2006-06-27 20:18
2006.07.30
Этот сайт в "облегченной" версии для моб. устройств