Изучаем С++ создавая игры в ue4 Уилльям Шериф Изучайте программирование С++ с интересным применением реально мира, что позволит вам создавать ваши собственные игры!


Помещаем ваш класс в заголовочный файл



Pdf көрінісі
бет138/252
Дата06.01.2022
өлшемі12,25 Mb.
#11940
1   ...   134   135   136   137   138   139   140   141   ...   252
Помещаем ваш класс в заголовочный файл 
Уже  давно,  наши  классы  просто  вставлялись  перед  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 | 
С т р а н и ц а
 
 
 
Все классы включены 
Теперь, когда мы включили все классы в ваш проект, код должен компилироваться 
и запускаться. 


Достарыңызбен бөлісу:
1   ...   134   135   136   137   138   139   140   141   ...   252




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет