ตัวสร้างสำเนา
ในภาษา C++ ฟังก์ชันที่มีชื่อเดียวกับชื่อคลาสและมีพารามิเตอร์ที่เป็นทางการเป็นประเภทอ้างอิงของอ็อบเจ็กต์ของคลาสนี้เรียกว่า Copy Constructor เช่นเดียวกับ Constructor ระบบจะสร้างฟังก์ชันขึ้นมาโดยอัตโนมัติเมื่อเราไม่ได้กำหนดไว้ ดำเนินการกำหนดง่ายๆ ที่สอดคล้องกันระหว่างสมาชิกอ็อบเจ็กต์สองตัว ใช้ในการเตรียมใช้งานอ็อบเจ็กต์ เช่น สถานการณ์ต่อไปนี้:
#include<iostream>usingnamespacestd;#definePI3.1415classCircle{private:doubleR;public:Circle(doubleR);Circle(Circle&A);doublearea();doublegirth();};Circle::Circle(doubleR){cout<<ตัวสร้าง <<endl;this->R=R;}วงกลม::วงกลม(วงกลม&A){cout<<CopyConstructor<<endl;this->R=AR;}doubleCircle::area(){returnPI*R*R;} doubleCircle::เส้นรอบวง(){return2*PI*R;}intmain(){CircleA(5);CircleB(A);return0;}
ในตัวอย่างนี้ มีการกำหนดคลาส Circle และตัวสร้างที่มีพารามิเตอร์และตัวสร้างการคัดลอกจะถูกกำหนดตามลำดับ จากนั้นวัตถุ A จะถูกกำหนดในฟังก์ชันหลัก ค่าเริ่มต้นจะถูกส่งผ่านเข้าไป และตัวสร้างที่มีพารามิเตอร์จะถูกเรียก และกำหนดวัตถุ B และเริ่มต้นวัตถุ B ผ่านวัตถุ A ผลการวิ่งมีดังนี้:
อ็อบเจ็กต์ A ที่กำหนดไว้เป็นครั้งแรกเรียกตัวสร้างด้วยพารามิเตอร์ และอ็อบเจ็กต์ B ตัวที่สองถูกเตรียมใช้งานผ่านอ็อบเจ็กต์ A ดังนั้นตัวสร้างการคัดลอกจึงถูกเรียก
โปรดลองบนคอมพิวเตอร์ของคุณด้วย
คุณอาจมีคำถาม ในตอนแรกเราบอกว่าถ้าเราไม่กำหนดตัวสร้างการคัดลอก ตัวสร้างสำเนาจะถูกสร้างขึ้นโดยอัตโนมัติสำหรับเรา แล้วทำไมเราต้องกำหนดมันเองด้วย? นั่นเป็นเพราะตัวสร้างการคัดลอกเริ่มต้นดำเนินการมอบหมายอย่างง่าย ๆ เท่านั้น ในบางกรณี ปัญหานี้อาจเกิดขึ้นเกี่ยวข้องกับ การคัดลอกแบบลึก และ แบบตื้น เราจะแนะนำให้คุณทราบรายละเอียดในส่วนถัดไป!