Как да приложим конструктор за копиране в C ++?



Разбирането на конструкторите е загадка за мнозина. Тази статия ще ви помогне да демистифицирате концепцията за конструктор на копия в C ++

Разбиране Конструктори е загадка за мнозина. Тази статия ще ви помогне да демистифицирате концепцията за конструктор на копия в C ++. Следните указания ще бъдат обхванати в тази статия,

Така че нека започнемс тази статия за Конструктор на копиране в C ++





Конструктор за копиране е конструктор, който инициализира обект от клас, използвайки друг обект от същия клас.

Синтаксис:



Имаме ключовата дума const, защото искаме да направим стойността константа и да се уверим, че тя не е модифицирана някъде в кода. Подобно на конструктор по подразбиране, конструкторът на копие също се предоставя от компилатора. Това се нарича Конструктор на копиране по подразбиране. Конструкторите за копиране могат да бъдат направени частни. Не можем да копираме обектите от класа, когато правим конструктора за копиране частен.

Ето примерен код :

#include с използване на пространство за имена 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) // Тук се извиква нормален конструктор test t2 = t1 // Конструктор за копиране се извиква тук cout<< 't1.x = ' << t1.getX() cout << 'nt2.x = ' << t2.getX() return 0 } 

Изход:



какво е събитие в javascript

Конструктор за изходно копиране в C ++ - Edureka

Обяснение

Горната програма е основна демонстрация на конструктор за копиране. Имаме тест на клас с частен член от данни от тип int, наречен x. Тогава имаме параметризиран конструктор, който присвоява 7 на променливите x. Имаме конструктор за копиране, който инстанцира стойността на t2 със стойността на t1. Изпраща се адрес на t2, който съдържа стойността на t1 и е присвоен на x. Съществува функция get, която връща стойността на x.

Основната функция има обект на клас тест, наречен t1. Има стойност, свързана с този обект, това е параметър. Основната функция има друг обект на тест на клас, наречен t2. Това се инициализира с помощта на променливата t1 и тук се извиква конструкторът за копиране. И накрая, функцията get се извиква по отношение на t1 и t2, за да получи стойността на x.

Видове

Има два типа конструктор за копиране.
Con Конструктор за плитки копия
⦁ Конструктор за дълбоко копиране

Продължавайки с тази статия за Конструктор на копиране в C ++

Конструктор за плитки копия:

Конструктор за плитки копия е конструктор за копиране по подразбиране.

Пример:

Двама души имат достъп до база данни едновременно и правят промени в стойностите в две различни системи. Ако те направят промени в базата данни, тогава двете промени ще бъдат показани в базата данни. И двата обекта ще сочат към едно и също място в паметта. Това е конструктор за плитки копия. Това се случва най-вече, когато работим с конструктора за копиране по подразбиране. Ето примерен код за: Конструктор за плитки копия:

как да използвам гнезда в java -
#include използване на пространство за имена 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 } 

Изход:

Обяснение:

В горния код използваме конструктор за копиране по подразбиране, предоставен от компилатора. Следователно това е конструктор за плитки копия.

Продължавайки с тази статия за Конструктор на копиране в C ++

Конструктор за дълбоко копиране

Deep Copy Constructor е дефиниран от потребителя конструктор за копиране.
Например:
Когато двама души трябва да направят презентация и двамата копират от един и същи източник, копията са отделни. Така че, когато правите модификации, само другото копие не се засяга. Това е конструктор за дълбоко копиране. И двата обекта ще сочат към различни места в паметта и промените в единия няма да имат ефект върху другия. Паметта се разпределя динамично.

Ето примерен код за: Конструктор за дълбоко копиране:

#include с използване на пространство за имена 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) // Тук се извиква нормален конструктор test t2 = t1 // Конструктор за копиране се извиква тук cout<< 't1.x = ' << t1.getX() cout << 'nt2.x = ' << t2.getX() return 0 } 

Изход:

java конвертира двойно в цяло число

Обяснение

Това е същият код, който използвахме по-горе, давайки подобни резултати. Това е дефиниран от потребителя конструктор за копиране и следователно е конструктор за дълбоко копиране.

По този начин стигнахме до края на тази статия за „Конструктор на копиране в C ++“. Ако искате да научите повече, разгледайте от Edureka, доверена компания за онлайн обучение. Курсът за обучение и сертифициране на Java J2EE и SOA на Edureka е предназначен да ви обучи както за основните, така и за разширените Java концепции, заедно с различни Java рамки като Hibernate & Spring.

Имате въпрос към нас? Моля, споменете го в раздела за коментари на този блог и ние ще се свържем с вас възможно най-скоро.