Làm thế nào để thực hiện Copy Constructor trong C ++?



Hiểu về Constructors đã là một bí ẩn đối với nhiều người. Bài viết này sẽ giúp bạn làm sáng tỏ khái niệm Copy Constructor trong C ++

Hiểu biết Người xây dựng đã là một bí ẩn đối với nhiều người. Bài viết này sẽ giúp bạn làm sáng tỏ khái niệm Copy Constructor trong C ++. Các gợi ý sau sẽ được đề cập trong bài viết này,

Vì vậy, chúng ta hãy bắt đầuvới bài viết này về Copy Constructor trong C ++





Copy Constructor là một Constructor khởi tạo một đối tượng của một lớp bằng cách sử dụng một đối tượng khác của cùng lớp.

Cú pháp:



Chúng tôi có từ khóa const vì chúng tôi muốn làm cho giá trị không đổi và đảm bảo rằng nó không bị sửa đổi ở đâu đó trong mã. Giống như một hàm tạo mặc định, một hàm tạo sao chép cũng được cung cấp bởi trình biên dịch. Đây được gọi là Hàm tạo bản sao mặc định. Các hàm tạo bản sao có thể được đặt ở chế độ riêng tư. Chúng ta không thể sao chép các đối tượng của lớp khi chúng ta đặt hàm tạo bản sao là riêng tư.

Đây là một mã mẫu :

#include using namespace std class test {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) // Hàm tạo bình thường được gọi ở đây test t2 = t1 // Hàm tạo sao chép được gọi ở đây là cout<< 't1.x = ' << t1.getX() cout << 'nt2.x = ' << t2.getX() return 0 } 

Đầu ra:



Khối lệnh sao chép đầu ra trong C ++ - Edureka

Giải trình

Chương trình trên là một bản demo cơ bản của một phương thức tạo bản sao. Chúng tôi có một bài kiểm tra lớp, với một thành viên dữ liệu riêng của kiểu int được gọi là x. Sau đó, chúng ta có một hàm tạo được tham số hóa, gán 7 cho các biến x. Chúng ta có một hàm tạo sao chép, khởi tạo giá trị của t2 với giá trị của t1. Địa chỉ của t2 được gửi đi giữ giá trị của t1 và được gán cho x. Tồn tại một hàm get trả về giá trị của x.

Hàm main có một đối tượng kiểm tra lớp gọi là t1. Có một giá trị được liên kết với đối tượng này, đây là một tham số. Hàm main có một đối tượng kiểm tra lớp khác được gọi là t2. Điều này được khởi tạo bằng cách sử dụng biến t1 và hàm tạo bản sao được gọi ở đây. Cuối cùng, hàm get được gọi tương ứng với t1 và t2 để nhận giá trị của x.

Các loại

cách sử dụng các tham số trong hoạt cảnh

Có hai loại hàm tạo bản sao.
⦁ Khối mã lệnh sao chép nông
⦁ Trình tạo bản sao sâu

Tiếp tục với bài viết này về Copy Constructor trong C ++

Hàm tạo bản sao nông:

Một hàm tạo sao chép nông là một mã tạo bản sao mặc định.

Thí dụ:

Hai người truy cập cơ sở dữ liệu cùng lúc và thực hiện thay đổi các giá trị trên hai hệ thống khác nhau. Nếu họ thực hiện thay đổi đối với cơ sở dữ liệu thì cả hai thay đổi này sẽ được hiển thị trong cơ sở dữ liệu. Cả hai đối tượng sẽ trỏ đến cùng một vị trí bộ nhớ. Đây là Shallow Copy Constructor. Điều này chủ yếu xảy ra khi chúng ta đang làm việc với hàm tạo bản sao mặc định. Đây là một mã ví dụ cho: Shallow Copy Constructor:

#include using namespace std class test {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 } 

Đầu ra:

Giải trình:

Trong đoạn mã trên, chúng tôi sử dụng một hàm tạo sao chép mặc định do trình biên dịch cung cấp. Do đó nó là một Shallow Copy Constructor.

Tiếp tục với bài viết này về Copy Constructor trong C ++

Hàm tạo bản sao sâu

Deep Copy Constructor là một trình tạo bản sao do người dùng định nghĩa.
Ví dụ:
Khi hai người phải thuyết trình và cả hai đều sao chép từ cùng một nguồn, các bản sao sẽ tách biệt. Vì vậy, khi bạn thực hiện sửa đổi, chỉ bản sao khác không bị ảnh hưởng. Đây là Trình tạo bản sao sâu. Cả hai đối tượng sẽ trỏ đến các vị trí bộ nhớ khác nhau và những thay đổi ở một đối tượng sẽ không ảnh hưởng đến đối tượng kia. Bộ nhớ được cấp phát động.

Đây là một mã ví dụ cho: Hàm tạo bản sao sâu:

#include using namespace std class test {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) // Hàm tạo bình thường được gọi ở đây test t2 = t1 // Hàm tạo sao chép được gọi ở đây là cout<< 't1.x = ' << t1.getX() cout << 'nt2.x = ' << t2.getX() return 0 } 

Đầu ra:

Giải trình

Đây là mã tương tự mà chúng tôi đã sử dụng ở trên, cho kết quả tương tự. Nó là một Copy Constructor do người dùng định nghĩa và do đó nó là một Deep Copy Constructor.

Như vậy chúng ta đã kết thúc bài viết này về ‘Copy Constructor trong C ++’. Nếu bạn muốn tìm hiểu thêm, hãy xem bởi Edureka, một công ty học trực tuyến đáng tin cậy. Khóa học đào tạo và cấp chứng chỉ Java J2EE và SOA của Edureka được thiết kế để đào tạo bạn về cả khái niệm Java cốt lõi và nâng cao cùng với các khung Java khác nhau như Hibernate & Spring.

Có một câu hỏi cho chúng tôi? Vui lòng đề cập đến nó trong phần nhận xét của blog này và chúng tôi sẽ liên hệ lại với bạn trong thời gian sớm nhất.