Глава 4. Итоговый тест  

   ⁄ 

 Обновлено 26 мая 2017  ⁄ 

 ⁄   8 

⁄   2270

В этой главе мы рассмотрели много материала. Если вы дошли до этого момента, то я вас поздравляю – вы проделали немало работы и это уже хороший шаг на пути к изучению C++ и программирования! Сейчас же давайте закрепим пройденный материал.

Теория

Блок стейтментов (или составной оператор) обрабатывается компилятором так, как если бы это один стейтмент. Составные операторы помещаются между фигурными скобками ({ и }) и используются почти везде.

Локальные переменные создаются в точке определения и уничтожаются при выходе из блока, в котором они объявлены. Доступ к ним возможен только внутри этого же блока.

Глобальные переменные создаются, когда программа запускается, и уничтожаются, когда она завершает свое выполнение. Они могут использоваться в любом месте программы. Неконстантные глобальные переменные следует избегать, потому что это зло.

Ключевое слово static может использоваться для преобразования глобальной переменной во внутреннюю (с внутренней связью), чтобы ее можно было использовать только в файле, в котором она объявлена. Также ключевое слово static используют, чтобы указать, что локальная переменная должна иметь статическую продолжительность. А это означает, что она будет сохранять свое значение даже после выхода из своей области видимости.

Пространство имен — это область, в которой гарантируется уникальность всех имен. Отличный способ избежать конфликтов имен. Не используйте «using statements» вне функций.



Неявное преобразование типов данных происходит, когда один тип конвертируется в другой без использования оператора cast. Явное преобразование типа происходит, когда один тип преобразуется в другой с помощью оператора cast. В некоторых случаях это абсолютно безопасно, в некоторых — данные могут быть потеряны. Избегайте использования C-style cast, вместо него используйте static_cast.

std::string – это простой способ работы с текстовыми строками. Текст всегда размещается между двойными кавычками.

Перечисления позволяют создавать собственные типы данных, в котором перечислены все возможные значения. Это отличный вариант для создания категорий или рубрик. Классы enum – это те же перечисления, но надежнее и безопаснее. Используйте их вместо обычных перечислений, если ваш компилятор совместим с C++ 11.

Typedef позволяет создавать псевдонимы для типов данных. Целочисленные типы данных с фиксированным размером реализованы именно через typedef. Псевдонимы типов полезны для присваивания простых имен сложным типам данных.

И, наконец, структуры данных. Они позволяют сгруппировать отдельные переменные в одну структуру, доступ к ним осуществляется через оператор выбора члена (.). Объектно-ориентированное программирование в значительной степени основывается именно на структурах, поэтому, если вы изучили только одну вещь из этой главы, то лучше, чтобы это были структуры.

Тест

Ура! 🙂

1) При разработке игры мы решили, что в ней должны быть монстры, потому что всем нравится сражаться с монстрами. Объявите структуру, которая представляет вашего монстра. Он должен иметь один из следующих типов: ogre, goblin, skeleton, orc и troll. Если ваш компилятор совместим с C++ 11, используйте классы enum. Если нет, то обычные перечисления.

Каждый отдельный монстр также должен иметь имя (используйте std::string) и количество здоровья, которое отображает, сколько урона он может получить, прежде чем умрет. Напишите функцию printMonster(), которая выведет все члены структуры. Объявите монстров типа goblin и orc, инициализируйте их, используя список инициализаторов, и передайте в функцию printMonster().

Ваша программа должна выводить что-то следующее:

This Goblin is named John and has 170 health.
This Orc is named James and has 35 health.

Ответы

Ответ C++11

Ответ не С++ 11

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (22 оценок, среднее: 5,00 из 5)
Загрузка...
Подписаться на обновления:

Комментариев: 8

  1. rpa4:

    Вот, исходя из всех уроков 4-й главы, сделал такую вот игру с монстрами. Прошу прощения за длинный код.

    1. Юрий:

      Реально прикольно получилось 🙂 Долго делал?

      1. rpa4:

        Ну где-то часик 🙂

        1. Юрий:

          Нормально.

    2. Игорь:

      Тоже была такая же идея) Но я что-то не пойму, я что, где-то пропустил циклы в предыдущих уроках?

  2. Герман:

    Уважаемый автор, какой смысл функцией getMonsterTypeString(Monster monster) проверять логические условия, если типы "монстров" и так объявлены в enum class MonsterType?
    Заранее спасибо!

    1. Li4ik:

      В getMonsterTypeString мы присваиваем значения для MonsterType::GOBLIN и MonsterType::ORC — Goblin и Ork соответственно. Если бы мы не использовали getMonsterTypeString, то вместо MonsterType::GOBLIN выводилось бы 1, а вместо MonsterType::ORC — 3. Функция getMonsterTypeString — это инициализация элементов структуры и заодно проверка.

      1. Герман:

        Про инициализацию элементов структуры я не сообразил. Спасибо!

Добавить комментарий для Li4ik Отменить ответ

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

ПОДПИСЫВАЙТЕСЬ

НА КАНАЛ RAVESLI В TELEGRAM

@ravesli

ПОДПИСАТЬСЯ БЕСПЛАТНО