Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.013 c
6-1142584643
MrShadow
2006-03-17 11:37
2006.07.30
Помогите разобраться!


2-1152184295
Тимофей Юрьевич
2006-07-06 15:11
2006.07.30
не стандартная форма


2-1152351613
Dyakon_Frost
2006-07-08 13:40
2006.07.30
Обработка html - страницы


2-1152693377
hgd
2006-07-12 12:36
2006.07.30
Polygon


15-1151559934
vajo
2006-06-29 09:45
2006.07.30
Почему-то вырубается компьютер





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский