Avatar billede kingguro.dk Nybegynder
15. november 2003 - 22:50 Der er 10 kommentarer og
1 løsning

Overskrivning af metode ved nedarvning!

Hvis jeg har en klasse der indeholder en procedure der hedder Draw?? Og jeg så laver en anden klasse som nedarver fra den første klasse, og denne klasse skal også have en metode der hedder Draw, men denne skal indeholde noget andet kode?? Hvordan "overskriver" jeg den oprindeligt metode?
Avatar billede erikjacobsen Ekspert
15. november 2003 - 23:00 #1
Avatar billede kingguro.dk Nybegynder
15. november 2003 - 23:06 #2
Det ved jeg ikke?? Det håbede jeg lidt i kunne fortælle mig :)

Men jeg har en klasse der hedder MFraktal:

type
TMFraktal = class
  constructor Create(xmin,xmax,ymin,ymax : extended;width,iterations : integer);
  private
  xmin,xmax,ymin,ymax : extended;
  width,height,iterations : integer;
  fraktalBitmap : Tbitmap;
  RangeOfColors : Array [1 .. 10000] of TColor;
  procedure makeRangeOfColors;
  protected
  function calcPoint(x,y : extended) : TColor;
  procedure drawFraktal;
  public
  function getFraktal : Tbitmap;
  procedure setCoords(xmin,xmax,ymin,ymax : extended);
  function getWidth : integer;
  function getHeight : integer;
  procedure setWidth(width : integer);
end;

og så har jeg en klasse der hedder JFraktal som nedarver fra MFraktal. Den skal bare have to nye "versioner" af:

  function calcPoint(x,y : extended) : TColor;
  procedure drawFraktal;

Disse to skal altså overskrives/omskrives i TJfraktal??
Avatar billede erikjacobsen Ekspert
15. november 2003 - 23:11 #3
Erklærer du dem virtual i den første klasse, skulle du netop kunne sige
override til dem. Jeg er lidt tøvende med at sige hvordan det præcis skal
være, da jeg ikke helt ved hvad du gør og vil.
Avatar billede kingguro.dk Nybegynder
15. november 2003 - 23:13 #4
Okay... Leger lige ledt med det.. Men vender nok igen :)
Avatar billede hrc Mester
16. november 2003 - 13:34 #5
Hvis draw ikke er virtuel i forvejen så kan du angive JFractal.draw som reintroduce (procedure draw; reintroduce;) hvorved du erstatter den underliggende fra MFraktal.

Havde du derimod MFraktal.draw som virtuel (procedure Draw; virtual;), så ville en nedarvning JFractal.draw se sådan ud (procedure Draw; override;):

procedure JFraktal.draw;
begin
  inherited; // Her kaldes MFraktals draw
  kode..
end;

Den linie kunne du så kommentere ud, men det ville ikke være pænt og objektorienteret.

I øvrigt er det en defacto standard at private properties er foranstillet med et f. Jeg plejer at skrive det sådan: fXMin, men andre vil have at f'et skal stå med stort Fxmin. Jeg synes min version er lettest læseligt, men det er religion. Jeg vil bare opfordre dig til at vælge en af dem.

Prøv i øvrigt at lave en klasse definition og så tryk på ctrl-skift-c. Så bliver skelettet lavet for dig. Det er en smart lille genvejstast.
Avatar billede kingguro.dk Nybegynder
16. november 2003 - 15:58 #6
Jeg havde fået det til at virke, ud fra det første erikjacobsen skrec! Men det var et yderst tilfredstillende: hrc! Så hvis i begge kunne ligge nogle svar, så i kunne få nogle velfortjente point ville jeg blive glad :)

Tak for hjælpen :)
Avatar billede erikjacobsen Ekspert
16. november 2003 - 16:04 #7
Skidt med point, du klarede det jo selv
Avatar billede kingguro.dk Nybegynder
16. november 2003 - 16:10 #8
Jo, men det var da det eksempel du linkede til der hjalp :)
Avatar billede hrc Mester
17. november 2003 - 11:39 #9
Kun glad for at kunne hjælpe. ;-)
Avatar billede kingguro.dk Nybegynder
17. november 2003 - 15:18 #10
erikjacobsen > hvis du ikke vil have de point, så får hrc dem altså alle sammen, selv om i har være lige gode om et besvare mit spm!
Avatar billede erikjacobsen Ekspert
17. november 2003 - 15:20 #11
Fint nok - jeg gav dig bare et link og lidt moralsk støtte ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester