Tiefkopie C ++

Tiefkopie C ++
Die Kopie bedeutet dasselbe für dieselbe Nachbildung eines Originalobjekts. Innerhalb der Programmierung gibt es verschiedene Methoden, um Kopien von Objekten zu erstellen. Die Kopie von Objekten, Variablen können mit einem Kopierkonstruktor oder mit dem Standardzuweisungsoperator "=" erfolgen. Zwei Arten von Kopien können im C ++ - Code hergestellt werden, ich.e., flache und tiefe Kopie. Sie können eine verwenden, um eine Variable oder Objekt im Code zu kopieren. Wenn unser Objekt Variablen enthält, die im gesamten Programm dynamisch zugewiesen werden, müssen wir eine tiefe Kopie solcher Objekttypen erstellen. In diesem Artikel wird sehen, wie eine tiefe Kopie in C erstellt werden kann++.

Flache Kopie vs. Tiefe Kopie

Bevor Sie sich das Beispiel einer tiefen Kopie ansehen, muss man auch die flache Kopie verstehen. Die flache Kopie wurde also erstellt, wenn Sie alle Variablen eines Objekts zu einem anderen Objekt kopieren möchten. Sie können es ein Spiegelbild nennen, aber es ist nicht das Original. Sowohl die ursprünglichen als auch die neuen Objekte, ich.e., Replica, verweist auf dieselbe Speicheradresse in der flachen Kopie. Dies bedeutet, dass sowohl ursprüngliche als auch Replik -Objekte mit derselben Speicheradresse erkannt und abgerufen werden. Wenn ein Benutzer versucht, Änderungen in einem Objekt vorzunehmen, spiegelt er automatisch die Änderung eines anderen Objekts aufgrund derselben Speicheradresse automatisch wider. Dies kann bei der Ausführung viele Fehler verursachen, und das reale und Replikatobjekt wird zerstört. Daher soll es vermeiden, eine flache Kopie zu verwenden, wenn Sie mit dynamisch zugewiesenen Variablen eines bestimmten Objekts gearbeitet haben.

Es wird empfohlen, die tiefe Kopie anstelle der flachen Kopie zu verwenden, während die dynamisch zugewiesenen Variablen verwendet werden. Die tiefe Kopie kann erhalten werden, indem alle Daten eines Objekts kopiert werden, ich.e., Variablenwerte, Speicherzuweisung und Ressourcen zum neuen, während sowohl das reale als auch das Replikatobjekt eine völlig andere Speicheradresse haben. Es kann für ein Objekt mit Variablen verwendet werden, die dynamisch zugewiesen werden. Also, beginnen wir damit.

Beispiel: Tiefkopie

Wir haben unser Beispiel gestartet, um das Tiefenkopiekonzept in der C ++ - Programmierung zu demonstrieren, indem wir die Shell -Konsole des Ubuntu 20 öffnen.04 System. Das erste, was Sie tun müssen, ist eine neue C ++ - Datei für Code zu erstellen. Der ewige, alte und einfachste Befehl der Linux -Verteilung, um ein Dokument in seinem Shell -Terminal zu erstellen. Das einfache Wort „Touch“ wird mit dem Titel eines zu generierenden Dokuments verwendet. Stellen Sie sicher, dass Sie die C ++ - Erweiterung am Ende des Dokumentnamens hinzufügen. Andernfalls funktioniert der Code bei der Dateiausführung nicht auf der Shell. Nach dieser Dateierstellung kommt der Schritt zum Öffnen.

Das Beste am Ubuntu 20.04 ist mit einigen integrierten Editoren, um Dateien zu öffnen und zu bearbeiten. Es enthält den Editor „VIM“, um in einer sehr farbenfrohen Umgebung, den Texteditor zu bearbeiten, um den Code in der einfachsten Umgebung zu aktualisieren und zu bearbeiten, und den GNU -Nano -Editor zum Erstellen und Bearbeiten des Code. So haben wir den Code -Editor abgelegt, ich.e., Gnu Nano -Herausgeber in unserem Fall, und das Nano -Wort wird verwendet, um das Dokument zu öffnen „Deep.CC ”. Die Anweisungen zum Generieren und Starten des Dokuments „Deep.CC ”werden im Screenshot unten angegeben.

