Menu
CoddyTech

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.

challenge icon

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ện Shape cơ sở, cùng các kiểu con trỏ hàm DrawFunc và AreaFunc từ những bài học trước.
  • circle.h và 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úc Rectangle tại đây. Hình chữ nhật có Shape làm thành viên đầu tiên và bổ sung các trường width và height (cả hai đều có kiểu double). Khai báo hàm khởi tạo create_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 ra Drawing 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 × height
    • create_rectangle: khởi tạo một Rectangle, gán các con trỏ hàm của Shape đượ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ả draw và area thông qua các con trỏ hàm của Shape đượ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.75

Giố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

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