Triển khai hình tròn
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 45 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 Circle: một hình cụ thể nhúng cấu trúc Shape cơ sở và cung cấp logic vẽ cùng tính diện tích riêng.
Dựa trên nền tảng từ bài học trước, bạn sẽ mở rộng dự án với các tệp sau:
shape.h: Giữ lại giao diệnShapecơ sở từ bài học trước, cùng các kiểu con trỏ hàmDrawFuncvàAreaFunc.circle.h: Định nghĩa cấu trúcCircletại đây. Một hình tròn nhúngShapelàm thành viên đầu tiên (cho phép áp dụng quy tắc thành viên đầu tiên để ép kiểu lên) và thêm trườngradiuscó kiểudouble. Khai báo hàm khởi tạocreate_circle, nhận bán kính và trả về mộtCircletheo giá trị.circle.c: Triển khai các hành vi riêng của hình tròn tại đây:draw_circle: in raDrawing Circle with radius: X.XX(bán kính hiển thị với 2 chữ số thập phân)area_circle: trả về π × bán kính² (dùng3.14159cho π)create_circle: khởi tạo mộtCircle, gán các con trỏ hàm củaShapeđược nhúng để trỏ đếndraw_circlevàarea_circle, đặt bán kính rồi trả về hình tròn
main.c: Kết hợp mọi thứ. Đọc giá trị bán kính từ đầu vào, tạo hình tròn 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 nhúng. In diện tích với 2 chữ số thập phân.
Chương trình sẽ nhận một đầu vào: giá trị bán kính (dưới dạng số thực).
Ví dụ đầu ra khi đầu vào là 5.0:
Drawing Circle with radius: 5.00
Area: 78.54Ví dụ đầu ra khi đầu vào là 3.5:
Drawing Circle with radius: 3.50
Area: 38.48Điểm mấu chốt là Circle chứa Shape làm thành viên đầu tiên, vì vậy bạn có thể truy cập các con trỏ hàm thông qua circle.base.draw và circle.base.area (hoặc tên bạn đặt cho thành viên được nhúng). Khi gọi các hàm này, hãy truyền vào con trỏ đến thành viê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 "circle.h"
int main() {
double radius;
scanf("%lf", &radius);
// TODO: Tạo một Circle bằng create_circle
// TODO: Gọi draw qua con trỏ hàm (function) của Shape được nhúng
// TODO: Gọi area qua con trỏ hàm của Shape được nhúng
// và in ra 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