D
dadabox
Unregistered / Unconfirmed
GUEST, unregistred user!
各路大俠﹐小弟遇到一個問題。客戶來的訂單一次有多筆﹐而一筆訂單中的SIZE也有多筆
不同。于是小弟想到寫一個類﹐但考慮到訂單與SIZE都有一樣的Add和Delete動作﹐所以
就想寫一個基類﹐在基類中再寫兩個子類作為客戶和SIZE。但基類中增加的那個類型要寫定﹐
而我有兩個類型﹐并且要分開。于是我想到用指針來處理。不知這樣做對不對﹐會不會有什
么后遺症﹖不然﹐我還是老老實實分開寫。我照下面的例子已經實現這個功能﹐但總覺得
在程序中調用時要很小心﹐不然就會出問題。另外﹐在訂單類中我放了一個SIZE類﹐而SIZE
每筆訂單也有不同的數據﹐但我在程序中訪問SIZE時便出錯了。我想是因為我沒有在訂單
類中建立SIZE的緣故﹐但我是用的指針來管理﹐就不知道應該怎樣建這個SIZE類﹖哪位大俠
幫我看看下面的代碼﹐找出其中的問題﹐好嗎﹖謝謝﹗
type TSize=record
; Size:string[8];
; Qry:string[9];
end;
PSize=^TSize;
ObjList=Pointer;
TBaseList=class
; private
; ; DataList:TList;
; ; function GetCount: integer;
; ; function GetItems(ItemIndex: integer): ObjList;
; ; procedure SetItems(ItemIndex: integer; const Value: ObjList);
; public
; ; property Items[ItemIndex:integer]:ObjList read GetItems write SetItems;
; ; property Count:integer read GetCount;
; ; constructor Create;
; ; destructor Destroy; override;
; ; procedure Add(Value:ObjList);virtual;
; ; procedure Delete(ItemIndex:integer);virtual;
; ; procedure Clear;
end;
Type TSizeList=class(TBaseList)
; private
; ; ObjListSize;
; public
; ; destructor Destroy; override;
; ; procedure Add(Value:ObjList);override;
; ; procedure Delete(ItemIndex:integer);override;
end;
type
; TCustomerOrder=record
; ; ;Customer_No:string[6];
; ; ;Customer_Order_No:string[16];
; ; ;Customer_Request_Date:string[8];
; ; ;Article_No:string[8];
; ; ;Country:string[3];
; ; ;Status_Date:string[8];
; ; ;Size:TSizeList; ;//這兒我加上了前面的TSizeList類
end;
PCustomerOrder=^TCustomerOrder;
Type TOrdDataBase=class(TBaseList)
; private
; ; ObjListCustomerOrder;
; public
; ; destructor Destroy; override;
; ; procedure Add(Value:ObjList);override;
; ; procedure Delete(ItemIndex:integer);override;
end;
implementation
{ TBaseList }
procedure TBaseList.Add(Value: ObjList);
begin
; DataList.Add(Value);
end;
procedure TBaseList.Clear;
var
; i:integer;
begin
; for i := Count - 1 downto 0 do
; begin
; ; ;Delete(i);
; end;
end;
constructor TBaseList.Create;
begin
; DataList:=TList.Create;
end;
procedure TBaseList.Delete(ItemIndex: integer);
begin
; DataList.Delete(ItemIndex);
end;
destructor TBaseList.Destroy;
begin
; Clear;
; DataList.Free;
; inherited;
end;
function TBaseList.GetCount: integer;
begin
; Result := DataList.Count;
end;
function TBaseList.GetItems(ItemIndex: integer): ObjList;
begin
; Result:=DataList.Items[ItemIndex];
end;
procedure TBaseList.SetItems(ItemIndex: integer; const Value: ObjList);
var TheList:ObjList;
begin
; TheList:=DataList.Items[ItemIndex];
end;
{ TSizeList }
procedure TSizeList.Add(Value: ObjList);
begin
; inherited;
end;
procedure TSizeList.Delete(ItemIndex: integer);
begin
; inherited;
end;
destructor TSizeList.Destroy;
begin
; inherited;
end;
{ TCustomerOrder }
procedure TCustomerOrder.Add(Value: ObjList);
begin
; inherited;
end;
procedure TCustomerOrder.Delete(ItemIndex: integer);
begin
; inherited;
end;
destructor TCustomerOrder.Destroy;
begin
; inherited;
end;
不同。于是小弟想到寫一個類﹐但考慮到訂單與SIZE都有一樣的Add和Delete動作﹐所以
就想寫一個基類﹐在基類中再寫兩個子類作為客戶和SIZE。但基類中增加的那個類型要寫定﹐
而我有兩個類型﹐并且要分開。于是我想到用指針來處理。不知這樣做對不對﹐會不會有什
么后遺症﹖不然﹐我還是老老實實分開寫。我照下面的例子已經實現這個功能﹐但總覺得
在程序中調用時要很小心﹐不然就會出問題。另外﹐在訂單類中我放了一個SIZE類﹐而SIZE
每筆訂單也有不同的數據﹐但我在程序中訪問SIZE時便出錯了。我想是因為我沒有在訂單
類中建立SIZE的緣故﹐但我是用的指針來管理﹐就不知道應該怎樣建這個SIZE類﹖哪位大俠
幫我看看下面的代碼﹐找出其中的問題﹐好嗎﹖謝謝﹗
type TSize=record
; Size:string[8];
; Qry:string[9];
end;
PSize=^TSize;
ObjList=Pointer;
TBaseList=class
; private
; ; DataList:TList;
; ; function GetCount: integer;
; ; function GetItems(ItemIndex: integer): ObjList;
; ; procedure SetItems(ItemIndex: integer; const Value: ObjList);
; public
; ; property Items[ItemIndex:integer]:ObjList read GetItems write SetItems;
; ; property Count:integer read GetCount;
; ; constructor Create;
; ; destructor Destroy; override;
; ; procedure Add(Value:ObjList);virtual;
; ; procedure Delete(ItemIndex:integer);virtual;
; ; procedure Clear;
end;
Type TSizeList=class(TBaseList)
; private
; ; ObjListSize;
; public
; ; destructor Destroy; override;
; ; procedure Add(Value:ObjList);override;
; ; procedure Delete(ItemIndex:integer);override;
end;
type
; TCustomerOrder=record
; ; ;Customer_No:string[6];
; ; ;Customer_Order_No:string[16];
; ; ;Customer_Request_Date:string[8];
; ; ;Article_No:string[8];
; ; ;Country:string[3];
; ; ;Status_Date:string[8];
; ; ;Size:TSizeList; ;//這兒我加上了前面的TSizeList類
end;
PCustomerOrder=^TCustomerOrder;
Type TOrdDataBase=class(TBaseList)
; private
; ; ObjListCustomerOrder;
; public
; ; destructor Destroy; override;
; ; procedure Add(Value:ObjList);override;
; ; procedure Delete(ItemIndex:integer);override;
end;
implementation
{ TBaseList }
procedure TBaseList.Add(Value: ObjList);
begin
; DataList.Add(Value);
end;
procedure TBaseList.Clear;
var
; i:integer;
begin
; for i := Count - 1 downto 0 do
; begin
; ; ;Delete(i);
; end;
end;
constructor TBaseList.Create;
begin
; DataList:=TList.Create;
end;
procedure TBaseList.Delete(ItemIndex: integer);
begin
; DataList.Delete(ItemIndex);
end;
destructor TBaseList.Destroy;
begin
; Clear;
; DataList.Free;
; inherited;
end;
function TBaseList.GetCount: integer;
begin
; Result := DataList.Count;
end;
function TBaseList.GetItems(ItemIndex: integer): ObjList;
begin
; Result:=DataList.Items[ItemIndex];
end;
procedure TBaseList.SetItems(ItemIndex: integer; const Value: ObjList);
var TheList:ObjList;
begin
; TheList:=DataList.Items[ItemIndex];
end;
{ TSizeList }
procedure TSizeList.Add(Value: ObjList);
begin
; inherited;
end;
procedure TSizeList.Delete(ItemIndex: integer);
begin
; inherited;
end;
destructor TSizeList.Destroy;
begin
; inherited;
end;
{ TCustomerOrder }
procedure TCustomerOrder.Add(Value: ObjList);
begin
; inherited;
end;
procedure TCustomerOrder.Delete(ItemIndex: integer);
begin
; inherited;
end;
destructor TCustomerOrder.Destroy;
begin
; inherited;
end;