AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Abstrakter Fehler

Ein Thema von DGL-luke · begonnen am 6. Nov 2005 · letzter Beitrag vom 6. Nov 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#1

Abstrakter Fehler

  Alt 6. Nov 2005, 10:26
Delphi-Quellcode:
type TBitOPer = class(TObject)
   BoolMap: TBoolMap;
   constructor Create(InitMap:TBoolMap);
   destructor Destroy; override;
 public
   procedure Add(map: TBoolMap);
   function Get: TBoolMap;
 protected
   function Perform(a,b:boolean):boolean; virtual; abstract;
end;

type TXORer = class(TBitOPer)
  private
    function Perform(a,b:boolean):boolean; inline;
end;

type TORer = class(TBitOPer)
  private
    function Perform(a,b:boolean):boolean; inline;
end;
Ich hab hier eine abstrakte Basisklasse, in den beiden Nachfahren wird dann perform() implementiert.
Rufe ich das jedoch in einer Instanz auf (add ruft perform auf), bekomme ich einen "abstrakten Fehler". was muss ich ändern? Kann ich das inline halten?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Abstrakter Fehler

  Alt 6. Nov 2005, 10:29
Hi,

Da fehlt das override hinter der Deklaration von perform() in den Ableitungen.

Du wirst auch wahrscheinlich eine Warnung erhalten, weil perform() in den Unterklassen eine geringere Sichtbarkeit hat - solltest die Prozedur demnach also auch nach "protected" packen.

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Abstrakter Fehler

  Alt 6. Nov 2005, 10:38
OK. override verbietet aber inline

Und wieso ist public eine gernigere Sichtbarkeit als protected? protected heisst doch "nur von Nachfahren sichtbar" und public "von allen sichtbar"?!
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Abstrakter Fehler

  Alt 6. Nov 2005, 10:39
Zitat von DGL-luke:
Und wieso ist public eine gernigere Sichtbarkeit als protected? protected heisst doch "nur von Nachfahren sichtbar" und public "von allen sichtbar"?!
Delphi-Quellcode:
type TXORer = class(TBitOPer)
  private
    function Perform(a,b:boolean):boolean; inline;
end;

type TORer = class(TBitOPer)
  private
    function Perform(a,b:boolean):boolean; inline;
end;
Also ich lese da "private"

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#5

Re: Abstrakter Fehler

  Alt 6. Nov 2005, 10:41
Zudem ist inline seit mindestens Delphi 7 als veraltet markiert. Du solltest lieber in der Methode asm benutzen.

Was die Sichtbarkeit angeht, so muss die Überschriebene Funktion mindestens Protected sein, da du die Sichtbarkeit (soweit ich weiß auch in Delphi) nicht vermindern kannst! Also musst du gleiche oder höhere Sichtbarkeit zulassen. private ist aber weniger als protected

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Abstrakter Fehler

  Alt 6. Nov 2005, 10:45
Zitat von Der_Unwissende:
Zudem ist inline seit mindestens Delphi 7 als veraltet markiert. Du solltest lieber in der Methode asm benutzen.
Hi,

seit Delphi 2005 kann "inline" für Funktions-inlining benutzt werden, das heisst, dass die Funktion nicht mehr aufgerufen, sondern direkt an die Stelle des aufrufs gesetzt wird. Das spart den Aufruf.

Delphi-Referenz durchsucheninline-Direktive
Zitat von OH:
Beim Delphi-Compiler ermöglicht zur Verbesserung der Leistung, Funktionen und Prozeduren mit der Direktive inline zu versehen. Wenn eine Funktion oder Prozedur bestimmten Kriterien entspricht, fügt der Compiler Code direkt ein anstatt einen Aufruf zu generieren. Das Ergebnis dieser Leistungsoptimierung ist schnellerer Code, der jedoch mehr Speicherplatz in Anspruch nimmt. Der Compiler produziert dabei eine größere Binärdatei. Die Direktive inline wird in Funktions- und Prozedurdeklarationen und -definitionen, genau wie andere Direktiven, verwendet.
Also die Direktive ist keineswegs veraltet...

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Abstrakter Fehler

  Alt 6. Nov 2005, 10:47
ach so... äh ja....
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#8

Re: Abstrakter Fehler

  Alt 6. Nov 2005, 10:48
Ist das denn wirklich sooo schwer zu verstehen?
Kiek mal hier, das sollte zusammen mit Davids nett gemeintem OH Copy'nWaste eigentlich alles sagen...
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#9

Re: Abstrakter Fehler

  Alt 6. Nov 2005, 12:24
Sorry, dann bin ich wohl etwas zu wenig davon ausgegangen, dass Borland Tags wiederbelebt. Finde ich aber auch etwas ungewöhnlich, aber gut.
Ok, schau mir das nächste mal wohl lieber 2005 an, bevor ich hier etwas sage.
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#10

Re: Abstrakter Fehler

  Alt 6. Nov 2005, 12:48
Zitat von Der_Unwissende:
Sorry, dann bin ich wohl etwas zu wenig davon ausgegangen, dass Borland Tags wiederbelebt. Finde ich aber auch etwas ungewöhnlich, aber gut.
Ok, schau mir das nächste mal wohl lieber 2005 an, bevor ich hier etwas sage.
Ich meinte doch gar nicht dich!

Ich verstehe nur ncht, wie man nach so langer Zeit mit Delphi nicht weiß was virtual und override machen und warum inline damit nicht klarkommen kann. (deterministischer statischer compile vs. dyn. gebundenem virtual call)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz