Triển khai hình chữ nhậ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 46 trên 61.
Thử thách
DễHãy tiếp tục xây dựng dự án Shape Drawer bằng cách triển khai Rectangle: một hình dạng cụ thể khác có chứa cấu trúc Shape cơ sở, giống như cách chúng ta đã làm với Circle.
Dựa trên dự án hiện có, bạn sẽ thêm chức năng hình chữ nhật vào các tệp sau:
shape.h: Giữ nguyên giao diệnShapecơ sở, cùng các kiểu con trỏ hàmDrawFuncvàAreaFunctừ những bài học trước.circle.hvàcircle.c: Giữ nguyên phần triển khai Circle từ bài học trước.rectangle.h: Định nghĩa cấu trúcRectangletại đây. Hình chữ nhật cóShapelàm thành viên đầu tiên và bổ sung các trườngwidthvàheight(cả hai đều có kiểudouble). Khai báo hàm khởi tạocreate_rectangle, nhận các tham số width và height, rồi trả về một giá trịRectangle.rectangle.c: Triển khai các hành vi riêng của hình chữ nhật:draw_rectangle: in raDrawing Rectangle with width: X.XX and height: X.XX(cả hai giá trị đều hiển thị 2 chữ số thập phân)area_rectangle: trả về width × heightcreate_rectangle: khởi tạo mộtRectangle, gán các con trỏ hàm củaShapeđược chứa bên trong cho các hàm hình chữ nhật, thiết lập kích thước rồi trả về hình chữ nhật
main.c: Minh họa cách cả hai hình dạng hoạt động thông qua cùng một giao diện. Đọc hai đầu vào: width và height của hình chữ nhật. Tạo hình chữ nhật bằng hàm khởi tạo, sau đó gọi cảdrawvàareathông qua các con trỏ hàm củaShapeđược chứa bên trong. In diện tích với 2 chữ số thập phân.
Chương trình sẽ nhận hai đầu vào: giá trị width và height (dưới dạng số thực).
Đầu ra mẫu khi đầu vào là 4.0 và 3.0:
Drawing Rectangle with width: 4.00 and height: 3.00
Area: 12.00Đầu ra mẫu khi đầu vào là 7.5 và 2.5:
Drawing Rectangle with width: 7.50 and height: 2.50
Area: 18.75Giống như Circle, Rectangle có Shape làm thành viên đầu tiên, cho phép bạn truy cập các con trỏ hàm thông qua thành viên được chứa bên trong. Mẫu thiết kế nhất quán này cho phép tính đa hình: có thể xử lý cả hai hình dạng theo cùng một cách thông qua giao diện Shape. Nhớ dùng include guard trong tất cả các tệp tiêu đề.
Tự làm thử
#include <stdio.h>
#include "shape.h"
#include "rectangle.h"
int main() {
double width, height;
scanf("%lf", &width);
scanf("%lf", &height);
// TODO: Tạo hình chữ nhật bằng create_rectangle(width, height)
// TODO: Gọi draw qua con trỏ hàm của Shape được nhúng
// TODO: Gọi area qua con trỏ hàm của Shape được nhúng
// TODO: In diện tích với 2 chữ số thập phân: "Area: %.2f\n"
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ạng9Dự án: Trình vẽ hình
Tổng quan về dự ánTriển khai hình trònTriển khai hình chữ nhậtCách sử dụng đa hìnhBộ chứa hìnhTự luyện tập: Trình biên dịch C online