Ôn tập: Hộp bí mật
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 21 trên 61.
Thử thách
DễHãy xây dựng một module Box minh họa tính đóng gói hoàn chỉnh. Hộp của bạn sẽ có ba kích thước ẩn: chiều rộng, chiều cao và chiều sâu. Bạn chỉ có thể truy cập các kích thước này thông qua những hàm bạn cung cấp. Đây chính là mẫu con trỏ mờ hoàn chỉnh!
Bạn sẽ tạo ba tệp:
box.h: Giao diện công khai. Khai báo kiểuBoxmờ chỉ bằng khai báo trước: phần thân của struct vẫn được ẩn. Khai báo các hàm sau:create_box: nhận ba số nguyên (chiều rộng, chiều cao, chiều sâu) và trả về con trỏ Boxdestroy_box: giải phóng bộ nhớ đã cấp phátget_volume: nhận mộtconst Box *và trả về thể tích (chiều rộng × chiều cao × chiều sâu)set_dimensions: nhận một con trỏ Box và ba giá trị kích thước mới, trả vềint(1 nếu thành công, 0 nếu bất kỳ kích thước nào nhỏ hơn hoặc bằng không)
BOX_H.box.c: Định nghĩastruct Boxthực tế với ba thành viên ẩn:int width,int heightvàint depth. Triển khai cả bốn hàm. Hàm khởi tạo cần cấp phát và khởi tạo hộp. Hàmset_dimensionsphải xác thực rằng cả ba giá trị đều dương (lớn hơn không) trước khi áp dụng thay đổi. Nếu bất kỳ giá trị nào không đạt yêu cầu xác thực, hãy từ chối toàn bộ cập nhật và trả về 0.main.c: Minh họa cách dùng Box đã đóng gói bằng cách tạo một hộp, kiểm tra thể tích, thử thay đổi kích thước (cả hợp lệ lẫn không hợp lệ) và dọn dẹp đúng cách.
Bạn sẽ nhận năm đầu vào: chiều rộng ban đầu, chiều cao ban đầu, chiều sâu ban đầu, sau đó là ba kích thước mới cần thử thiết lập (có thể bao gồm các giá trị không hợp lệ).
Trong tệp chính, hãy tạo một Box với các kích thước ban đầu và in thể tích của hộp. Sau đó, thử thiết lập các kích thước mới: in xem cập nhật có thành công hay không và thể tích sau cập nhật. Cuối cùng, giải phóng hộp và xác nhận đã dọn dẹp.
In đầu ra theo định dạng sau:
Volume: {volume}
Set: {0 or 1}
Volume: {volume}
DestroyedVí dụ, với các đầu vào 2, 3, 4, 5, 5, 5, đầu ra sẽ là:
Volume: 24
Set: 1
Volume: 125
DestroyedVới các đầu vào 2, 3, 4, -1, 5, 5, đầu ra sẽ là:
Volume: 24
Set: 0
Volume: 24
DestroyedLưu ý cách bước xác thực trong set_dimensions bảo vệ hộp của bạn khỏi trạng thái không hợp lệ: code bên ngoài không thể vượt qua các quy tắc của bạn vì các kích thước được ẩn hoàn toàn phía sau giao diện.
Tự làm thử
#include <stdio.h>
#include "box.h"
int main() {
// Đọc các kích thước ban đầu
int width, height, depth;
scanf("%d", &width);
scanf("%d", &height);
scanf("%d", &depth);
// Đọc các kích thước mới để thử thiết lập
int new_w, new_h, new_d;
scanf("%d", &new_w);
scanf("%d", &new_h);
scanf("%d", &new_d);
// TODO: Tạo một Box với các kích thước ban đầu
// TODO: In ra thể tích ban đầu theo định dạng: "Volume: {volume}"
// TODO: Thử thiết lập các kích thước mới và lưu kết quả
// TODO: In ra trạng thái thiết lập thành công hay không theo định dạng: "Set: {0 or 1}"
// TODO: In ra thể tích sau khi thiết lập theo định dạng: "Volume: {volume}"
// TODO: Hủy hộp và in ra "Destroyed"
return 0;
}
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