[fpc-pascal] constructor "guarantee" and other behavioural stuff

Pierce Ng pierce at samadhiweb.com
Thu Jan 21 13:23:22 CET 2016


On Wed, Jan 20, 2016 at 11:23:27AM +0100, Sven Barth wrote:
> Note: "overload" is only necessary if you have multiple methods of the same
> name with different parameters. What you probably meant is "override", but
> even that is only necessary if a method in the parent was declared as
> "virtual". For constructors this isn't normally necessary, except if you
> want to use class variables to instantiate the class. E.g.
> 
> === code begin ===
> 
> type
>   TNonceClass = class of TNonce;
> 
> var
>   c: TNonceClass;
>   o: TNonce;
> begin
>   c := TSomeSubNonce;
>   o := c.Create;
> end.
> 
> === code end ===
> 
> In this example if the constructor in TNonce isn't declared as virtual (and
> the on in TSomeSubNonce not as override) the TNonce.Create will be called,
> otherwise TSomeSubNonce will be called.

Thanks Sven. Haven't had a need to do stuff like this with Object Pascal for
now, but for past several years I have been programming in Smalltalk so this
looks familiar. :-)

> The memory area of a class instance is by default always initialized with
> 0s. So in this case "pn" will contain zeroes and "filled" will be "false".
> Sidenote: Strings will be '', objects, interfaces and dynamic arrays will
> be Nil.
> 
> Classes are *always* allocated on the heap. If you want to control whether
> something is allocated on the stack or the heap you need to use records or
> the Turbo Pascal-style objects.

Got it.

Cheers.

Pierce


More information about the fpc-pascal mailing list