Форум: "Начинающим";
Текущий архив: 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