Menu
Coddy logo textTech

Реализация счета

Часть раздела Объектно-ориентированное программирование путешествия по C на Coddy. Урок 23 из 61.

challenge icon

Задание

Легко

Теперь пришло время оживить ваш Bank Account! Вы уже создали открытый интерфейс в account.h: теперь вы реализуете скрытую внутреннюю часть, которая заставит его работать.

Основываясь на предыдущей работе, вы добавите исходный файл, содержащий секретное определение struct и фактические реализации функций. Именно здесь по-настоящему происходит инкапсуляция: тело struct существует только в файле .c и полностью невидимо для всех, кто использует вашу библиотеку.

Вы будете работать с тремя файлами:

  • account.h: ваш существующий заголовочный файл с объявлением непрозрачного типа Account и прототипами функций для create_account и destroy_account. Сохраните ваши include guards с ACCOUNT_H.
  • account.c: здесь происходит магия. Определите фактический struct Account с двумя скрытыми членами: int id (идентификатор account) и double balance (для новых account устанавливается в 0.0). Реализуйте ваш конструктор: выделите memory, установите ID из параметра и инициализируйте balance нулём. Реализуйте ваш деструктор, чтобы корректно освободить memory.
  • main.c: протестируйте вашу реализацию, создав account и убедившись, что он работает. Поскольку члены struct скрыты, вы не можете заглянуть внутрь, но можете проверить, что жизненный цикл работает правильно.

Вы получите один входной параметр: account ID (целое число), который нужно присвоить новому account.

В вашем основном файле создайте account с указанным ID, выведите сообщение-подтверждение с этим ID, затем уничтожьте account и подтвердите очистку.

Выведите результат в следующем формате:

Account 1001 created
Account destroyed

Здесь 1001 заменяется фактическим ID, полученным во входных данных.

Помните: ваш main.c не может напрямую обращаться к account->id или account->balance. Эти члены полностью скрыты внутри account.c. Пока что просто используйте ID из входных данных в вашем сообщении о результате. В следующих уроках вы добавите функции getter, чтобы правильно получать скрытые данные.

Попробуйте сами

#include <stdio.h>
#include "account.h"

int main() {
    int account_id;
    // TODO: прочитать account_id из ввода
    scanf("%d", &account_id);

    // TODO: создать аккаунт с помощью create_account() и вывести "Account <id> created"

    // TODO: destroy the account using destroy_account() and print "Account destroyed"

    return 0;
}

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Онлайн-компилятор C