Реализация счета
Часть раздела Объектно-ориентированное программирование путешествия по C на Coddy. Урок 23 из 61.
Задание
ЛегкоТеперь пришло время оживить ваш 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;
}Все уроки раздела Объектно-ориентированное программирование
1Основы модульного программирования
Заголовочные файлыСтражи включенияИсходные файлыСтатические функцииПовторение: Модульный калькулятор4Инкапсуляция
Концепция непрозрачных указателейОпределение непрозрачных структурГеттеры и сеттерыВалидация в сеттерахИтоги: Секретный ящик2Объекты и методы
Структуры как объектыУказатель 'Self'Константная корректностьУказатель против значенияВспомогательные методыИтоги: Point Manager5Проект: Простой банковский счет
Настройка проектаРеализация счета3Жизненный цикл объекта
Паттерн «Конструктор»Паттерн «Деструктор»Инициализация в стекеГлубокое копированиеПовторение: String Wrapper6Наследование через композицию
Встраивание структурПравило первого элементаДоступ к элементам родителяUpcastingПовторение: Иерархия фигур9Проект: Рисование фигур
Обзор проектаРеализация кругаРеализация прямоугольникаПолиморфное использованиеКонтейнер фигурПотренируйтесь самостоятельно: Онлайн-компилятор C