Polymorphism question

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Polymorphism question

Darius Blaszyk
(I sent this mail yesterday but somehow it didn't get trough, therefore a
new try)

I would like to declare a polymorph class. The class has several
properties and it's the read and write specifiers that I want to be
virtual abstract. So derived classes override the read and write
specifiers. The problem however is that I get an EAbstractError. The
property is still considered to be abstract according to the compiler. So
what did I wrong? I have added an example below.
Is it perhaps not allowed to use this construct? What would then be the
best way?
Darius

<<example>>

unit MyTest;

{$mode objfpc}{$H+}

interface

uses
  Classes, ComCtrls, SysUtils;

type
  TCustomClass = class
  private
    //virtual mehods
    function GetMyProperty: string; virtual; abstract;
    procedure SetMyProperty(Value: string); virtual; abstract;
  published

    property MyProperty: string Read GetMyProperty Write SetMyProperty;
  end;

  TMyClass = class(TCustomClass)
  private
    FMyProperty: string;

    function GetMyProperty: string; overload;
    procedure SetMyProperty(Value: string); overload;
  published
    property MyProperty;
  end;

implementation

function TMyClass .GetMyProperty: string;
begin
  Result := FMyProperty;
end;

procedure TMyClass .SetMyProperty(Value: string);
begin
  if Value = FMyProperty then
    exit;

  FMyProperty := Value;
end;
end.



_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: Polymorphism question

Tony Pelton
i'm new so grain of salt ...

On 3/3/06, [hidden email] <[hidden email]> wrote:
>
>     function GetMyProperty: string; overload;
>     procedure SetMyProperty(Value: string); overload;

should these be 'override' rather than 'overload' ?

--
X-SA user ? 0.4 is out !
http://x-plane.dsrts.com
http://games.groups.yahoo.com/group/x-plane-foo/
_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: Polymorphism question

Rodrigo Palhano
In reply to this post by Darius Blaszyk
On Fri, 03 Mar 2006 04:52:36 -0300, <[hidden email]> wrote:

> (I sent this mail yesterday but somehow it didn't get trough, therefore a
> new try)
>
> I would like to declare a polymorph class. The class has several
> properties and it's the read and write specifiers that I want to be
> virtual abstract. So derived classes override the read and write
> specifiers. The problem however is that I get an EAbstractError. The
> property is still considered to be abstract according to the compiler. So
> what did I wrong? I have added an example below.
> Is it perhaps not allowed to use this construct? What would then be the
> best way?
> Darius
>
> <<example>>
>
> unit MyTest;
>
> {$mode objfpc}{$H+}
>
> interface
>
> uses
>   Classes, ComCtrls, SysUtils;
>
> type
>   TCustomClass = class
>   private
>     //virtual mehods
>     function GetMyProperty: string; virtual; abstract;
>     procedure SetMyProperty(Value: string); virtual; abstract;
>   published
>
>     property MyProperty: string Read GetMyProperty Write SetMyProperty;
>   end;
>
>   TMyClass = class(TCustomClass)
>   private
>     FMyProperty: string;
>
>     function GetMyProperty: string; overload;
>     procedure SetMyProperty(Value: string); overload;
>   published
>     property MyProperty;
>   end;
>
> implementation
>
> function TMyClass .GetMyProperty: string;
> begin
>   Result := FMyProperty;
> end;
>
> procedure TMyClass .SetMyProperty(Value: string);
> begin
>   if Value = FMyProperty then
>     exit;
>
>   FMyProperty := Value;
> end;
> end.
>
>
>
> _______________________________________________
> fpc-pascal maillist  -  [hidden email]
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal
>

Try override instead of overload

--
Rodrigo Palhano
---------------------------------
Equipe SpeedCASE

_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: Polymorphism question

Darius Blaszyk
I made a typo which I didn't notice, thanks for the replies.

> On Fri, 03 Mar 2006 04:52:36 -0300, <[hidden email]> wrote:
>
>> (I sent this mail yesterday but somehow it didn't get trough, therefore
>> a
>> new try)
>>
>> I would like to declare a polymorph class. The class has several
>> properties and it's the read and write specifiers that I want to be
>> virtual abstract. So derived classes override the read and write
>> specifiers. The problem however is that I get an EAbstractError. The
>> property is still considered to be abstract according to the compiler.
>> So
>> what did I wrong? I have added an example below.
>> Is it perhaps not allowed to use this construct? What would then be the
>> best way?
>> Darius
>>
>> <<example>>
>>
>> unit MyTest;
>>
>> {$mode objfpc}{$H+}
>>
>> interface
>>
>> uses
>>   Classes, ComCtrls, SysUtils;
>>
>> type
>>   TCustomClass = class
>>   private
>>     //virtual mehods
>>     function GetMyProperty: string; virtual; abstract;
>>     procedure SetMyProperty(Value: string); virtual; abstract;
>>   published
>>
>>     property MyProperty: string Read GetMyProperty Write SetMyProperty;
>>   end;
>>
>>   TMyClass = class(TCustomClass)
>>   private
>>     FMyProperty: string;
>>
>>     function GetMyProperty: string; overload;
>>     procedure SetMyProperty(Value: string); overload;
>>   published
>>     property MyProperty;
>>   end;
>>
>> implementation
>>
>> function TMyClass .GetMyProperty: string;
>> begin
>>   Result := FMyProperty;
>> end;
>>
>> procedure TMyClass .SetMyProperty(Value: string);
>> begin
>>   if Value = FMyProperty then
>>     exit;
>>
>>   FMyProperty := Value;
>> end;
>> end.
>>
>>
>>
>> _______________________________________________
>> fpc-pascal maillist  -  [hidden email]
>> http://lists.freepascal.org/mailman/listinfo/fpc-pascal
>>
>
> Try override instead of overload
>
> --
> Rodrigo Palhano
> ---------------------------------
> Equipe SpeedCASE
>
> _______________________________________________
> fpc-pascal maillist  -  [hidden email]
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal
>


_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/mailman/listinfo/fpc-pascal