Помещаем ваш класс в заголовочный файл
Уже давно, наши классы просто вставлялись перед main(). Если вы продолжите
программировать таким образом, то ваш код весь будет в одном файле и
выглядеть как один большой беспорядок.
Поэтому, хорошая практика в программировании это организовывать ваши классы
в отдельных файлах. Так редактировать каждый код класса индивидуально,
становится гораздо легче, когда в проекте множество классов.
Возьмите класс Mammal и его производные классы из того, что мы делали ранее.
Мы как полагается, организуем этот пример в отдельные файлы. Для этого давайте
выполним следующие шаги:
127 |
С т р а н и ц а
1. Создайте новый файл в вашем проекте С++ и назовите его Mammal.h.
Вырежьте и вставьте весь класс Mammal целиком в этот файл. Заметьте, что
как только класс Mammal включает в себя, использование cout, мы пишем
утверждение
#include
в этом файле также.
2. Напишите утверждение “
#include Mammal.h
” вверху вашего файла Source.cpp.
Пример того, как это выглядит, показан на следующем скриншоте:
Что происходит здесь, когда код компилирован? Весь класс Mammal копируется и
вставляется (#include) в файл Source.cpp, который содержит функцию main(), а все
остальные классы происходят от Mammal. Поскольку #include это функция
копирования и вставления, то код будет работать абсолютно так же, как и до этого.
Отличие только в том, что он будет гораздо лучше организован и его будет
удобней и легче просматривать. С этого шага компилируйте и запустите ваш код,
чтобы убедиться, что он по-прежнему работает.
Совет
Почаще проверяйте, чтобы ваш код компилировался и запускался. Особенно когда
проводите рефакторинг. Если вы не знаете правил, вы неизбежно наделаете много
ошибок. Вот почему вам следует выполнять рефакторинг только небольшими
шагами. Рефакторингом называются действия, которые мы выполняем сейчас – мы
реорганизуем источник, чтобы облегчить понимание другим программистам
читающим нашу кодовую базу. Рефакторинг обычно не влечёт к переписыванию
слишком многого.
Следующее, что вам надо сделать, это изолировать классы Dog, Cat и Human в их
собственные файлы. Чтобы сделать это, создайте файлы Dog.h, Cat.h, Human.h и
добавьте их в ваш проект.
Давайте начнём с класса Dog, как показано на следующем скриншоте:
128 |
С т р а н и ц а
Если вы примените точно такую же установку и попытаетесь компилировать, и
запустить ваш проект, вы увидите ошибку: ‘Mammal’ : ‘class’ type redefinition
(‘Mammal’ : переопределение типа ‘class’); как показано на следующем скриншоте:
Что означает эта ошибка? То, что Mammal.h дважды внесён в ваш проект. Один раз
в Source.cpp и затем, ещё раз в Dog.h. Это означает, что фактически две версии
класса Mammal были добавлены в компилируемый код и С++ не знает, какую
версию использовать.
Есть два способа решить этот вопрос, но наилегчайший (и тот который применяется
Unreal Engine) это макрос #pragma once, как показано на следующем скриншоте:
Мы пишем #pragma once вверху каждого заголовочного файла. Таким образом,
когда Mammal.h включается второй раз, компилятор не копирует и не вставляет
его содержимое снова, поскольку он уже был включен до этого и его содержимое
уже на самом деле в компилируемой группе файлов.
Сделайте то же самое для Cat.h и Human.h. Затем включите их в ваш файл
Source.cpp, где постоянно находится ваша функция main().
129 |
С т р а н и ц а
Все классы включены
Теперь, когда мы включили все классы в ваш проект, код должен компилироваться
и запускаться.
Достарыңызбен бөлісу: |