Jak implementovat konstruktor kopírování v C ++?



Porozumění konstruktérům bylo pro mnohé záhadou. Tento článek vám pomůže demystifikovat koncept Copy Constructor v C ++

Porozumění Konstruktéři byla pro mnohé záhadou. Tento článek vám pomůže demystifikovat koncept Copy Constructor v C ++. V tomto článku se budeme zabývat následujícími ukazateli,

Pojďme tedy začíts tímto článkem o Copy Constructor v C ++





Copy Constructor je konstruktor, který inicializuje objekt třídy pomocí jiného objektu stejné třídy.

Syntax:



java najít nejvyšší hodnotu v poli

Máme klíčové slovo const, protože chceme, aby hodnota byla konstantní a ujistěte se, že není někde v kódu upravena. Stejně jako výchozí konstruktor je konstruktor kopie také poskytován kompilátorem. Tomu se říká Default Copy Constructor. Kopírovací konstruktory lze nastavit jako soukromé. Nemůžeme kopírovat objekty třídy, když uděláme konstruktor kopírování soukromým.

Zde je příklad kódu :

#include using namespace std class test {private: int x public: test (int x1) {x = x1} test (const test & t2) {x = t2.x} int getX () {return x}} int main () {test t1 (7) // Normální konstruktor se zde nazývá test t2 = t1 // Kopírovat konstruktor se zde nazývá cout<< 't1.x = ' << t1.getX() cout << 'nt2.x = ' << t2.getX() return 0 } 

Výstup:



Konstruktor výstupu a kopírování v jazyce C ++ - Edureka

Vysvětlení

Výše uvedený program je základní ukázkou konstruktoru kopie. Máme třídní test se soukromým datovým členem typu int, který se nazývá x. Pak máme parametrizovaný konstruktor, který přiřadí 7 proměnným x. Máme konstruktor kopírování, který vytváří instanci hodnoty t2 s hodnotou t1. Je odeslána adresa t2, která má hodnotu t1 a je přiřazena k x. Existuje funkce get, která vrací hodnotu x.

Hlavní funkce má objekt třídního testu s názvem t1. K tomuto objektu je přidružena hodnota, jedná se o parametr. Hlavní funkce má další objekt třídního testu s názvem t2. To je inicializováno pomocí proměnné t1 a je zde volán konstruktor kopírování. Nakonec se funkce get volá s ohledem na t1 a t2, aby se získala hodnota x.

Typy

Existují dva typy konstruktoru kopírování.
⦁ Konstruktor mělké kopie
⦁ Konstruktor hlubokých kopií

Pokračujeme tímto článkem o Copy Constructor v C ++

co je keyerror v pythonu

Konstruktor mělké kopie:

Konstruktor mělké kopie je výchozí konstruktor kopírování.

Příklad:

Dva lidé přistupují k databázi současně a provádějí změny hodnot ve dvou různých systémech. Pokud provedou změny v databázi, zobrazí se v databázi obě tyto změny. Oba objekty budou ukazovat na stejné místo v paměti. Toto je konstruktor mělké kopie. K tomu většinou dochází, když pracujeme s výchozím konstruktorem kopie. Zde je příklad kódu pro: Konstruktor mělké kopie:

#include using namespace std class test {public: int y, z test (int y1, int z1) {y = y1 z = z1}} int main () {test a (7,13) cout<<'the sum is: '<< a.y+a.z return 1 } 

Výstup:

Vysvětlení:

Ve výše uvedeném kódu používáme výchozí konstruktor kopírování poskytovaný kompilátorem. Proto je to konstruktér mělké kopie.

Pokračujeme tímto článkem o Copy Constructor v C ++

Konstruktor hlubokých kopií

Deep Copy Constructor je uživatelem definovaný konstruktor kopírování.
Například:
Když musí dva lidé udělat prezentaci a oba kopírují ze stejného zdroje, jsou kopie samostatné. Když tedy provedete úpravy, nebude ovlivněna pouze druhá kopie. Toto je Deep Copy Constructor. Oba objekty budou ukazovat na různá místa v paměti a změny v jednom nebudou mít žádný vliv na druhé. Paměť je dynamicky alokována.

co je ide v Javě

Zde je ukázkový kód pro: Deep Copy Constructor:

#include using namespace std class test {private: int x public: test (int x1) {x = x1} test (const test & t2) {x = t2.x} int getX () {return x}} int main () {test t1 (7) // Normální konstruktor se zde nazývá test t2 = t1 // Kopírovat konstruktor se zde nazývá cout<< 't1.x = ' << t1.getX() cout << 'nt2.x = ' << t2.getX() return 0 } 

Výstup:

Vysvětlení

Jedná se o stejný kód, který jsme použili výše, což poskytuje podobný výstup. Jedná se o uživatelem definovaný konstruktor kopírování, a proto se jedná o konstruktor hlubokého kopírování.

Tak jsme dospěli ke konci tohoto článku o „Copy Constructor in C ++“. Pokud se chcete dozvědět více, podívejte se na Edureka, důvěryhodná online vzdělávací společnost. Výcvikový a certifikační kurz Edureka Java J2EE a SOA je navržen tak, aby vás vyškolil jak pro základní, tak pro pokročilé koncepty Java spolu s různými rámci Java jako Hibernate & Spring.

Máte na nás dotaz? Uveďte to prosím v sekci komentářů tohoto blogu a my se vám ozveme co nejdříve.