ตัวสร้างการคัดลอกเป็นประเภทของตัวสร้าง มันสร้างวัตถุและเริ่มต้นด้วยวัตถุของคลาสเดียวกัน หากคอนสตรัคเตอร์การคัดลอกไม่ได้กำหนดไว้ในคลาส คอมไพเลอร์เองจะกำหนดหนึ่งตัว คอนสตรัคเตอร์การคัดลอกเป็นสิ่งจำเป็นสำหรับคลาสที่มีตัวแปรพอยน์เตอร์หรือการจัดสรรหน่วยความจำแบบไดนามิก
โปรแกรมที่แสดงตัวสร้างการคัดลอกมีดังนี้
ตัวอย่าง
#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();