![]() |
|
|
#1
|
|||
|
|||
|
Доброго времени суток.
Никак не могу разобраться с классами. Читаю литературу, но не могу составить общую картину что к чему. //как создать его я понял) Код:
type NewClass = class private //переменные public //объявление каких-то функций где описывать эти функции? зачем нужен конструктор? зачем свойства(property)? Заранее спасибо. Последний раз редактировалось lmikle, 05.08.2011 в 21:53. |
|
#2
|
||||
|
||||
|
Код:
type
TMyThread = class(TThread)
private
nomer,n1,index: Integer;
text: String;
function anek: string;
protected
procedure Execute; override;
public
constructor Create;
end;функцию и процедуру описываешь ниже конструктор в данном случае нужен чтобы отработать создание |
|
#3
|
|||
|
|||
|
А можно попроще пример?)
я начинающий) этот класс, я так понимаю потомок уже? |
|
#4
|
|||
|
|||
|
а конструктор создает объект данного класса?
|
|
#5
|
|||
|
|||
|
Цитата:
|
|
#6
|
|||
|
|||
|
невыходит. может из-за версии (делфи5)?
но с функциями вроде понятно. в разделе implementation описывать.. |
|
#7
|
|||
|
|||
|
а contol+клик работает?
например у меня если по слову TForm контрол-кликнуть то откроется то место где класс TForm описан, а там от описания методов к реализации можно прыгать ctrl+shift+стрелка-вниз или стрелка-вверх |
|
#8
|
|||
|
|||
|
объясните пожалуйста
как используется конструктор? |
|
#9
|
||||
|
||||
|
В общем случае, конструктор даёт команду Дельфи(компилятору) выделить память под класс. В расширенном, здесь задаётся инициализация всего и вся, что будет использоваться в классе.
|
|
#10
|
|||
|
|||
|
как я понял, с помощью конструктора память выделяется под экземпляр класса(объект) это неправильно?
и что значит "десь задаётся инициализация всего и вся, что будет использоваться в классе" ведь например переменную можно объявить без использования конструктора..?? не шарю ![]() |
|
#11
|
|||
|
|||
|
правильно, ex - объект, tbitmap - класс
var ex: tbitmap; begin ex = tbitmap.create; .. ex.free; end; в конструкторе принято устанавливать значения по умолчанию для переменных экземпляра класса, или если есть обязательные то передавать прямо в конструктор. смысл всего этого чтобы спрятать внутренние переменные объекта от внешнего доступа в секцию private. Что по-идее ведет к более чистому и гибкому коду |
|
#12
|
|||
|
|||
|
напишите пожалуйста самый элементарный пример с классом
![]() |
|
#13
|
||||
|
||||
|
Такой подойдёт?
Код:
unit OrderClasses;
interface
uses
DetailClasses,
Contnrs,Controls;
type
{###########################################################}
{êîëëåêöèÿ äåòàëåé â çàêàçå (íåâèçóàëüíûõ)}
ODetailList = class(TObjectList)
private
pclParent:TWinControl;
protected
function GetItem(Index: Integer): ODetailItem;
procedure SetItem(Index: Integer; const Value: ODetailItem);
public
constructor Create(clParent:TWinControl);
function Join(LineItem:ODetailItem): integer;
procedure Remove(clIndex:integer);
property Items[Index: Integer]: ODetailItem read GetItem write SetItem; default;
function IndexOfDetail(aDetailId: Integer): Integer;
end;
implementation
{ OGroupCollection }
constructor ODetailList.Create(clParent: TWinControl);
begin
inherited;
pclParent:=clParent;
end;
function ODetailList.GetItem(Index: Integer): ODetailItem;
begin
result:=inherited items[Index] as ODetailItem;
end;
procedure ODetailList.SetItem(Index: Integer; const Value: ODetailItem);
begin
inherited items[Index]:=Value;
end;
function ODetailList.Join(LineItem: ODetailItem): integer;
begin
result:=inherited add(LineItem);
end;
procedure ODetailList.Remove(clIndex: integer);
begin
inherited Delete(clIndex);
end;
function ODetailList.IndexOfDetail(aDetailId: Integer): Integer;
var cItem:integer;
begin
for cItem:=0 to Count-1 do begin
if Items[cItem].DetailId=aDetailId then
begin
Result:=cItem; exit;
end;
end;
Result:=-1;
end;
end. |
|
#14
|
|||
|
|||
|
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; test = class private a: integer; public function x(y: integer): integer; end; var Form1: TForm1; implementation constructor test.create; begin a:=0; end; function test.x(y: integer):integer; begin x:=a+y; end; {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin label1.Caption := inttostr(function test.x(5)); end; end. |
|
#15
|
|||
|
|||
|
посмотрите что не так((
|