Khái niệm con trỏ mờ
Thuộc phần Lập trình hướng đối tượng trong hành trình C của Coddy. Bài học 17 trên 61.
Cho đến nay, khi định nghĩa một struct trong tệp tiêu đề, bất kỳ ai đưa tệp tiêu đề đó vào đều có thể xem và truy cập trực tiếp mọi thành viên của nó. Điều này phá vỡ tính đóng gói: nguyên tắc ẩn các chi tiết nội bộ khỏi code bên ngoài.
C cung cấp một kỹ thuật mạnh mẽ gọi là con trỏ không trong suốt để giải quyết vấn đề này. Ý tưởng rất đơn giản: khai báo trong tệp tiêu đề rằng một struct tồn tại, nhưng không tiết lộ nội dung bên trong. Ta thực hiện việc này bằng cách dùng một kiểu chưa hoàn chỉnh:
// wallet.h
typedef struct Wallet Wallet; // Chỉ khai báo, không có phần thân!
Wallet *create_wallet(int initial_balance);
void free_wallet(Wallet *w);
Lưu ý rằng không có dấu ngoặc nhọn. Ta không bao giờ định nghĩa Wallet chứa những gì. Trình biên dịch biết kiểu này tồn tại, nhưng không biết kích thước hay các thành viên của nó. Điều này có nghĩa là code có chứa tệp tiêu đề này chỉ có thể làm việc với con trỏ đến Wallet, chứ không thể làm việc trực tiếp với chính cấu trúc đó.
Vì sao điều này quan trọng? Vì định nghĩa struct thực tế nằm ẩn trong tệp .c, mọi code sử dụng tệp tiêu đề của bạn không thể viết w->balance hoặc sizeof(Wallet). Chúng phải dùng các hàm bạn cung cấp. Bạn kiểm soát mọi quyền truy cập vào dữ liệu và có thể thay đổi cấu trúc bên trong sau này mà không làm hỏng bất kỳ code nào phụ thuộc vào tệp tiêu đề của bạn.
Trong bài học tiếp theo, bạn sẽ luyện tập định nghĩa phần thân struct thực sự bên trong tệp nguồn, hoàn thiện mẫu con trỏ opaque.
Tự làm thử
Bài học này không có thử thách code.
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Lập trình hướng đối tượng
1Kiến thức cơ bản về lập trình mô-đun
Tệp tiêu đềInclude guardTệp mã nguồnHàm staticÔn tập: Máy tính mô-đun4Tính đóng gói
Khái niệm con trỏ mờĐịnh nghĩa struct mờHàm truy xuất và hàm gánKiểm tra tính hợp lệ trong hàm gánÔn tập: Hộp bí mật2Đối tượng và phương thức
Struct dưới dạng đối tượngCon trỏ 'Self'Tính đúng đắn của constCon trỏ và giá trịPhương thức hỗ trợÔn tập: trình quản lý Point5Dự án: Tài khoản ngân hàng đơn giản
Thiết lập dự ánTriển khai tài khoản3Vòng đời đối tượng
Mẫu hàm khởi tạoMẫu hàm hủyKhởi tạo trên ngăn xếpSao chép sâuÔn tập: lớp bao bọc chuỗi6Kế thừa bằng cách kết hợp
Nhúng structQuy tắc thành viên đầu tiênTruy cập thành viên lớp chaUpcastingÔn tập: hệ phân cấp hình dạngTự luyện tập: Trình biên dịch C online