Statische Funktionsaufruf nicht statische Funktion in C ++ [geschlossen]

8

Ich habe eine Klasse wie ::

%Vor%

Da call () ein statisches Member ist, kann es nicht-statische Funktionen aufrufen. Daher denke ich, Check () in call () zu verwenden, um den Test-Zeiger zu erstellen und dann auf Check () zu zeigen, aber ich denke, es ist nicht gut, gibt es einen besseren Weg, dies zu tun? Ich kann alle Dinge in der statischen Funktion neu schreiben, also muss ich Check () nicht erneut aufrufen, aber was ich will, ist, den Code in Check () wiederzuverwenden und wiederholten Code zu vermeiden.

    
CJAN.LEE 11.11.2012, 13:17
quelle

4 Antworten

9

Da Sie eine Instanz benötigen, müssen Sie entweder eine Instanz erstellen, eine statische Instanz verwenden oder sie an call() :

übergeben %Vor%     
Axel 11.11.2012, 13:23
quelle
3

Das hört sich so an, als gäbe es ein schlechtes Design.

Wie auch immer, Sie können eine Instanz von Test in Call erstellen und Check für diese Instanz aufrufen. Die Implementierung von Call wäre dann etwa so:

%Vor%

Beachten Sie jedoch, dass, wenn Check etwas mit den Testmitgliedern macht, dies natürlich nur für das erstellte Testobjekt gilt. Ich würde überdenken, ob Sie wirklich möchten, dass der Anruf statisch ist, oder Check, nicht zu sein.

    
W. Goeman 11.11.2012 13:22
quelle
0

Der Schlüssel zwischen einer nicht statischen und einer statischen Elementfunktion ist, dass diese kein Objekt hat. Es hat jedoch immer noch dieselben Zugriffsrechte wie alle anderen Mitglieder.

Wenn Sie eine nicht statische Elementfunktion von einem statischen Element aufrufen möchten, müssen Sie dennoch ein Objekt erstellen. Häufig würde die statische Elementfunktion in einem bestimmten Kontext übergeben, um zu einem Objekt zu gelangen. Von den Klängen Ihrer Frage scheint es, dass die statischen und die nicht-statischen Funktionen ähnliche Dinge tun sollen, die nicht erfordern und widersprechen. In diesem Fall ist es wahrscheinlich am besten, den gemeinsamen Teil, nicht abhängig von irgendeinem Objekt, in eine andere Funktion zu faktorisieren, die dann von call() und Check() aufgerufen wird:

%Vor%

Wenn der allgemeine Code ein Objekt benötigt, gibt es keinen anderen Weg, als ein Objekt in Ihrer statischen Elementfunktion zu finden.

    
Dietmar Kühl 11.11.2012 13:27
quelle
0

Darauf gibt es keine einfache Antwort. Es gibt verschiedene Dinge, die Sie tun können, aber was richtig ist, hängt davon ab, was Ihr Code bedeutet. Es ist eine Design Frage, keine Programmierfrage.

Sie haben bereits verschiedene Programmiertricks vorgeschlagen, wie z. B. das Erstellen eines Test -Zeigers (tatsächlich benötigen Sie keinen Test -Zeiger, nur ein Test -Objekt). Ich könnte mehr Tricks vorschlagen, zum Beispiel könnten Sie call() so umschreiben, dass es nicht statisch ist, oder (fast dasselbe) Sie könnten einen Test -Zeiger als Parameter von call() übergeben und das verwenden, oder Sie könnten Erstelle ein globales Test -Objekt und verwende dieses. Keiner von diesen kommt zum Kern des Problems. Um Ihre Frage zu beantworten, müssen Sie sich Fragen stellen wie, warum habe ich call() statisch gemacht, warum muss eine statische Funktion eine nicht statische Funktion aufrufen?

Wenn Sie das erklären können, dann ist es einfacher, spezifischere Ratschläge zu geben.

    
john 11.11.2012 13:24
quelle

Tags und Links