Methoden überladen [ERLEDIGT]

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Methoden überladen [ERLEDIGT]

Beitrag von Manfred »

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?
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!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Methoden überladen

Beitrag von Tom »

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 :wink: )
Herzlich,
Tom
Benutzeravatar
Bertram Hansen
Foren-Moderator
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

Beitrag von Bertram Hansen »

:lol: =D>
:wave:
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!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Methoden überladen

Beitrag von Manfred »

Selbstgeschriebene Methoden lassen sich nicht überladen?
(Randbemerkung: Früher hießen kleine Programme, mit denen ich irgendwas ausprobiert habe, immer MURKS.PRG. Seit einer Weile heißen sie MANFRED.PRG :wink: )
Und welcher Teufel reitet Dich heute wieder?

@Bertram... wir sprechen uns noch :blob8: 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!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Methoden überladen

Beitrag von Tom »

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
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Methoden überladen

Beitrag von Tom »

Und welcher Teufel reitet Dich heute wieder?
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. :wink: Ist also quasi eine Ehre.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Methoden überladen

Beitrag von Manfred »

Öhm,

das Beispiel verstehe ich jetzt nicht im Zusammenhang mit meiner Frage. :-k
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!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Methoden überladen

Beitrag von Tom »

Die Antwort lautet: Ja, Du hast das richtig verstanden. Vermutlich machst Du also im Code irgendwas falsch.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Methoden überladen

Beitrag von Manfred »

OK,

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


Ich habe das jetzt etwas eingekürzt.
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!!
Benutzeravatar
Markus Walter
Programmier-Gott
Programmier-Gott
Beiträge: 1018
Registriert: Di, 24. Jan 2006 10:22
Wohnort: Saarland

Re: Methoden überladen

Beitrag von Markus Walter »

Hi,

es wäre hilfreich zu wissen WO genau jetzt das Problem liegt...
Gruß
Markus

Mitglied der XUG Saarland-Pfalz
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Methoden überladen

Beitrag von Manfred »

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.
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!!
Benutzeravatar
Markus Walter
Programmier-Gott
Programmier-Gott
Beiträge: 1018
Registriert: Di, 24. Jan 2006 10:22
Wohnort: Saarland

Re: Methoden überladen

Beitrag von Markus Walter »

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...
Gruß
Markus

Mitglied der XUG Saarland-Pfalz
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Methoden überladen

Beitrag von Manfred »

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.
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!!
Benutzeravatar
Markus Walter
Programmier-Gott
Programmier-Gott
Beiträge: 1018
Registriert: Di, 24. Jan 2006 10:22
Wohnort: Saarland

Re: Methoden überladen

Beitrag von Markus Walter »

Code: Alles auswählen

CLASS filiale FROM datenbank, _filiale
Deine Klasse filiale erbt von 2 Klassen: datenbank, _filiale

Zeig doch (endlich :wink: ) 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
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Methoden überladen

Beitrag von Manfred »

Hi Markus,

das ist alles.

Code: Alles auswählen

ofiliale := filiale():new()
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!!
Benutzeravatar
Markus Walter
Programmier-Gott
Programmier-Gott
Beiträge: 1018
Registriert: Di, 24. Jan 2006 10:22
Wohnort: Saarland

Re: Methoden überladen

Beitrag von Markus Walter »

Hi,

ich hatte das "erwartest" doch extra fett gedruckt...

Ich vermute immer noch (du willst es mir ja scheinbar nicht schreiben... :wink: ), 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
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:

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
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Methoden überladen

Beitrag von Manfred »

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.
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!!
Benutzeravatar
Markus Walter
Programmier-Gott
Programmier-Gott
Beiträge: 1018
Registriert: Di, 24. Jan 2006 10:22
Wohnort: Saarland

Re: Methoden überladen

Beitrag von Markus Walter »

Hi Manfred,

besser spät als nie... :wink:

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
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Methoden überladen [ERLEDIGT]

Beitrag von brandelh »

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:

Code: Alles auswählen

aItems := oCombobox:getData()             // Werte in der Listbox 
Will man es genauer ausdrücken, oder braucht man den XbpSLE() Wert, muss man so schreiben ("Cast")

Code: Alles auswählen

aItems := oCombobox:XbpListBox:getData()  // Werte in der Listbox 
cBuffer:= oCombobox:XbpSLE:getData()      // Wert im Eingabefeld 
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 ;-)
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Methoden überladen [ERLEDIGT]

Beitrag von Manfred »

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.
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!!
Antworten