Menu
CoddyTech

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.

quiz iconTự kiểm tra

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

Tự luyện tập: Trình biên dịch C online