วิธีการติดตั้ง Copy Constructor ใน C ++



การทำความเข้าใจกับตัวสร้างเป็นเรื่องน่าฉงนสำหรับหลาย ๆ คน บทความนี้จะช่วยให้คุณเข้าใจแนวคิดของ Copy Constructor ใน C ++

ความเข้าใจ ตัวสร้าง เป็นเรื่องน่าฉงนสำหรับหลาย ๆ คน บทความนี้จะช่วยให้คุณเข้าใจแนวคิดของ Copy Constructor ใน C ++ คำแนะนำต่อไปนี้จะกล่าวถึงในบทความนี้

มาเริ่มกันเลยด้วยบทความนี้เกี่ยวกับ Copy Constructor ใน C ++





Copy Constructor คือตัวสร้างที่เริ่มต้นอ็อบเจ็กต์ของคลาสโดยใช้อ็อบเจ็กต์อื่นของคลาสเดียวกัน

ไวยากรณ์:



เรามีคีย์เวิร์ด const เนื่องจากเราต้องการทำให้ค่าคงที่และตรวจสอบให้แน่ใจว่าไม่ได้แก้ไขที่ใดที่หนึ่งในโค้ด เช่นเดียวกับตัวสร้างเริ่มต้นตัวสร้างการคัดลอกก็มีให้โดยคอมไพลเลอร์ สิ่งนี้เรียกว่า Default Copy Constructor ตัวสร้างสำเนาสามารถทำให้เป็นแบบส่วนตัวได้ เราไม่สามารถคัดลอกออบเจ็กต์ของคลาสได้เมื่อเราทำให้ตัวสร้างการคัดลอกเป็นแบบส่วนตัว

นี่คือรหัสตัวอย่าง :

#include โดยใช้การทดสอบคลาสเนมสเปซ std {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) // Normal constructor เรียกที่นี่ว่า test t2 = t1 // Copy constructor เรียกที่นี่ cout<< 't1.x = ' << t1.getX() cout << 'nt2.x = ' << t2.getX() return 0 } 

เอาท์พุต:



ตัวสร้างสำเนาเอาต์พุตใน C ++ - Edureka

คำอธิบาย

โปรแกรมข้างต้นเป็นการสาธิตพื้นฐานของตัวสร้างสำเนา เรามีการทดสอบชั้นเรียนโดยมีสมาชิกข้อมูลส่วนตัวประเภท int ที่เรียกว่า x จากนั้นเรามีตัวสร้างพารามิเตอร์ซึ่งกำหนด 7 ให้กับตัวแปร x เรามีตัวสร้างการคัดลอกซึ่งสร้างอินสแตนซ์ค่าของ t2 ด้วยค่า t1 แอดเดรสของ t2 ถูกส่งซึ่งเก็บค่า t1 และกำหนดให้กับ x มีฟังก์ชัน get ซึ่งส่งคืนค่า x

ฟังก์ชันหลักมีออบเจ็กต์ของการทดสอบคลาสที่เรียกว่า t1 มีค่าที่เกี่ยวข้องกับวัตถุนี้ซึ่งเป็นพารามิเตอร์ ฟังก์ชันหลักมีออบเจ็กต์อื่นของการทดสอบคลาสที่เรียกว่า t2 สิ่งนี้เริ่มต้นโดยใช้ตัวแปร t1 และตัวสร้างการคัดลอกถูกเรียกที่นี่ สุดท้ายฟังก์ชัน get ถูกเรียกด้วย t1 และ t2 เพื่อรับค่า x

ประเภท

เชฟ vs หุ่น vs เจนกินส์

ตัวสร้างการคัดลอกมีสองประเภท
⦁ตัวสร้างสำเนาตื้น
⦁ตัวสร้างสำเนาลึก

ไปต่อกับบทความนี้เรื่อง Copy Constructor ใน C ++

ตัวสร้างสำเนาตื้น:

ตัวสร้างสำเนาตื้นคือตัวสร้างสำเนาเริ่มต้น

ตัวอย่าง:

คนสองคนเข้าถึงฐานข้อมูลในเวลาเดียวกันและทำการเปลี่ยนแปลงค่าในระบบที่แตกต่างกันสองระบบ หากพวกเขาทำการเปลี่ยนแปลงในฐานข้อมูลการเปลี่ยนแปลงทั้งสองนี้จะแสดงในฐานข้อมูล วัตถุทั้งสองจะชี้ไปยังตำแหน่งหน่วยความจำเดียวกัน นี่คือตัวสร้างสำเนาตื้น สิ่งนี้ส่วนใหญ่เกิดขึ้นเมื่อเรากำลังทำงานกับตัวสร้างสำเนาเริ่มต้น นี่คือรหัสตัวอย่างสำหรับ: Shallow Copy Constructor:

#include ใช้การทดสอบคลาสเนมสเปซ std {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 } 

เอาท์พุต:

คำอธิบาย:

ในโค้ดด้านบนเราใช้ตัวสร้างสำเนาเริ่มต้นที่คอมไพเลอร์มีให้ ดังนั้นจึงเป็นตัวสร้างสำเนาตื้น

ไปต่อกับบทความนี้เรื่อง Copy Constructor ใน C ++

ตัวสร้างสำเนาลึก

Deep Copy Constructor คือตัวสร้างสำเนาที่ผู้ใช้กำหนดเอง
ตัวอย่างเช่น:
เมื่อคนสองคนต้องทำการนำเสนอและทั้งคู่คัดลอกจากแหล่งเดียวกันสำเนาจะแยกกัน ดังนั้นเมื่อคุณทำการแก้ไขเฉพาะสำเนาอื่นจะไม่ได้รับผลกระทบ นี่คือ Deep Copy Constructor วัตถุทั้งสองจะชี้ไปที่ตำแหน่งหน่วยความจำที่ต่างกันและการเปลี่ยนแปลงในวัตถุจะไม่มีผลกระทบใด ๆ กับอีก หน่วยความจำได้รับการจัดสรรแบบไดนามิก

นี่คือรหัสตัวอย่างสำหรับ: Deep Copy Constructor:

#include โดยใช้การทดสอบคลาสเนมสเปซ std {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) // Normal constructor เรียกที่นี่ว่า test t2 = t1 // Copy constructor เรียกที่นี่ cout<< 't1.x = ' << t1.getX() cout << 'nt2.x = ' << t2.getX() return 0 } 

เอาท์พุต:

คำอธิบาย

นี่เป็นรหัสเดียวกับที่เราใช้ข้างต้นโดยให้ผลลัพธ์ที่คล้ายกัน เป็นตัวสร้างสำเนาที่กำหนดโดยผู้ใช้และด้วยเหตุนี้จึงเป็นตัวสร้างสำเนาลึก

ดังนั้นเราจึงมาถึงตอนท้ายของบทความนี้ในเรื่อง 'Copy Constructor in C ++' หากคุณต้องการเรียนรู้เพิ่มเติมโปรดดูไฟล์ โดย Edureka บริษัท การเรียนรู้ออนไลน์ที่เชื่อถือได้ หลักสูตรการฝึกอบรมและการรับรอง Java J2EE และ SOA ของ Edureka ได้รับการออกแบบมาเพื่อฝึกอบรมคุณสำหรับแนวคิด Java ทั้งหลักและขั้นสูงพร้อมกับกรอบงาน Java ต่างๆเช่น Hibernate & Spring

มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็นของบล็อกนี้และเราจะติดต่อกลับโดยเร็วที่สุด