Visual C++ Классы для начинающих. Отделение интерфейса от реализации

Эта статья предназначена прежде всего для тех, кто попал на текущую страницу, выискивая что-то похожее на ответ на вопрос компилирования программ из нескольких файлов в Visual Studio. На сайте есть более красочная тема, в которой показывается как делать проект из нескольких файлов. Так получилось, что эту статью я написал раньше той, но решил не удалять. Пусть для одних это будет знакомство, для других повторение.
Часто начинающие программисты видят код одной программы, разбитый на части. Разбивать одну программу на несколько файлов очень распространённая практика. Но вот бывает, что новичку понять, как же ему самостоятельно разделить код на части или как его читать, не очень ясно. Попробую разъяснить это (иногда) затруднительное место.
В качестве обучающего примера возьмём простую задачу:

  • Создать метод класса, с помощью которого вывести сообщение приветствия на экран. При создании класса отделить интерфейс от реализации.
Написание такой программы чем-то сильно напоминает написание "Hello World". В качестве инструмента решения было выбрано Visual Studio Express 2012. Время сменится, эта версия студии устареет, но общий принцип останется тем же. Вы можете использовать свою версию.

При разбиении одной программы на файлы обычно у нас получается 3 файла:

  • Основная программа. В нашем случае программа, внутри которой функция main(). Внутри функции main() нами будет задействоваться основная часть, выносимая в отдельные файлы: будет вызываться метод создаваемого класса.
  • Класс будет поделен на 2 части. Каждая из частей — отдельный файл.
    • Интерфейс
    • Реализация

Сейчас предполагается, что основное окно для написания кода у вас уже открыто, поэтому начинаем с создания двух дополнительных пустых файлов.

  • Первый файл создадим в заголовочных файлах и назовем его MyHeadFile.h (Мой заголовочный файл)
  • Второй файл создадим в файлах исходного кода и назовем его MyRealisation.cpp (Моя реализация)

Что это за файлы и зачем они нужны? Один из файлов будет содержать интерфейс класса, второй реализацию этого класса. Дальше по коду вы увидите, что это обозначает.

  • В заголовочном файле описывают интерфейс класса.


Можно сказать, что класс, который описан, но у которого не описано поведение функций — это интерфейс класса.
Неясность у новичков получается из-за:


Неопытному глазу сложно понять, что это такое. Это конструкция такая, которая предотвращает многократное включение заголовочного файла (в моем примере файла MyHeadFile.h). По негласному соглашению в этой конструкции в имени файла вместо точки используется подчеркивание.
Надеюсь, что что такое интерфейс стало понятно. Чтобы интерфейс не дублировался в исходный код программы, его обычно защищают предотвращающей многократное включение одного файла конструкцией.
Две части готовы. Осталось описать поведение классу. Это делается в файле реализации. В начале темы говорилось, что мы делаем два дополнительные файла: файл реализации и файл интерфейса. Файл интерфейса мы описали, теперь пишем реализацию. В файле реализации описываем функции в самом обычном для функций виде, но в нашем случае с обозначением привязки к классу, как обычно делают при вынесении методов класса за класс.

MyRealisation.cpp

Вот это вся реализация, которая нужна для вывода одного сообщения. Для новичка важно понять, что здесь только описывается поведение функций из нужного нам класса. Сам интерфейс класса описан в подключенном заголовочном файле, поэтому void::MyClass::show() не вызывает ошибок.
Основное всё готово. Дело осталось за малым. Остаётся создать объект класса MyClass и вызвать его метод show(). Объявим объект внутри функции main(), к нужному методу объявленного объекта также обратимся в функции main(). Надеюсь, объяснять, что такое функция main() и где её искать, не надо.

Вот и весь пример. Безусловно, этот пример очень примитивен и всех ответов сразу не даст. Но зато благодаря своей простоте он может помочь в начинании понимания всей этой темы по отделению интерфейсов от реализации.

4 комментария на «“Visual C++ Классы для начинающих. Отделение интерфейса от реализации”»

  1. Lilu:

    Огромное спасибо, все предельно понятно

  2. Никита:

    Спасибо, а то понять не мог раньше)

     

  3. Никита:

    Небольная ошибка, вместо:

    нужно:

    А то компилятор ругается, а так спасибо, все хорошо объяснено)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Поиск

 
     

Случайная книга в электронном формате

https://www.litres.ru/byarne-straustrup/dizayn-i-evoluciya-yazyka-s-22852186/?lfrom=15589587
Яндекс.Метрика