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

Các thành viên mảng có được sao chép sâu trong C ++ không?

Trong trường hợp C / C ++, chúng ta có thể gán một biến struct (hoặc lớp chỉ trong C ++) cho một biến khác cùng kiểu. Tại thời điểm khi chúng ta gán một biến struct cho một biến khác, tất cả các thành viên của biến sẽ được sao chép sang biến struct khác. Trong trường hợp này, câu hỏi được đặt ra là điều gì sẽ xảy ra khi cấu trúc bao gồm một mảng?

Bây giờ, chúng ta phải thảo luận về mảng. Điểm chính cần lưu ý là các thành viên mảng không được sao chép dưới dạng bản sao cạn; trình biên dịch tự động hoàn thành Deep Copy trong trường hợp có các thành viên mảng. Trong chương trình dưới đây, kiểm tra struct bao gồm thành viên mảng str1 []. Khi chúng ta có thể gán st1 cho st2, st2 có một bản sao mới của mảng. Vì vậy, st2 không bị sửa đổi hoặc thay đổi khi chúng tôi sửa đổi hoặc thay đổi str [] của st1.

Ví dụ

# include <iostream>
# include <string.h>
using namespace std;
struct test{
   char str1[20];
};
int main(){
   struct test st1, st2;
   strcpy(st1.str1, "Tutorial Point");
   st2 = st1;
   st1.str1[0] = 'X';
   st1.str1[1] = 'Y';
   /* Because copy was Deep, both arrays are different */
   cout<< "st1's str = " << st1.str1 << endl;
   cout<< "st2's str = " << st2.str1 << endl;
   return 0;
}

Đầu ra

st1's str = XYtorial Point
st2's str = Tutorial Point

Do đó, trong trường hợp các lớp C ++, chúng tôi không yêu cầu viết phương thức khởi tạo bản sao của riêng mình và toán tử gán cho các thành viên mảng vì hành vi mặc định là Bản sao sâu cho mảng.