Lấy số dư
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 26 trên 61.
Thử thách
DễTài khoản ngân hàng của bạn sắp hoàn thiện! Bạn đã xây dựng khả năng tạo tài khoản, nạp tiền và rút tiền, nhưng vẫn còn thiếu một phần quan trọng. Hiện tại, code bên ngoài không có cách nào xem số dư hiện tại. Hãy khắc phục bằng cách thêm một hàm getter.
Getter là cách phù hợp để cung cấp quyền truy cập vào dữ liệu ẩn trong một module được đóng gói. Thay vì đặt trường số dư ở chế độ công khai (điều này sẽ phá vỡ tính đóng gói), bạn cung cấp một hàm chỉ đọc và trả về giá trị. Cách này bảo vệ dữ liệu nhưng vẫn cho phép truy cập có kiểm soát.
Bạn sẽ tiếp tục làm việc với ba tệp:
account.h: Thêm nguyên mẫu hàm mới:get_balance. Hàm này nhận mộtconst Account *(vì hàm chỉ đọc dữ liệu, không bao giờ sửa đổi dữ liệu) và trả về mộtdoublebiểu thị số dư hiện tại. Giữ nguyên tất cả các khai báo hiện có.account.c: Triển khai hàmget_balance. Hàm chỉ cần trả về trường số dư ẩn của tài khoản. Lưu ý hàm này có thể truy cập dữ liệu nội bộ vì được định nghĩa trong cùng tệp với struct: code bên ngoài vẫn không thể xem trực tiếp bên trong.main.c: Giờ đây, cuối cùng bạn cũng có thể thấy những gì đang diễn ra bên trong các tài khoản! Tạo một tài khoản, thực hiện một số giao dịch và dùng getter mới để hiển thị số dư ở từng bước.
Bạn sẽ nhận bốn đầu vào: ID tài khoản (một số nguyên), số tiền nạp, số tiền rút và số tiền nạp lần thứ hai.
Trong tệp main, hãy tạo một tài khoản và in số dư ban đầu của tài khoản (phải là 0.00). Nạp số tiền thứ nhất rồi in số dư mới. Rút số tiền đã chỉ định rồi in lại số dư. Cuối cùng, nạp lần thứ hai và in số dư cuối cùng. Sau đó, hủy tài khoản.
In đầu ra theo định dạng này:
Account 1001 created
Balance: 0.00
Balance: 500.00
Balance: 200.00
Balance: 350.00
Account destroyedTrong đó, 1001 là ID tài khoản, còn số dư thể hiện các mốc sau: ban đầu (0.00), sau khi nạp 500.00, sau khi rút 300.00 và sau khi nạp thêm 150.00. Định dạng tất cả giá trị số dư với hai chữ số thập phân bằng %.2f.
Khi có getter này, module tài khoản ngân hàng của bạn sẽ cung cấp quyền truy cập đầy đủ nhưng có kiểm soát vào dữ liệu tài khoản: người dùng có thể xem số dư nhưng chỉ có thể thay đổi số dư thông qua các hàm nạp tiền và rút tiền đã được kiểm tra hợp lệ.
Tự làm thử
#include <stdio.h>
#include "account.h"
int main() {
int account_id;
scanf("%d", &account_id);
double deposit1;
scanf("%lf", &deposit1);
double withdraw_amount;
scanf("%lf", &withdraw_amount);
double deposit2;
scanf("%lf", &deposit2);
Account* account = create_account(account_id);
printf("Account %d created\n", account_id);
// TODO: In ra số dư ban đầu bằng get_balance
deposit(account, deposit1);
// TODO: In ra số dư sau lần gửi tiền đầu tiên
withdraw(account, withdraw_amount);
// TODO: In ra số dư sau khi rút tiền
deposit(account, deposit2);
// TODO: In ra số dư sau lần gửi tiền thứ hai
destroy_account(account);
printf("Account destroyed\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ạngTự luyện tập: Trình biên dịch C online