Aufruf einer Funktion
-
Hallo,
ich habe ein kleines Problem.
und zwar hab ich eine klasse die mehrere funktionen hat wie bspw. suchen.
jetzt hab ich eine abgeleitete klasse und will die funktion von der Basisklasse aufrufen sodass genau das selbe ausgeführt wird wie in der Basisklasse.
void TEST::einfügen(int x)
{
TEST *lp = this->TSET;
lp->PosiReset();bool eingefügt = false;
while ( eingefügt == false)
{
if ( x < lp->KWert() )
{
lp->inL(x);
lp->weiterL();
}if ( x > lp->KWert() )
{
lp->inR(x);
lp->weiterR();
}if ( lp->KWert() == x ) eingefügt = true;
}
}das wäre die funktion in der basisklasse. wie kann ich jetzt die funktion in der abgeleiteten klasse aufrufen?
danke schonmal im vorraus
mfg
-
-
Bitte benutz´ Code Tags, um deinen Quelltext zu formatieren. So ist er nicht leserlich und schreckt Leute ab, sich damit zu befassen.
-
Hä? Was genau willst du erreichen? Bitte beschreib´ dein Problem genau und erklär´ auch, was die einzelnen Variablen und deren Typ sind. Liege ich richtig, wenn ich vermute, dass du eine Liste aus polymorphen Objekten hast, die durch durchläufst und in Abhängigkeit des konkreten Typs bestimmte Methoden dieses Typs aufrufen möchtest?
-
-
void TEST::einfügen(int x) { TEST *lp = this->TSET; lp->PosiReset(); bool eingefügt = false; while ( eingefügt == false) { if ( x < lp->KWert() ) { lp->inL(x); lp->weiterL(); } if ( x > lp->KWert() ) { lp->inR(x); lp->weiterR(); } if ( lp->KWert() == x ) eingefügt = true; } }sorry hab nich gewusst das der das alles nach links zieht

also ich übergeb ein integer feld an eine klasse mit verschiedenen funktionen. oben jetzt eine funktion die weitere werte hinzufügen soll. die funktion bezieht sich auf einen BinBaum.
Jetzt hab ich eine Abgeleitete Klasse und zwar den AVL-Baum. Der soll genau die selben Funktionen können wie der BinBaum nur das ich immer auf die balance achten muss.
Ich denke das es nicht notwendig ist die ganzen Funktionen nochmal zu schreiben sondern einfach in der Klasse AVL-Baum die funktion einfuegen vom BinBaum aufzurufen.
Meine Frage ist jetzt wie ich die Funktion in der Klasse AVL-Baum aufrufen kann.Hoffe konnte es halbwegs erklären wenn noch fragen sind einfach schreiben.
Mfg
-
Du musst den Namen der Basisklasse als scope operator dem Methodennamen voranstellen:
class Base { public: void func() { ... } }; class Derived : public Base { public: void func() { // mach was ... // ruft func() der Klasse Base auf Base::func(); } };
-
super danke für die schnelle hilfe

-
Fehler 1 error C3867: "BinLis::drucke": Dem Funktionsaufruf fehlt die Argumentliste. Verwenden Sie "&BinLis::drucke", um einen Zeiger auf den Member zu erstellen.
der fehler kommt dabei.
ich habs jetzt quasi so gemacht:class BinLis { public: void drucke(); }; void BinLis::drucke() { //macht was } class BinBaum :public BinLis { public: void drucke(); }; void BinBaum::drucke() { BinLis::drucke; }ist irgendwas falsch? bzw muss ich was verändern?
-
wenn ich &BinLis::drucke; schreibe funktioniert das programm zwar aber er führ irgendwie nichts aus
-
Beim Funktionsaufruf fehlen die runden Klammern.
-
Halleluja schrieb:
wenn ich &BinLis::drucke; schreibe funktioniert das programm zwar aber er führ irgendwie nichts aus
Mit dem &-Operator holst du dir normalerweise eine Addresse. In diesem Falle die für die Funktion BinLis::drucke. (Ich sage normalerweise, weil der Operator überladen werden könnte, was aber oft nicht gemacht wird).
Um die Funktion aufzurufen, musst du, wie MFK bereits richtig gesagt hat die runden Klammern angeben.
-
ok das funktioniert mittlerweile danke euch

hab jetzt allerdings ein weiteres problem was die druckfunktion betrifft.
http://img690.imageshack.us/i/bspbinbaum.jpg/hab mal nen kleinen baum aufgezeichnet und geschrieben inwiefern die ausgabe gehen soll. und zwar zuerst das niedrigste und aufsteigend.
ich hab mir schon ewig viel gedanken gemacht kommt aber nicht drauf wie ich das lösen kann da der baum ja kein balance hat.hier mal mein versuch wo es aber viele möglichkeiten gibt das er nicht funktioniert xD
int anz = 0; int banz = 0; if( Posi->lNext != NULL) { banz = banz+1; weiterL(); if(Posi->lNext != NULL) { drucke(); } else { cout << Posi->Wert << " "; } } if(Posi->rNext != NULL) { weiterR(); if(Posi ->lNext != NULL) { drucke(); } else { cout << Posi->Wert << " "; drucke(); } } while(Posi->rNext != NULL) { for(int i=0; i<banz; i++) { zurück(); cout << Posi->Wert << " "; } } for(int i=0; i<=anz; i++) zurück(); if(Posi->rNext != NULL) { weiterR(); anz = anz+1; if(Posi->lNext != NULL) { drucke(); } else { cout << Posi->Wert << " "; drucke(); } }zur erklärung: mit weiterL(); kommt man ein element weiter nache links mit rechts das selbe nach rechts halt.
Posi->Wert gibt den aktuellen int wert der position aus.
mit zurück(); kommt man 1 element zurück.
ich hab einfach das problem das wenn ich lauter abzweigungen habe ich mir merken will wieviele schritte ich gegangen bin damit ich auch zurück komme. eventuell geht das natürlich auch viel leichter
ich brauch für den avl baum dann noch ne funktion die mir ein feld mit den werten von der inorder übergibt.
hoffe ihr könnt mir helfen

mfg
-
ok das problem hat sich mittlerweile erledigt (hoffe ich zumindest)
hab jetzt aber wieder ein anderes problem ^^
da der pointer am anfang nicht auf der wurzel liegt sondern am zuletzt eingefügten element muss ich den pointer erstmal zurücksetzten.die funktion sieht mittlerweile so aus:
PosiReset(); BinEle* x = Posi; int anz = 0; cout << KWert() << " "; if( Posi->lNext != NULL) { weiterL(); if(Posi->lNext != NULL) { drucke(); } else { cout << Posi->Wert << " "; } } if(Posi->rNext != NULL) { weiterR(); anz = anz+1; if(Posi ->lNext != NULL) { drucke(); } else { cout << Posi->Wert << " "; drucke(); } } for(int i=0; i<=anz; i++) { zurück(); } cout << Posi->Wert << " "; anz=0; if(Posi->rNext != NULL) { weiterR(); anz = anz+1; if(Posi->lNext != NULL) { drucke(); } else { cout << Posi->Wert << " "; drucke(); } }jetzt darf ich aber beim rekursiven aufruf die
PosiReset();
BinEle* x = Posi;
int anz = 0;wie kann ich das denn machen?
mfg