Methoden überladen [ERLEDIGT]
Moderator: Moderatoren
- Manfred
- Foren-Administrator
- Beiträge: 21189
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Methoden überladen [ERLEDIGT]
Jetzt habe ich mal wieder ein Dingen, was mich total verwirrt,
generell gilt doch, wenn ich in einer Superklasse eine Methode habe, dann wird die solange ausgeführt, bis ich in einer Klasse die von der Superklasse erbt eine Methode mit gleichen Namen habe. Sobald das der Fall ist, wird doch die Methode der Instanz ausgeführt? Und zwar gandenlos, oder? Und nicht mal so, oder mal so?
Irgendwas scheine ich falsch zu machen. Ich habe 3 Methoden, die ich einfach nur als Dummy in der Superklasse angelegt habe, aber davon werden 2 ausgeführt (trotz gleichnamiger in der Instanz) und die andere greift auf die überladene der Instanz zu.
Bevor ich jetzt Code einstelle, würde mich nur mal interessieren, ob ich das genauso richtig verstanden habe?
generell gilt doch, wenn ich in einer Superklasse eine Methode habe, dann wird die solange ausgeführt, bis ich in einer Klasse die von der Superklasse erbt eine Methode mit gleichen Namen habe. Sobald das der Fall ist, wird doch die Methode der Instanz ausgeführt? Und zwar gandenlos, oder? Und nicht mal so, oder mal so?
Irgendwas scheine ich falsch zu machen. Ich habe 3 Methoden, die ich einfach nur als Dummy in der Superklasse angelegt habe, aber davon werden 2 ausgeführt (trotz gleichnamiger in der Instanz) und die andere greift auf die überladene der Instanz zu.
Bevor ich jetzt Code einstelle, würde mich nur mal interessieren, ob ich das genauso richtig verstanden habe?
Zuletzt geändert von Manfred am Mo, 14. Jun 2010 15:48, insgesamt 1-mal geändert.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9361
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 101 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Methoden überladen
Im Prinzip ist das richtig so, aber es gibt meines Wissens Methoden, die sich nicht überladen lassen. Ansonsten kann XbpManfredBrowse z.B. ein eigenes :ForceStable haben, das etwas ganz anderes tut als das normale - das übrigens weiterhin zur Verfügung steht!
(Randbemerkung: Früher hießen kleine Programme, mit denen ich irgendwas ausprobiert habe, immer MURKS.PRG. Seit einer Weile heißen sie MANFRED.PRG )
(Randbemerkung: Früher hießen kleine Programme, mit denen ich irgendwas ausprobiert habe, immer MURKS.PRG. Seit einer Weile heißen sie MANFRED.PRG )
Herzlich,
Tom
Tom
- Bertram Hansen
- Foren-Moderator
- Beiträge: 1015
- Registriert: Di, 27. Sep 2005 8:55
- Wohnort: 51379 Leverkusen
- Hat sich bedankt: 28 Mal
- Danksagung erhalten: 20 Mal
- Kontaktdaten:
Re: Methoden überladen
=D>
Gruß Bertram
http://www.tobax.de
Mitglied der XUG Cologne
Mitglied der XUG Osnabrück
Beisitzer des Deutschsprachige Xbase-Entwickler e.V.
Solange Kakaobohnen an Bäumen wachsen ist Schokolade Obst!
- Manfred
- Foren-Administrator
- Beiträge: 21189
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Methoden überladen
Selbstgeschriebene Methoden lassen sich nicht überladen?
@Bertram... wir sprechen uns noch Die nächste Tafel Schokolade ißt Du alleine, da helfe ich Dir nicht mehr bei.
Und welcher Teufel reitet Dich heute wieder?(Randbemerkung: Früher hießen kleine Programme, mit denen ich irgendwas ausprobiert habe, immer MURKS.PRG. Seit einer Weile heißen sie MANFRED.PRG )
@Bertram... wir sprechen uns noch Die nächste Tafel Schokolade ißt Du alleine, da helfe ich Dir nicht mehr bei.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9361
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 101 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Methoden überladen
Code: Alles auswählen
CLASS ManfredBrowse FROM XbpBrowse
...
METHOD Init, ..., ForceStable
METHOD ManfredBrowse:ForceStable()
MsgBox('ForceStable')
::XbpBrowse:ForceStable() // ruft die Methode aus der Superklasse auf
* das würde zu einer Endlosrekursion führen:
* ::ForceStable()
RETURN self
Herzlich,
Tom
Tom
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9361
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 101 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Methoden überladen
Das hat überhaupt nichts Teuflisches. Ich habe irgendwann, als ich eine Deiner Fragen bearbeitet habe, das erste MANFRED.PRG gebaut, und irgendwie bin ich dann dabei geblieben. Ist also quasi eine Ehre.Und welcher Teufel reitet Dich heute wieder?
Herzlich,
Tom
Tom
- Manfred
- Foren-Administrator
- Beiträge: 21189
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Methoden überladen
Öhm,
das Beispiel verstehe ich jetzt nicht im Zusammenhang mit meiner Frage.
das Beispiel verstehe ich jetzt nicht im Zusammenhang mit meiner Frage.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9361
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 101 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Methoden überladen
Die Antwort lautet: Ja, Du hast das richtig verstanden. Vermutlich machst Du also im Code irgendwas falsch.
Herzlich,
Tom
Tom
- Manfred
- Foren-Administrator
- Beiträge: 21189
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Methoden überladen
OK,
nächster Schritt:
Ich habe das jetzt etwas eingekürzt.
nächster Schritt:
Code: Alles auswählen
CLASS datenbank
HIDDEN:
//----------------------------- Protected --------------------------------------
PROTECTED:
CLASS VAR aDb SHARED // kann durch SHARED von ALLEN anderen Instanzen für ALLE anderen Instanzen sichtbar verändert werden
CLASS VAR oId SHARED // Test. ID werden ja eigentlich überall vergeben
VAR aStrukturErweitert // hier können Zusatzfelder zur Struktur erfaßt werden für den späteren Gebrauch .
VAR cDbStrukturDatum,; // hier kommt das Datum der letzten gültigen Struktur für die jeweilige DB rein .
cIndexKeyDatum // hier kommt das Datum des letzten gültigen Indexschlüssels rein .
VAR lMin1Record // wenn DB mindestens 1 Satz haben muß .
CLASS METHOD initClass // wird nur beim 1.Mal gesetzt und dann nicht wieder neu initialisiert, bei weiteren Instanzen
METHOD erzeugeStruktur
METHOD erzeugeVerzeichnisse // erzeugt Verzeichnisse, oder prüft auf Vorhandensein ab
METHOD initstruktur
METHOD initvaria
ENDCLASS
********************************************************************************
METHOD datenbank:initvaria()
RETURN self
METHOD datenbank:initstruktur()
RETURN self
METHOD datenbank:erzeugestruktur()
RETURN self
********************************************************************************
METHOD datenbank:INIT(oProgress) // hier werden die Werte gesetzt, sobald eine Instanz gebildet wird (gilt für jede Instanz getrennt)
::initvaria() <------ das hier klappt
::initstruktur(self) <------ hier wird der Dummy aufgerufen
::erzeugeStruktur(self) <------ hier wird der Dummy aufgerufen
RETURN self
********************************************************************************
********************************************************************************
********************************************************************************
CLASS filiale FROM datenbank, _filiale
EXPORTED:
VAR cBlzNr,;
cPlzNr
METHOD initvaria
METHOD BriefkopfAbsender
METHOD sucheEigeneFiliale
ENDCLASS
********************************************************************************
METHOD filiale:initvaria()
::cDbank := ::cIdSatzText := "Filialen" // Name der DB und der Indexdatei und der Beschreibung in der IDS des Feldes
::cPfad := "..\datenbanken\parameter\" // Verzeichnis der DB und des Index
::nIdSatz := 2
::cBlzNr := Space(8) // für Eingabefelder,...
::cPlzNr := Space(10) // für Eingabefelder, damit keine IDplz dort steht
RETURN self
********************************************************************************
********************************************************************************
CLASS _filiale
EXPORTED:
METHOD initstruktur
METHOD erzeugestruktur
ENDCLASS
********************************************************************************
METHOD _filiale:initstruktur(objekt)
// ACHTUNG immer auf Datum achten
// IndexArray {TAG,Schlüssel,Hinweistext,lUnique,Indexumschaltung im Browse, IndexAktiv}
objekt:aIndex := {;
{"ID" ,"Str(id,8,0)","ID" ,.F.,"" ,.F.},;
{"BEZ","Upper(bez)" ,"Bezeichnung",.F.,"bez",.T.};
}
objekt:cDbStrukturDatum := "20091018"
objekt:cIndexKeyDatum := "20080208"
RETURN self
********************************************************************************
METHOD _filiale:erzeugestruktur(objekt)
//!!!ACHTUNG, die Felder auch als MemVar eintragen in der Klasse, oder dem Objekt
// DbStruktur {Feldname,Feldart,Breite,Nachkomma,,Browse-Überschrift,Browserfeld,Picture,TOOLTIP,Erklärung}
objekt:aStruktur := {}
::StrukturArray1(objekt)
AAdd(objekt:aStrukturErweitert,{"BANK" ,"C",40,0,"","Bank:" ,"n","" ,"TOOLTIP" ,""})
AAdd(objekt:aStrukturErweitert,{"BEZ" ,"C",40,0,"","Firma" ,"n","@K !"+Repl("X",39) ,"Bezeichnung",""})
AAdd(objekt:aStrukturErweitert,{"BLZ" ,"C", 8,0,"","BLZ" ,"n","99999999" ,"TOOLTIP",""})
AAdd(objekt:aStrukturErweitert,{"EMAIL" ,"C",40,0,"","Mailadresse" ,"n","" ,"Mailadresse",""})
AAdd(objekt:aStrukturErweitert,{"FUSSZEILE1","C",80,0,"","Fusszeile1" ,"n","" ,"1.Fusszeile",""})
AAdd(objekt:aStrukturErweitert,{"FUSSZEILE2","C",80,0,"","Fusszeile2" ,"n","" ,"2.Fusszeile",""})
AAdd(objekt:aStrukturErweitert,{"GF" ,"C",30,0,"","Geschäftsführer","n","" ,"TOOLTIP" ,""})
AAdd(objekt:aStrukturErweitert,{"IMHAUS" ,"L", 1,0,"","im Haus" ,"n","" ,"Wenn es die eigene und keine Fremdfiliale ist",""})
AAdd(objekt:aStrukturErweitert,{"KUERZEL" ,"C", 6,0,"","Kürzel" ,"n","!!!!!!" ,"Kurzbezeichnung für interne Abwicklungen" ,""})
AAdd(objekt:aStrukturErweitert,{"KTONR" ,"N",12,0,"","Kontonummer" ,"n","@K 9999 9999 99" ,"TOOLTIP",""})
AAdd(objekt:aStrukturErweitert,{"ORT" ,"C",25,0,"","" ,"n","@K !"+Repl("X",24) ,"TOOLTIP",""})
AAdd(objekt:aStrukturErweitert,{"PLZ" ,"N", 5,0,"","Plz" ,"n","99999" ,"TOOLTIP",""})
AAdd(objekt:aStrukturErweitert,{"SLOGAN" ,"C",50,0,"","Slogan" ,"n","@K !"+Repl("X",49) ,"einen evtl. Slogan der Firma eingeben",""})
AAdd(objekt:aStrukturErweitert,{"SMTP" ,"C",50,0,"","SMTP-Server" ,"n","" ,"TOOLTIP",""})
AAdd(objekt:aStrukturErweitert,{"SMTPPW" ,"C",50,0,"","SMTP-Passwort" ,"n","" ,"TOOLTIP",""})
AAdd(objekt:aStrukturErweitert,{"STEUERNR" ,"C",12,0,"","Steuernummer" ,"n","@K 9999/9999/9999/" ,"TOOLTIP",""})
AAdd(objekt:aStrukturErweitert,{"STRASSE" ,"C",40,0,"","Strasse" ,"n","@K !"+Repl("X",39) ,"TOOLTIP",""})
AAdd(objekt:aStrukturErweitert,{"TELEFON" ,"C",21,0,"","Telefon" ,"n","@K (99999) 99 99 99 99 9","TOOLTIP",""})
AAdd(objekt:aStrukturErweitert,{"TELEFAX" ,"C",21,0,"","Telefax" ,"n","@K (99999) 99 99 99 99 9","TOOLTIP",""})
AAdd(objekt:aStrukturErweitert,{"USERNAME" ,"C",20,0,"","SMTP-Username" ,"n","" ,"TOOLTIP",""})
AAdd(objekt:aStrukturErweitert,{"USTID" ,"C",12,0,"","Ust.-ID." ,"n","" ,"TOOLTIP",""})
AAdd(objekt:aStrukturErweitert,{"WEBSEITE" ,"C",30,0,"","Webadresse" ,"n","@K http://www." ,"TOOLTIP",""})
AAdd(objekt:aStrukturErweitert,{"ZUSATZ1" ,"C",40,0,"","Zusatz1" ,"n","" ,"zusätzliche Firmenbezeichnung",""})
AAdd(objekt:aStrukturErweitert,{"ZUSATZ2" ,"C",40,0,"","Zusatz2" ,"n","" ,"zusätzliche Firmenbezeichnung",""})
::StrukturArray2(objekt)
::Strukturerweitert2Struktur(objekt)
RETURN self
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
Re: Methoden überladen
Hi,
es wäre hilfreich zu wissen WO genau jetzt das Problem liegt...
es wäre hilfreich zu wissen WO genau jetzt das Problem liegt...
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz
- Manfred
- Foren-Administrator
- Beiträge: 21189
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Methoden überladen
Auch Hi,
habe ich doch oben mit Pfeilen gemarkert. Die erste Methode wird über die Instanz aufgerufen und klappt und die beiden anderen, werden aus der Superklasse (Dummy) aufgerufen und nicht aus der Instanz genommen. Also da klappt die Überladung nicht.
habe ich doch oben mit Pfeilen gemarkert. Die erste Methode wird über die Instanz aufgerufen und klappt und die beiden anderen, werden aus der Superklasse (Dummy) aufgerufen und nicht aus der Instanz genommen. Also da klappt die Überladung nicht.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
Re: Methoden überladen
Nochmal hi,
das ist ja toll mit den Pfeilen, aber mir fehlt immer noch das Bilden der Instanzen...
Ich vermute, dass es daran liegt, dass die methoden in beiden Superklassen vorkommen. Da gewinnt links vor rechts oder umgekehrt...
das ist ja toll mit den Pfeilen, aber mir fehlt immer noch das Bilden der Instanzen...
Ich vermute, dass es daran liegt, dass die methoden in beiden Superklassen vorkommen. Da gewinnt links vor rechts oder umgekehrt...
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz
- Manfred
- Foren-Administrator
- Beiträge: 21189
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Methoden überladen
Ach so,
ganz einfach. Beim Bilden der Instanzen wird die Methode Init() aus der Superklasse aufgerufen. Dort werden dann die weiteren Methoden abgearbeitet. Die 1. wird im Objekt ausgeführt und die 2. und 3. in der Superklasse (Dummies) mehr nicht.
Was heißt in beiden Superklassen? Es gibt nur eine. Die andere, in der die "richtigen" Methoden stehen erbt nur von der Superklasse. Wie gesagt, die 1.Methode wird in der Instanz ausgeführt, die beiden weiteren aber nicht. Das ist es was mich so nachdenklich macht.
ganz einfach. Beim Bilden der Instanzen wird die Methode Init() aus der Superklasse aufgerufen. Dort werden dann die weiteren Methoden abgearbeitet. Die 1. wird im Objekt ausgeführt und die 2. und 3. in der Superklasse (Dummies) mehr nicht.
Was heißt in beiden Superklassen? Es gibt nur eine. Die andere, in der die "richtigen" Methoden stehen erbt nur von der Superklasse. Wie gesagt, die 1.Methode wird in der Instanz ausgeführt, die beiden weiteren aber nicht. Das ist es was mich so nachdenklich macht.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
Re: Methoden überladen
Code: Alles auswählen
CLASS filiale FROM datenbank, _filiale
Zeig doch (endlich ) einfach mal, welche Klasse Du instanzierst und was Du erwartest. So wie ich Deine Instanzierung vermute, scheint mir klar zu sein, dass die methode initstruktur aus filiale nicht gerufen wird. Aber das ist alles Vermutung, weil ich nicht sehe, was Du wirklich machst...
Ich vermute, dass Du erwartest, dass die methode init() aus der Klasse datenbank, die methode initstruktur aus _filiale aufruft?! Vermute ich da richtig?
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz
- Manfred
- Foren-Administrator
- Beiträge: 21189
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Methoden überladen
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
Re: Methoden überladen
Hi,
ich hatte das "erwartest" doch extra fett gedruckt...
Ich vermute immer noch (du willst es mir ja scheinbar nicht schreiben... ), dass die Methode initstruktur aus der Klasse _filiale gerufen wird. Richtig?
Das würde ich in Deinem Fall nicht erwarten.
Du erzeugst eine Instanz:
ofiliale := filiale():new()
dadurch werden die init()-Methoden der Superklassen gerufen. datenbank:init() ruft datenbank:initstruktur. Aber die Klasse _filiale ist eine gleichberechtigte Klasse zu datenbank. Gerade beim Erben von mehreren Superklassen muss man da genau aufpassen (auch bei gleichnamigen iVars).
Anders wäre es wohl, wenn Du folgendes Konstrukt hättest:
Ich habe das alles nicht ausprobiert, würde es aber vermuten.
Mach doch mal einen einfachen Test: Baue Dir doch die Methoden einfach mit einer "?"-Ausgabe in ein Crt-Fenster und dann siehst Du in welcher Konstellation was gerufen wird. Also ungefähr so:
ich hatte das "erwartest" doch extra fett gedruckt...
Ich vermute immer noch (du willst es mir ja scheinbar nicht schreiben... ), dass die Methode initstruktur aus der Klasse _filiale gerufen wird. Richtig?
Das würde ich in Deinem Fall nicht erwarten.
Du erzeugst eine Instanz:
ofiliale := filiale():new()
dadurch werden die init()-Methoden der Superklassen gerufen. datenbank:init() ruft datenbank:initstruktur. Aber die Klasse _filiale ist eine gleichberechtigte Klasse zu datenbank. Gerade beim Erben von mehreren Superklassen muss man da genau aufpassen (auch bei gleichnamigen iVars).
Anders wäre es wohl, wenn Du folgendes Konstrukt hättest:
Code: Alles auswählen
Class Datenbank
...
Endclass
Class _filiale from Datenbank
...
Endclass
Class filiale from _filiale
...
Endclass
Mach doch mal einen einfachen Test: Baue Dir doch die Methoden einfach mit einer "?"-Ausgabe in ein Crt-Fenster und dann siehst Du in welcher Konstellation was gerufen wird. Also ungefähr so:
Code: Alles auswählen
METHOD datenbank:initstruktur()
? "Datenbank:initstruktur"
RETURN self
METHOD _filiale:initstruktur()
? "_filiale:initstruktur"
RETURN self
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz
- Manfred
- Foren-Administrator
- Beiträge: 21189
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Methoden überladen
Hi Markus,
jetzt verstehe ich was Du meinst.
Brrr, hat etwas länger gedauert. Initvaria() ist in class filiale und die anderen sind in _filiale, was aber erst hinter datenbank steht, in der Reihenfolge. Ja, das könnte es sein. Verflixt, also nix mit mal eben überladen. Augen auf.
Die Frage ist jetzt nur kann man das einfach von der Reihenfolge her vertauschen, ohne andere Seiteneffekte zu bekommen? Hm, mal nachdenken und ausprobieren. Wenn nicht, dann lasse ich es so, wie es die ganze Zeit war.
jetzt verstehe ich was Du meinst.
Brrr, hat etwas länger gedauert. Initvaria() ist in class filiale und die anderen sind in _filiale, was aber erst hinter datenbank steht, in der Reihenfolge. Ja, das könnte es sein. Verflixt, also nix mit mal eben überladen. Augen auf.
Die Frage ist jetzt nur kann man das einfach von der Reihenfolge her vertauschen, ohne andere Seiteneffekte zu bekommen? Hm, mal nachdenken und ausprobieren. Wenn nicht, dann lasse ich es so, wie es die ganze Zeit war.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
Re: Methoden überladen
Hi Manfred,
besser spät als nie...
Das Vertauschen der Reihenfolge wird meines Erachtens nichts bringen, ich glaube nicht, dass eine Methode einer parallelen Klasse aufgerufen wird...
besser spät als nie...
Das Vertauschen der Reihenfolge wird meines Erachtens nichts bringen, ich glaube nicht, dass eine Methode einer parallelen Klasse aufgerufen wird...
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz
- brandelh
- Foren-Moderator
- Beiträge: 15696
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Methoden überladen [ERLEDIGT]
Hi,
wenn eine Klasse von 2 Basisklassen erbt, dann wird eine Methode die in beiden Basisklassen enthalten ist, kann
die Methode der ersten Basisklasse wie üblich oder mit :Klassenname: (also Super) aufgerufen werden.
Die gleiche Methode der weiteren Basisklassen wir nur aufgerufen, wenn man den Klassennamen nutz !
Beispiel: XbpCombobox() -> und dortige Hilfe !!!
:getData() haben alle Xbase-Parts. Die Combobox erbt von XbpListbox und XbpSLE,
wobei XbpListbox() in der Vererbungshirarchie vorher kommt, daher kann man den XbpListBox() Wert direkt abfragen:
Will man es genauer ausdrücken, oder braucht man den XbpSLE() Wert, muss man so schreiben ("Cast")
wenn ich in einer eigenen Klasse von zwei Basisklassen erbe, würde ich vermuten, dass die
zuerst genannte Basisklasse auch die ist, die in der Vererbungshirarchie oben steht.
Somit kommt es schon darauf an in welcher Reihenfolge man bei CLASS ... FROM ... etwas schreibt.
Ob dies damit gemeint war, weiß ich aber nicht, ich habe den Thread ehrlich gesagt nicht ganz durchgelesen
wenn eine Klasse von 2 Basisklassen erbt, dann wird eine Methode die in beiden Basisklassen enthalten ist, kann
die Methode der ersten Basisklasse wie üblich oder mit :Klassenname: (also Super) aufgerufen werden.
Die gleiche Methode der weiteren Basisklassen wir nur aufgerufen, wenn man den Klassennamen nutz !
Beispiel: XbpCombobox() -> und dortige Hilfe !!!
:getData() haben alle Xbase-Parts. Die Combobox erbt von XbpListbox und XbpSLE,
wobei XbpListbox() in der Vererbungshirarchie vorher kommt, daher kann man den XbpListBox() Wert direkt abfragen:
Code: Alles auswählen
aItems := oCombobox:getData() // Werte in der Listbox
Code: Alles auswählen
aItems := oCombobox:XbpListBox:getData() // Werte in der Listbox
cBuffer:= oCombobox:XbpSLE:getData() // Wert im Eingabefeld
zuerst genannte Basisklasse auch die ist, die in der Vererbungshirarchie oben steht.
Somit kommt es schon darauf an in welcher Reihenfolge man bei CLASS ... FROM ... etwas schreibt.
Ob dies damit gemeint war, weiß ich aber nicht, ich habe den Thread ehrlich gesagt nicht ganz durchgelesen
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21189
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Methoden überladen [ERLEDIGT]
Hi Hubert,
ich würde sagen, Du hast es richtig verstanden.
Ich denke mal, ich begrabe die Idee, weil ich doch mein Glück kenne. Irgendwas anderes klappt dann später nicht nicht und dass wird dann übel enden.
ich würde sagen, Du hast es richtig verstanden.
Ich denke mal, ich begrabe die Idee, weil ich doch mein Glück kenne. Irgendwas anderes klappt dann später nicht nicht und dass wird dann übel enden.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!