Funktionsüberschreibung in C++ [Funktionsüberladung vs. Überschreibung mit Beispielen]
Veröffentlicht: 2021-05-25Das Überschreiben von Funktionen in C++ ist eine Funktion, die es uns ermöglicht, eine Funktion in der untergeordneten Klasse zu verwenden, die bereits in ihrer übergeordneten Klasse vorhanden ist. Die untergeordnete Klasse erbt alle Datenelemente und die Elementfunktionen, die in der übergeordneten Klasse vorhanden sind. Wenn Sie eine Funktionalität in der untergeordneten Klasse überschreiben möchten, können Sie das Überschreiben von Funktionen implementieren. Das Überschreiben von Funktionen bedeutet, dass eine neuere Version der übergeordneten Klassenfunktion in der untergeordneten Klasse erstellt wird.
Inhaltsverzeichnis
C++-Funktionen
Eine C++-Funktion ist eine Gruppe von Anweisungen, die zusammenkommen, um eine Aufgabe auszuführen. Jedes Programm hat mindestens eine main()-Funktion und bestimmte Programme können zusätzliche Funktionen haben.
Die Funktionsdeklaration übermittelt dem Compiler den Funktionsnamen, die Parameter und den Rückgabetyp. Eine Funktionsdefinition bestimmt den Funktionskörper. Die C++-Standardbibliothek besteht aus vielen eingebauten Funktionen, die das Programm aufrufen kann. Eine Funktion kann eine Methode, eine Prozedur oder ein Unterprogramm sein.
Definieren einer Funktion
Die allgemeine Syntax einer C++-Funktion lautet:
Rückgabetyp Funktionsname (Parameterliste) {
Funktionskörper
}
Jede C++-Funktion besteht aus einem Funktionsheader und einem Body. Die Komponenten einer C++-Funktion sind:
Rückgabetyp – Der Rückgabetyp repräsentiert den Typ des Rückgabewerts der Funktion.
Funktionsname – Dies bezeichnet den Namen der Funktion. Der Funktionsname bildet zusammen mit der Parameterliste die Funktionssignatur.
Parameter – Ein Parameter ist ein Platzhalter für den von der Funktion zurückgegebenen Wert. Beim Aufruf einer Funktion wird dem Parameter, der als Aktualparameter bezeichnet wird, ein Wert übergeben.
Funktionskörper – Der Funktionskörper stellt die Liste der Anweisungen dar, die definieren, was die Funktion tun wird.
Aufruf einer Funktion
Um eine Funktion in C++ zu verwenden, müssen Sie die Funktion aufrufen oder aufrufen. Die Steuerung wird an die Funktion übergeben, die Funktion führt dann die gewünschte Aufgabe aus, und die return-Anweisung gibt die Steuerung an das Hauptprogramm zurück.
Sie müssen die erforderlichen Parameter einschließlich des Funktionsnamens übergeben, um eine Funktion aufzurufen. Wenn die Funktion einen Wert zurückgibt, kann der Wert gespeichert werden. Es gibt einige Möglichkeiten, Argumente an eine Funktion zu übergeben, während sie aufgerufen wird. Die Aufruftypen sind Call by Value, Call by Reference und Call by Pointer.
Funktionsüberschreibung in C++
Wenn eine abgeleitete Klasse oder untergeordnete Klasse eine Funktion definiert, die bereits in der Basisklasse oder übergeordneten Klasse definiert ist, wird dies in C++ als Funktionsüberschreibung bezeichnet. Das Überschreiben von Funktionen hilft uns, Laufzeitpolymorphismus zu erreichen. Es ermöglicht Programmierern, die spezifische Implementierung einer Funktion durchzuführen, die bereits in der Basisklasse verwendet wird.
Beispiel:
Quelle
Studieren Sie das oben angegebene Beispiel. Hier ist die Elternklasse „Base“ und die Kindklasse „Derived“.
Die Ausgabe des obigen Programms wird sein:
Abgeleitete Funktion
Die Funktion print() wird sowohl in der Base- als auch in der Derived-Klasse deklariert. Wenn wir die Funktion print() über das abgeleitete Klassenobjekt „derived1“ aufrufen, wird print() von der abgeleiteten Klasse aufgerufen und ausgeführt, indem dieselbe Funktion der Basisklasse überschrieben wird.
Funktionsweise des funktionsübergreifenden Prinzips
Quelle
Wie Sie im obigen Bild sehen können, wurde die Funktion der Basisklasse überschrieben, weil wir dieselbe Funktion über das Objekt der abgeleiteten Klasse aufgerufen haben.
Wenn wir die Funktion print() über ein Objekt der Klasse Base aufrufen, wird die Funktion nicht überschrieben. Zum Beispiel:
//Funktion der Basisklasse aufrufen
Basis basis1;
base1.print(); // Ausgabe: Basisfunktion
Die Ausgabe des obigen Codes lautet:
Basisfunktion
Zugriff auf überschriebene Funktionen in C++
Sie müssen den Bereichsauflösungsoperator „::“ verwenden, um auf die überschriebene Funktion zuzugreifen. Eine andere Möglichkeit, auf die überschriebene Funktion zuzugreifen, besteht darin, den Zeiger der Basisklasse zu verwenden, um auf ein Objekt der abgeleiteten Klasse zu zeigen, und die Funktion über den Zeiger aufzurufen.
Beispiel:
Quelle
Die Ausgabe des obigen Programms wird sein:
Abgeleitete Funktion
Basisfunktion
Funktionsweise der Funktion „Zugriff auf überschriebene“.
Quelle
Hier greift die Anweisung abgeleitet 1.print() auf die Funktion print() der Klasse Derived zu und die Anweisung abgeleitet2.Base::print() greift auf die Funktion print() der Klasse Base zu.
Aufrufen einer überschriebenen C++-Funktion aus der abgeleiteten Klasse
In diesem Code rufen wir die überschriebene Funktion innerhalb der Derived-Klasse selbst auf.
Funktionieren des überschriebenen Funktionsaufrufs aus der abgeleiteten Klasse
Quelle
Der Befehl Base::print() ruft die überschriebene Funktion innerhalb der Derived-Klasse auf.
Lernen Sie Software-Engineering-Kurse online von den besten Universitäten der Welt. Verdienen Sie Executive PG-Programme, Advanced Certificate-Programme oder Master-Programme, um Ihre Karriere zu beschleunigen.
Funktionsüberladung vs. Funktionsüberschreibung
Das Überladen von Funktionen wird zur Kompilierzeit erreicht und kann in der Basisklasse und der abgeleiteten Klasse durchgeführt werden. Es hilft, mehrere Definitionen der Funktionen bereitzustellen, indem die Signatur der Funktionen geändert wird, z. B. der Datentyp von Parametern oder Rückgabetypen.
Funktionsüberschreibung wird zur Laufzeit erreicht. Beim Überschreiben wird die Basisklasse in der abgeleiteten Klasse mit demselben Rückgabetyp und denselben Parametern neu definiert. Weitere Unterschiede zwischen Funktionsüberschreibung und Funktionsüberladung in C++ sind:
1. Erbschaft
Das Überschreiben von Funktionen kann nur mit Klassenvererbung verwendet werden, während das Überladen von Funktionen keine Klassenvererbung erfordert.
2. Funktionssignatur
Überladene Funktionen unterscheiden sich in der Signatur entweder in der Anzahl der Parameter oder in der Art der Parameter. Beim Funktionsüberschreiben bleiben die Funktionssignaturen gleich.
3. Funktionsumfang
Überschriebene Funktionen haben unterschiedliche Gültigkeitsbereiche, während überladene Funktionen denselben Gültigkeitsbereich haben.
4. Funktionsverhalten
Das Überschreiben von Funktionen ist wichtig, wenn eine abgeleitete Klassenfunktion anders oder mit zusätzlicher Funktionalität als die Basisklassenfunktion ausgeführt werden muss. Das Überladen von Funktionen wird implementiert, wenn Funktionen mit demselben Namen abhängig von den an sie übergebenen Parametern unterschiedliche Verhaltensweisen aufweisen müssen.
Wenn Sie mehr über Full-Stack-Softwareentwicklung erfahren möchten, schauen Sie sich das Executive PG-Programm in Full-Stack-Softwareentwicklung von upGrad & IIIT-B an, das für Berufstätige konzipiert ist und mehr als 500 Stunden strenge Schulungen, mehr als 9 Projekte, und Aufgaben, IIIT-B-Alumni-Status, praktische praktische Abschlussprojekte und Arbeitsunterstützung bei Top-Unternehmen.
Was ist funktionsüberschreibend?
Das Überschreiben von Funktionen ist ein Konzept in der objektorientierten Programmierung, das es einer Funktion innerhalb einer abgeleiteten Klasse ermöglicht, eine Funktion in ihrer Basisklasse zu überschreiben, jedoch mit einer anderen Signatur (und normalerweise mit einer anderen Implementierung). Ein wesentlicher Aspekt dabei ist, dass es der abgeleiteten Klasse nicht möglich ist, die Änderungen an der Basisklasse „rückgängig“ zu machen, oder zumindest nicht, ohne die Basisklasse weiter zu bearbeiten. Eine häufige Verwendung des Überschreibens von Funktionen besteht darin, eine Standardimplementierung in der Basisklasse bereitzustellen und dann mit einer bestimmten Implementierung in der abgeleiteten Klasse zu überschreiben.
Was sind die Unterschiede zwischen dem Überschreiben und Überladen von Funktionen?
Das Überschreiben von Funktionen tritt auf, wenn Sie eine Funktion mit demselben Namen wie eine Funktion erstellen, die bereits in einer Basisklasse vorhanden ist. In diesem Fall ersetzt die neue Funktion die vorhandene Funktion und kann anstelle der ursprünglichen Funktion verwendet werden. Überladen tritt auf, wenn Sie Funktionen mit demselben Namen, aber unterschiedlichen Parametern erstellen. In diesem Fall wird die neue Funktion zusätzlich zur ursprünglichen Funktion aufgerufen und beide Funktionen können problemlos in jedem Kontext verwendet werden.