ตัวสร้างการคัดลอกเป็นประเภทของตัวสร้าง มันสร้างวัตถุและเริ่มต้นด้วยวัตถุของคลาสเดียวกัน หากคอนสตรัคเตอร์การคัดลอกไม่ได้กำหนดไว้ในคลาส คอมไพเลอร์เองจะกำหนดหนึ่งตัว คอนสตรัคเตอร์การคัดลอกเป็นสิ่งจำเป็นสำหรับคลาสที่มีตัวแปรพอยน์เตอร์หรือการจัดสรรหน่วยความจำแบบไดนามิก
โปรแกรมที่แสดงตัวสร้างการคัดลอกมีดังนี้
ตัวอย่าง
#include<iostream> using namespace std; class Demo { private: int num1, num2; public: Demo(int n1, int n2) { num1 = n1; num2 = n2; } Demo(const Demo &n) { num1 = n.num1; num2 = n.num2; } void display() { cout<<"num1 = "<< num1 <<endl; cout<<"num2 = "<< num2 <<endl; } }; int main() { Demo obj1(10, 20); Demo obj2 = obj1; obj1.display(); obj2.display(); return 0; }
ผลลัพธ์
num1 = 10 num2 = 20 num1 = 10 num2 = 20
ในโปรแกรมข้างต้น คลาสสาธิตประกอบด้วยคอนสตรัคเตอร์แบบกำหนดพารามิเตอร์ปกติและคอนสตรัคเตอร์คัดลอก นอกจากนี้ ยังมีฟังก์ชันที่แสดงค่าของ num1 และ num2 ได้ดังนี้
class Demo { private: int num1, num2; public: Demo(int n1, int n2) { num1 = n1; num2 = n2; } Demo(const Demo &n) { num1 = n.num1; num2 = n.num2; } void display() { cout<<"num1 = "<< num1 <<endl; cout<<"num2 = "<< num2 <<endl; } };
ในฟังก์ชัน main() คลาสอ็อบเจ็กต์ obj1 ถูกเตรียมใช้งานโดยใช้คอนสตรัคเตอร์แบบกำหนดพารามิเตอร์ ออบเจ็กต์ obj2 เริ่มต้นโดยใช้ตัวสร้างการคัดลอก และค่าของ obj1 จะถูกคัดลอกไปยัง obj2 ในที่สุดค่าของ obj1 และ obj2 จะปรากฏขึ้น ด้านล่างนี้
Demo obj1(10, 20); Demo obj2 = obj1; obj1.display(); obj2.display();