Close() von CAsyncSocket überladen. Wie?
-
Hallo zusammen,
ich möchte die Close()-Funktion eines CAsyncSockets überladen, damit ich in einer abgeleiteten Klasse mit einer statischen Variabel die Anzahl Verbindungen zählen kann...Klar es ginge auch so:
void CMyClass::Disconnect() { counter--; CAsyncSocket::Close(); }
aber geht es auch Close zu überladen?
(Mit einer Memberfunktion der neuen Klasse deklariert als virtual geht es nicht...)Danke fürs lesen, rico
-
Xantos schrieb:
aber geht es auch Close zu überladen?
(Mit einer Memberfunktion der neuen Klasse deklariert als virtual geht es nicht...)Danke fürs lesen, rico
willst du die methode jetzt überladen oder überschreiben?!
virtual schreibst du vor die methode der parentklasse, nicht vor die der subklasse.Esco
-
Ich möchte folgendes:
void CMyClass::Close() { counter--; CAsyncSocket::Close(); }
Dass man virtual bei der parentklasse verwenden muss ist mir auch aufgefallen...
kann man das irgendwie umgehen?
Was ist der unterschied zwischen überladen und überschreiben?
Rico
-
also es gibt die Funktion Close(void)
überladen wäre, wenn du noch weitere Close Funktionen schreiben würdest, mit anderen Übergabeparametern. du rufst dann immer Close auf, aber einmal mit Close(5), und ein anderes mal mit Close("Schliessen", 22).
Überscheiben: du leitest deine eigene Klasse ab und ersetzt den Code der ursprünglichen Methode (also das was du amchen möchtest).
Du kannst jetzt auch Close überladen, dh, dass du ihm mindestens ein übergabeparameter mitgeben musst. macht meines erachtens hier überhaupt keinen sinn, da du eigentlich nichts übergeben willst. desweiteren gäbe es die funktion Close(void) ja noch, welche aber überhaupt nicht benutzt werden darf, da sonst dein counter nicht mehr funktioniert, also musst du diese ursprüngliche funktion entweder überschreiben, oder ihren aufruf unterbinden, was wohl keinen sinn macht, da du sie dazu eigentlich wieder überschreiben musst, zumindest fällt mir da grad nix alternatives ein, wie man einen funktionsaufruf unterbindet. würde ja nur übermäßig verwirrung stiften.
Esco
-
Xantos so wie es in deinem Code steht wird es gemacht. Gedankenlesen kann der PC nicht, also musst du die close()-funktion mit ner eigenen Überschreiben und in ihr die close()-funktion von CAsyncSocket aufrufen
-
Und wie überschreibe ich das nun, sodass ich keine parameter brauche (nicht überladen muss)?
rico
-
GENAU SO:
Xantos schrieb:
Klar es ginge auch so:
void CMyClass::Disconnect() { counter--; CAsyncSocket::Close(); }
Esco
-
richtiges überschreiben wäre dann:
CXantosSocket::Close() { Counter--; CAsyncSocket::Close(); }
Esco
-
dieses close() wird aber nicht aufgerufen...
rico
-
dann machsts eben so wie in deinem eingangsbeispiel.
sorry hab grad keine zeit des durchzutesten.Esco