Nachdem der Gnu Nano -Editor für Code das Textdokument „Deep gestartet hat.CC ”darin müssen wir zuerst einige Bibliotheken hinzufügen. Diese Bibliotheken sind für die Ausführung von Code auf eine bestimmte Weise erforderlich. Der Eingabe-Output-Stream "IO" wird mit dem Wort "include" mit einem Hash-Charakter enthalten, i.e., "#". Die Verwendung eines Standard -Namespace ist erforderlich, damit C ++ - Code die darin enthaltenen CIN- und Cout -Anweisungen verwendet. Der Code wurde mit der Erklärung einer neuen Klasse mit dem Namen "Test" begonnen. Diese Klasse wurde mit drei privaten Ganzzahl -Datenmitgliedern initialisiert. Die Variablen „Len“ und „Wid“ sind die normalen Ganzzahlvariablen, während das „Alter“ eine Zeigervariable ist. Der TEST () -Konstruktor wurde initialisiert und wird verwendet, um das Zeiger „Alter“ direkt mit einem ganzzahligen Typ dynamisch zu initialisieren.

Eine benutzerdefinierte Funktion mit dem Namen "Set" ohne Rückgabetyp wurde gestartet. In seinen Parametern werden drei Argumente vom Typ ganzzahliger Typ benötigt, ich.e., "L", "W" und "A". Diese Funktion wird hier verwendet, um die Werte aus der Funktion main () zu erhalten und sie in den Variablen zu speichern, oder Datenmitglieder, die zuvor zu Beginn einer Klasse „Test“ i deklariert wurden.e., "Len", "Wid" und Zeigertyp Variable "Alter". Eine andere benutzerdefinierte Funktion namens "display ()" wurde ohne parametrische Werte verwendet. Diese Funktion verwendet darin eine einzelne Standard -Cout -Anweisung. Die Cout -Anweisung verwendet die Variablen "Len", "Wid" und "*Age", um die bereits festgelegten Werte nach der Funktion set () anzuzeigen.

Jetzt haben wir den parametrisierten Konstruktor -Funktionstest () des „Tests“ der Klasse verwendet, um das Konzept der Tiefenkopie in unserem Programm zu implementieren. Dieser parametrisierte Konstruktor wird aufgerufen, wenn ein neues Objekt erstellt wird. Es wird den Zeiger vom Typ "Test" in seinem Parameter erhalten, i, ich.e., Originalobjekt. Dieses erste in Parameter übergebene Objekt wird verwendet, um alle Daten des ursprünglichen Objekts innerhalb des neuen Objekts zu kopieren, wie es im Bild demonstriert ist. Der Klassentest -Destruktor wurde verwendet, um das Objekt des Klassentests zu zerstören und gleichzeitig die dynamisch zugewiesene Speichervariable „Alter“ zu löschen, nachdem die Programmausführung abgeschlossen ist. Die Testklasse wurde hier geschlossen und die Ausführung wird mit der Hauptfunktion gestartet.

Jetzt kommt die Hauptfunktion. Die Ausführung beginnt von hier aus, wenn das erste Objekt, „T1“ des Klassentests, erstellt wird. Der Konstruktor "test ()" wird automatisch mit der Erstellung von Objekt "T1" ausgeführt und der dynamischen Variablen "Alter" dynamischer Kuppelspeicher zugewiesen. Die Funktion set () wurde unter Verwendung von Objekt T1 aufgerufen und um die Werte auf die Variablen einzustellen, wird die Funktion display () aufgerufen, um die Werte auf der Shell anzuzeigen. Das zweite Objekt, T2, wurde erstellt, die alle Daten von Objekt T1 durch Zuweisung kopieren. Der parametrisierte Konstruktor wird hier aufgerufen. Wenn wir die Anzeige () -Methode mit Objekt T2 aufrufen, wird das gleiche Ergebnis angezeigt wie für Objekt 1. Der Destruktor wird automatisch ausgeführt, wenn das Objekt funktioniert hat.

Nach der Zusammenstellung mit G ++ und Ausführung mit “./A.raus “Wir haben die gleichen Ergebnisse der Anzeige () -Methode für Objekte T1 und T2.

Abschluss

Innerhalb dieses Artikelhandbuchs finden Sie die Erklärung der Tiefenkopie zusammen mit einer Beispieldemonstration. Wir haben diesen Leitfaden mit der Definition der Kopie, der tiefen Kopie und der flachen Kopie -Begriffe begonnen. Anschließend haben wir den Unterschied zwischen der Verwendung von Deep Copy und einer flachen Kopie innerhalb von C ++ - Code zum Kopieren von Objekten abgedeckt. Wir haben ein kurzes und einfaches Beispiel für das Deep Copy -Programm hinzugefügt, um es mehr zu demonstrieren. Wir glauben daher, dass dieser Artikel für alle naiven C ++ - Benutzer und diejenigen, die bereits Experten in ihrer Domäne sind.