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

  Юрий  | 

    | 

  Обновл. 26 мая 2017  | 

 7078

 ǀ   15 

В этой главе мы рассмотрели много материала. Если вы дошли до этого момента, то я вас поздравляю – вы проделали немало работы и это уже хороший шаг на пути к изучению 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 (55 оценок, среднее: 4,87 из 5)
Загрузка...

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

  1. Аватар Aur1IIad0r:

    // Example program

  2. Аватар Илья:

    Добрый день!
    Знаете, если честно, я так и не понял преимущества использования enum. Я написал две программы. Принципиально с enum, чтобы разобраться с ними, и без enum, так, как на мой взгляд проще. И могу сказать, что без enum действительно получилось намного проще и, на мой взгляд, код тоже читать проще.
    Вот и сижу, мучаюсь догадками. Есть три предположения=))
    1) Вы плохо объяснили все преимущества перечислителей. В этом я сильно сомневаюсь, т.к. всем предыдущие уроки прошли на ура, Вы очень хорошо расписываете материал=)
    2) "На вкус и цвет товарищей нет" — т.е. каждый работает по своему, у каждого свои принципы работы и каждый делает так, как ему удобно (не пренебрегая, конечно, общими правилами, чтобы други могли разобраться в коде)
    3) Перечислители действительно не так уж и полезны, как утверждают некоторые кодеры=)
    Очень интересно узнать Ваше мнение по этому поводу=)Заранее спасибо!
    Вот те самые программы с enum и без (программа без enum была написана последней, поэтому в ней, опять же на мой взгляд, лучше подобраны имена переменных и т.п.). Без перечислителей:

    ____________________________________
    Вариант с enum:

  3. Аватар Alexey:

    Игра против компьютера…

  4. Аватар Владимир:

  5. Аватар Дмитрий:

    Так же решил создать мини игру, на основании изученного с данного сайта материала.
    Комментировал на сколько мог, надеюсь кому то пригодится для разбора.
    Спасибо автору сайта, за предоставленную возможность.
    П.С. Циклы просматривал до этого, с другого сайта (но мельком). 🙂

    1. Аватар zvezdonom:

      В строке

      опечатка/ошибка.
      Должно быть

  6. Аватар rpa4:

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

    1. Юрий Юрий:

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

      1. Аватар rpa4:

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

        1. Юрий Юрий:

          Нормально.

        2. Аватар Константин:

          Уважаемый rpa4! Подскажите мне, пожалуйста, как Вы кодите предложение, в котором тип монстра задаётся буквами, а не как у меня — числом:

    2. Аватар Игорь:

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

  7. Аватар Герман:

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

    1. Юрий Юрий:

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

      1. Аватар Герман:

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

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

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