On Mon, 23 Sep 2013, Zaher Dirkey wrote:

Hi,
I have objects (classes) derived from base one

TBaseObject = class(TObject)
public
   constructor Create; virtual;
   function Clone:TBaseObject;
end;

TMyObject = class(TBaseObject)
   my fields here
end;

o1, o2:TmyObject;
o1  already created;

o2 := o1.Clone;

in Clone i want to create new object from TmyObject but in base object in Clone 
method,like this

TBaseObject.Clone:TBaseObject;
begin
  Result:=TBaseObject(ClassType).Create;//I know it is wrong here
end;

This is wrong. You are typecasting a class reference to an object instance.

The following works:

{$mode objfpc}

Type
  TBaseObject = class(TObject)
  public
  constructor Create; virtual;
  function Clone:TBaseObject;
  end;
  TBaseObjectClass = Class of TBaseObject;

constructor TBaseObject.Create;

begin
end;

Function TBaseObject.Clone:TBaseObject;

Var
  C : TBaseObjectClass;
begin
  C:=TBaseObjectClass(ClassType);
  Result:=C.Create;
end;

Type
  TMyObject = class(TBaseObject)
  //   my fields here
  end;

Var
o1, o2:TmyObject;

begin
  o1:=TMyObject.Create;
  o2 := o1.Clone as TmyObject;
end.

Michael.
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to