Получение баланса
Часть раздела Object Oriented Programming путешествия по C на Coddy — урок 26 из 61.
Задание
ЛегкоВаш банковский счет почти готов! Вы реализовали возможность создания счетов, внесения средств и снятия денег — но не хватает одной важной детали. На данный момент у внешнего кода нет способа узнать текущий баланс. Давайте исправим это, добавив функцию-геттер.
Геттер — это правильный способ предоставления доступа к скрытым данным в инкапсулированном модуле. Вместо того чтобы делать поле баланса публичным (что нарушило бы инкапсуляцию), вы предоставляете функцию только для чтения, которая возвращает значение. Это сохраняет данные защищенными, обеспечивая при этом контролируемый доступ.
Вы продолжите работу с тремя файлами:
account.h: Добавьте прототип новой функции:get_balance. Эта функция принимаетconst Account *(так как она только читает данные и никогда их не изменяет) и возвращаетdouble, представляющий текущий баланс. Сохраните все существующие объявления.account.c: Реализуйте функциюget_balance. Она просто возвращает значение скрытого поля баланса из структуры счета. Обратите внимание, что эта функция может обращаться к внутренним данным, так как она определена в том же файле, что и структура — внешний код по-прежнему не может заглянуть внутрь напрямую.main.c: Теперь вы наконец-то сможете увидеть, что происходит внутри ваших счетов! Создайте счет, выполните несколько транзакций и используйте свой новый геттер для отображения баланса на каждом этапе.
Вы получите четыре входных значения: ID счета (целое число), сумму депозита, сумму снятия и вторую сумму депозита.
В вашем основном файле создайте счет и выведите его начальный баланс (должен быть 0.00). Внесите первую сумму и выведите новый баланс. Снимите указанную сумму и снова выведите баланс. Наконец, внесите второй депозит и выведите итоговый баланс. Затем удалите объект счета.
Выводите результат в следующем формате:
Account 1001 created
Balance: 0.00
Balance: 500.00
Balance: 200.00
Balance: 350.00
Account destroyedГде 1001 — это ID счета, а значения баланса отражают: начальный (0.00), после внесения 500.00, после снятия 300.00 и после внесения еще 150.00. Форматируйте все значения баланса с двумя знаками после запятой, используя %.2f.
С добавлением этого геттера ваш модуль банковского счета теперь обеспечивает полный контролируемый доступ к данным счета — пользователи могут видеть баланс, но могут изменять его только через ваши проверенные функции внесения и снятия средств.
Попробуйте сами
#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: Вывести начальный баланс, используя get_balance
deposit(account, deposit1);
// TODO: Вывести баланс после первого депозита
withdraw(account, withdraw_amount);
// TODO: Вывести баланс после снятия средств
deposit(account, deposit2);
// TODO: Вывести баланс после второго депозита
destroy_account(account);
printf("Account destroyed\n");
return 0;
}Все уроки раздела Object Oriented Programming
1Основы модульного программирования
Заголовочные файлыСтражи включенияИсходные файлыСтатические функцииПовторение: Модульный калькулятор4Инкапсуляция
Концепция непрозрачных указателейОпределение непрозрачных структурГеттеры и сеттерыВалидация в сеттерахИтоги: Секретный ящик2Объекты и методы
Структуры как объектыУказатель 'Self'Константная корректностьУказатель против значенияВспомогательные методыИтоги: Point Manager5Проект: Простой банковский счет
Настройка проектаРеализация счета3Жизненный цикл объекта
Паттерн «Конструктор»Паттерн «Деструктор»Инициализация в стекеГлубокое копированиеПовторение: String Wrapper6Наследование через композицию
Встраивание структурПравило первого элементаДоступ к элементам родителяUpcastingПовторение: Иерархия фигур9Проект: Рисование фигур
Обзор проектаРеализация круга