Реализация счета
Часть раздела Object Oriented Programming путешествия по C на Coddy — урок 23 из 61.
Задание
ЛегкоПришло время оживить ваш банковский счет! Вы уже создали публичный интерфейс в account.h — теперь вы реализуете скрытую внутреннюю логику, которая заставляет его работать.
Опираясь на вашу предыдущую работу, вы добавите исходный файл, содержащий секретное определение структуры и фактическую реализацию функций. Именно здесь происходит настоящая инкапсуляция — тело структуры существует только в файле .c, полностью невидимое для всех, кто использует вашу библиотеку.
Вы будете работать с тремя файлами:
account.h: Ваш существующий заголовочный файл с объявлением непрозрачного типаAccountи прототипами функций дляcreate_accountиdestroy_account. Сохраните guard-включения сACCOUNT_H.account.c: Здесь происходит магия. Определите самуstruct Accountс двумя скрытыми членами:int id(идентификатор счета) иdouble balance(начальное значение 0.0 для новых счетов). Реализуйте конструктор для выделения памяти, установки ID из параметра и инициализации баланса нулем. Реализуйте деструктор для правильного освобождения памяти.main.c: Протестируйте свою реализацию, создав счет и подтвердив его работу. Поскольку члены структуры скрыты, вы не можете заглянуть внутрь, но вы можете убедиться, что жизненный цикл работает правильно.
Вы получите один входной параметр: ID счета (целое число), который нужно присвоить новому счету.
В вашем основном файле создайте счет с предоставленным ID, выведите подтверждающее сообщение с указанием ID, затем удалите счет и подтвердите очистку.
Выведите результат в следующем формате:
Account 1001 created
Account destroyedГде 1001 заменяется на фактический ID, полученный на вход.
Помните: ваш main.c не может получить прямой доступ к account->id или account->balance — эти члены полностью скрыты внутри account.c. На данный момент вы будете использовать ID из входных данных только для вашего выходного сообщения. В следующих уроках вы добавите функции-геттеры для правильного извлечения скрытых данных.
Попробуйте сами
#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_account() и вывести "Account destroyed"
return 0;
}Все уроки раздела Object Oriented Programming
1Основы модульного программирования
Заголовочные файлыСтражи включенияИсходные файлыСтатические функцииПовторение: Модульный калькулятор4Инкапсуляция
Концепция непрозрачных указателейОпределение непрозрачных структурГеттеры и сеттерыВалидация в сеттерахИтоги: Секретный ящик2Объекты и методы
Структуры как объектыУказатель 'Self'Константная корректностьУказатель против значенияВспомогательные методыИтоги: Point Manager5Проект: Простой банковский счет
Настройка проектаРеализация счета3Жизненный цикл объекта
Паттерн «Конструктор»Паттерн «Деструктор»Инициализация в стекеГлубокое копированиеПовторение: String Wrapper6Наследование через композицию
Встраивание структурПравило первого элементаДоступ к элементам родителяUpcastingПовторение: Иерархия фигур9Проект: Рисование фигур
Обзор проектаРеализация круга