Ôn tập: lớp bao bọc chuỗi
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 16 trên 61.
Thử thách
DễHãy xây dựng một module StringObject bao bọc một mảng ký tự được cấp phát động. Thử thách ôn tập này kết hợp toàn bộ vòng đời của đối tượng, hàm khởi tạo (constructor), phương thức chỉ đọc và hàm hủy (destructor), tất cả cùng hoạt động để quản lý bộ nhớ an toàn.
Bạn sẽ tạo ba tệp:
stringobj.h: Khai báo một structStringObjectcó một thành viên duy nhất:char *text(con trỏ đến một chuỗi được cấp phát động). Đồng thời khai báo ba hàm (function):create_string: nhận đầu vàoconst char *và trả về con trỏ đến một StringObject mới được cấp phátprint_string: nhậnconst StringObject *và hiển thị văn bản đã lưufree_string: nhậnStringObject *và giải phóng toàn bộ bộ nhớ đã cấp phát
STRINGOBJ_H.stringobj.c: Cài đặt cả ba hàm. Hàm khởi tạo cần cấp phát bộ nhớ cho struct, sau đó cấp phát bộ nhớ cho văn bản (hãy nhớ dùngstrlencộng thêm một byte cho ký tự kết thúc chuỗi null), rồi sao chép chuỗi đầu vào. Hàm hủy phải giải phóng theo thứ tự ngược lại: giải phóng bộ đệmtextbên trong trước, rồi mới giải phóng chính struct. Để an toàn, hãy kiểm tra NULL trong hàm hủy.main.c: Dùng module của bạn để tạo một đối tượng chuỗi, hiển thị nội dung rồi dọn dẹp đúng cách.
Bạn sẽ nhận một đầu vào: chuỗi văn bản cần lưu trong StringObject.
Trong tệp main, hãy tạo một StringObject bằng văn bản được cung cấp, in nội dung ra, giải phóng bộ nhớ, rồi in thông báo xác nhận.
Hàm print_string cần in ra theo định dạng sau:
Text: {text}Sau khi giải phóng bộ nhớ, hãy in:
FreedVí dụ, với đầu vào Hello World, đầu ra sẽ là:
Text: Hello World
FreedTự làm thử
#include <stdio.h>
#include "stringobj.h"
int main() {
char input[256];
fgets(input, sizeof(input), stdin);
// Xóa ký tự xuống dòng nếu có
int len = 0;
while (input[len] != '\0') len++;
if (len > 0 && input[len - 1] == '\n') {
input[len - 1] = '\0';
}
// TODO: Tạo StringObject từ văn bản đầu vào
// TODO: In chuỗi bằng print_string
// TODO: Giải phóng StringObject bằng free_string
// TODO: In "Freed" để xác nhận đã dọn dẹp
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