Ich bin gerade auf verschiedene Überlademethoden gestoßen, wie Art des übergebenen Parameters, variierende Anzahl von Parametern, Rückgabetyp usw. Ich möchte nur wissen, dass ich eine Funktion mit folgenden zwei Versionen überladen kann
%Vor%Bitte lassen Sie mich den Grund dafür wissen.
Der einfachste Weg, dies zu verstehen, besteht darin, sich das Objekt, auf das Sie die Methode anwenden, als 0. Parameter vorzustellen:
z. B .: Denken Sie an
%Vor%als eine extravagante, vom Compiler unterstützte Methode, dies zu tun:
%Vor%Jetzt ist das Überladen auf der Grundlage von constness nur ein Spezialfall der Überlastung durch Parametertypen:
%Vor%kann man sich so vorstellen:
%Vor% Was die Nützlichkeit dieser Methode angeht, sind die Methoden begin
und end
für verschiedene std::
-Container die einfachsten Beispiele. Wenn vector
/ string
/ was auch immer nicht const ist und Sie begin()
aufrufen, erhalten Sie eine iterator
zurück, mit der Sie den Inhalt des ursprünglichen Containers ändern können. Dies sollte natürlich für Container, die mit const
markiert sind, nicht erlaubt sein. Daher ruft% ce_de% bei einem const-Vektor dank der const / non const-Überladung einen begin()
auf, der zum Lesen des Inhalts des Vektors verwendet werden kann , aber nicht ändern.
z.B.
%Vor%Was das Überladen nach Rückgabetyp betrifft, können Sie es in C ++ nicht tun. Sie können jedoch ziemlich anständig simulieren
Ja, Sie können das tun. (@Job, dies ist keine Überladung beim Rückgabetyp, dies ist eine Überladung auf 'const-state' der aufgerufenen Klasseninstanz)
Wenn die Instanz const ist, wird die zweite Variante aufgerufen, wenn nicht, wird die erste aufgerufen. Der praktische Nutzen ist, dass, wenn die Methode für eine konstante Instanz aufgerufen wird, Sie wahrscheinlich auch eine "const String & amp;" (z. B. wenn Sie einen Verweis auf ein Mitglied der Klasse zurückgeben), etwa so:
%Vor%Dies ist nicht nur möglich, es ist ein allgemein verwendetes Idiom.
Wenn beispielsweise die const
-Version einer Funktion aufgerufen wird, kann eine Referenz auf eine schreibgeschützte Version eines Ergebnisses zurückgegeben werden. Wenn jedoch die nicht const
Version aufgerufen wird, wird eine Kopie erstellt und zurückgegeben, die der Empfänger ändern kann. Durch die Implementierung einer const
Version werden wir von der Ausführung der Konstruktion gerettet, wenn wir wissen, dass sie nicht benötigt wird.
Tags und Links c++ function overloading constants