Computer >> Máy Tính >  >> Lập trình >> C ++

Sao chép hàm tạo trong C ++

Hàm tạo bản sao là một kiểu hàm tạo. Nó tạo một đối tượng và khởi tạo nó với một đối tượng cùng lớp. Nếu phương thức khởi tạo sao chép không được định nghĩa trong lớp, thì trình biên dịch sẽ tự định nghĩa một phương thức khởi tạo. Một phương thức khởi tạo sao chép là bắt buộc đối với một lớp có các biến con trỏ hoặc cấp phát bộ nhớ động.

Một chương trình thể hiện một hàm tạo sao chép như sau.

Ví dụ

#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;
}

Đầu ra

num1 = 10
num2 = 20

num1 = 10
num2 = 20

Trong chương trình trên, lớp Demo chứa một phương thức khởi tạo tham số hóa thông thường và một phương thức khởi tạo sao chép. Thêm vào đó, có một hàm hiển thị các giá trị của num1 và num2. Chúng được đưa ra như sau.

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;
   }
};

Trong hàm main (), đối tượng lớp obj1 được khởi tạo bằng một phương thức khởi tạo tham số hóa. Đối tượng obj2 được khởi tạo bằng cách sử dụng một hàm tạo sao chép và các giá trị của obj1 được sao chép vào obj2. Cuối cùng giá trị của obj1 và obj2 được hiển thị. Điều này được đưa ra bên dưới.

Demo obj1(10, 20);
Demo obj2 = obj1;
obj1.display();
obj2.display();