[fpc-pascal] WHY compiler should be public?
Michael Van Canneyt
michael at freepascal.org
Sun Oct 27 12:17:09 CET 2013
On Sun, 27 Oct 2013, Xiangrong Fang wrote:
> 2013/10/25 Michael Van Canneyt <michael at freepascal.org>
> Why not simply make it a procedure that is called by ver-2 and ver-3.
>
> If it cannot be called directly from external code, and will called only from inside a visible consructor, there is simply no reason to make this procedure a constructor. A simple procedure will do.
>
>
> Because I don't know how to make it non-constructor. See the following code:
>
> 1 unit wtree;
> 2 {$mode objfpc}{$H+}
> 3 interface
> 4 uses tree;
> 5 type
> 6 TQWordTree = specialize TTree<QWord>;
> 7 TWTree = class(TQWordTree)
> 8 private
> 9 FModel: string;
> 10 public
> 11 property Model: string read FModel;
> 12 constructor Create(AData: QWord; AParent: TWTree; AModel: string);
> 13 constructor Create(HeadNode, TailNode: QWord);
> 14 end;
> 15 implementation
> 16
> 17 constructor TWTree.Create(AData: QWord; AParent: TWTree; AModel: string);
> 18 begin
> 19 inherited Create(AData, AParent);
> 20 FModel := AModel;
> 21 end;
> 22
> 23 constructor TWTree.Create(HeadNode, TailNode: QWord);
> 24 begin
> 25 inherited Create(0, nil);
> 26 Data := HeadNode;
> 27 with TWTree do Create(TailNode, Create(HeadNode, Self, 'h'), 't');
> 28 FModel := 'R';
> 29 end;
> 30
> 31 end.
>
> Please tell me how to deal with line 27, which called the should-be-private constructor.
Ah. The 'private' constructor is called FROM ANOTHER INSTANCE. You didn't say that.
That currently can't be done.
Michael.
>
> BTW, this code uses TTree class, which is here:
>
> https://github.com/xrfang/fpcollection/blob/master/src/units/tree.pas
>
> Also,
> I don't understand why this does not work:
>
> f := TFileStream.Create;
>
> I know that TFileStream's Create require a file name parameter, but as TFileStream is inherited from TObject, which has a Create without parameter. This is why I feel that it is possible to HIDE a public
> constructor from ancestor.
I think this is a bug :)
Michael.
More information about the fpc-pascal
mailing list