AGB  ·  Datenschutz  ·  Impressum  







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

Frage zu overload + reintroduce

Ein Thema von Der schöne Günther · begonnen am 25. Nov 2013 · letzter Beitrag vom 23. Mai 2014
Antwort Antwort
Seite 1 von 2  1 2      
Der schöne Günther

Registriert seit: 6. Mär 2013
6.191 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Frage zu overload + reintroduce

  Alt 25. Nov 2013, 10:52
Delphi-Version: XE5
Eine Kindklasse möchte eine abstrakte Methode der Oberklasse implementieren und überladen. Beispiel:

Delphi-Quellcode:
   TBaseClass = class abstract
      procedure someProc(); virtual; abstract;
   end;

   TChildClass = class(TBaseClass)
      procedure someProc(); overload; override;
      procedure someProc(const someInput: Integer); overload; virtual;
   end;
Der Compiler meint:
Code:
Warnung: W1010 Methode 'someProc' verbirgt virtuelle Methode vom Basistyp 'TBaseClass'
Ich sehe nicht, wie da irgendetwas verborgen wird

Die Compilerwarnung geht weg wenn man entweder
  1. TBaseClass::someProc() die Direktive 'overload' hinzufügt
  2. TChildClass::someProc(Integer) die Direktive 'reintroduce' hinzufügt

Ersteres finde ich Quatsch. In der Oberklasse interessiert es mich herzlich wenig, ob in einer Kindklasse mal überladen wird. Außerdem würde ich mir so wahrscheinlich angewöhnen, grundsätzlich an jede Methode ein 'overload' anzuhängen.

Zweiteres ist logisch, laut Hilfe macht 'reintroduce' nichts anderes, als nur Compilerwarnungen zu unterdrücken. Aber wie gesagt: Ich sehe nicht, wie hier überhaupt etwas verdeckt wird...
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Frage zu overload + reintroduce

  Alt 25. Nov 2013, 11:04
In der Hilfe von meinem Delphi XE ist diese Compiler-Warnung ganz gut erklärt und 3 Dinge zum Vermeiden der Warnung angegeben.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.326 Beiträge
 
Delphi 12 Athens
 
#3

AW: Frage zu overload + reintroduce

  Alt 25. Nov 2013, 11:10
Nja, im Prinzip wird da vermutlich nur was falsch getestet (beim kompilieren des zweiten someProc wird das Erste nicht beachtet), aber das ist schon ewig so und läßt sich via reintroduce gut unterdrücken.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (25. Nov 2013 um 11:14 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.191 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Frage zu overload + reintroduce

  Alt 25. Nov 2013, 12:26
In der Hilfe von meinem Delphi XE ist diese Compiler-Warnung ganz gut erklärt und 3 Dinge zum Vermeiden der Warnung angegeben.
Die drei Punkte sind
  1. [Passt nicht, da keine Überladung]
  2. "Dann Überladen sie halt nicht"
  3. "Verwenden Sie reintroduce um die Warnung zu unterdrücken"

Mein Punkt ist nur, dass hier nichts verdeckt wird und der Compiler mit seiner Warnung nicht Recht hat.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.352 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Frage zu overload + reintroduce

  Alt 25. Nov 2013, 12:32
Mach Dir doch mal den QC-Spaß...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.809 Beiträge
 
Delphi 12 Athens
 
#6

AW: Frage zu overload + reintroduce

  Alt 25. Nov 2013, 13:36
Mach Dir doch mal den QC-Spaß...
Ich bitte sogar darum!

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.191 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Frage zu overload + reintroduce

  Alt 25. Nov 2013, 16:15
Kann ich gerne tun, ich wollte nur sicherstellen, dass hier kein Denkfehler drin ist und der Compiler mit seiner Warnung wirklich Unrecht hat.

Falls also noch jemand seine qualifizierte Meinung abgeben möchte
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.352 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Frage zu overload + reintroduce

  Alt 23. Mai 2014, 22:39
Vielleicht ist es schon zu spät heute ... oder verstehe ich die Fehlermeldung zu Recht nicht?

Create ist normal überschrieben.
Create(xxx) will ich virtuell erzeugen und überladen, damit ich es später bei Bedarf überschreiben kann.

Nach "overload; virtual;" wird "reintroduce;" jedoch nicht akzeptiert.
Wenn ich "reintroduce;" weg lasse funktioniert das Geraffel so.
Die unsinnige Fehlermeldung kann ich also nicht mal unterdrücken.


Oder liegt hier ein Denkfehler meinerseits vor?


Delphi-Quellcode:
  TTest = class(TBase)
  ...
  public
    RTState: Boolean;
    constructor Create; overload; override;
    constructor Create(aClassName: String); overload; virtual; reintroduce;
    destructor Destroy; override;

Zitat:
[dcc32 Warnung] soTypes.pas(104): W1010 Methode 'Create' verbirgt virtuelle Methode vom Basistyp 'TBase'
[dcc32 Fehler] soTypes.pas(104): E2169 Felddefinition nicht erlaubt nach Methoden oder Eigenschaften
[dcc32 Fehler] soTypes.pas(104): E2029 ',' oder ':' erwartet, aber ';' gefunden
[dcc32 Fehler] soTypes.pas(105): E2029 Typ erwartet, aber 'DESTRUCTOR' gefunden
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.326 Beiträge
 
Delphi 12 Athens
 
#9

AW: Frage zu overload + reintroduce

  Alt 23. Mai 2014, 22:41
Zitat:
Nach
Schreib mal das vor's virtual oder so.

Die Reihenfolge dieser Angaben ist nicht beliebig. (sinnloser Weise)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (23. Mai 2014 um 22:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Frage zu overload + reintroduce

  Alt 23. Mai 2014, 22:44
Die Deklaration von TBase wäre jetzt hilfreich. Am Besten sogar beide Deklarationen aus dem interface-Teil komplett.

Zitat:
Nach
Schreib mal das vor's virtual oder so.

Die Reihenfolge dieser Angaben ist nicht beliebig.
Ich glaube ja, das reintroduce ist hier völlig überflüssig
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (23. Mai 2014 um 22:47 Uhr)
  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 02:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz