8.x – Резюме к главе 8 и небольшой тест

Добавлено 3 июня 2021 в 22:38

Краткое резюме

Перечислимые типы позволяют нам определить наш собственный тип, в котором перечислены все возможные значения. Они отлично подходят для категоризации вещей.

Классы перечислений работают как перечисления, но обеспечивают бо́льшую безопасность типа и не так сильно загрязняют инкапсулирующее пространство имен.

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

Небольшой тест

Вопрос 1

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

У каждого отдельного монстра также должно быть имя (используйте std::string), а также количество здоровья, которое показывает, сколько урона он может получить до своей смерти. Напишите функцию с именем printMonster(), которая выводит на печать все члены структуры. Создайте экземпляр огра и слизи, инициализируйте их с помощью списка инициализаторов и передайте их в printMonster().

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

This Ogre is named Torg and has 145 health.
This Slime is named Blurp and has 23 health.

#include <iostream>
#include <string>
 
// Определяем разные типы монстров как перечисление
enum class MonsterType
{
	ogre,
	dragon,
	orc,
	giant_spider,
	slime
};
 
// Структура монстра представляет одного монстра
struct Monster
{
	MonsterType type {};
	std::string name {};
	int health {};
};
 
// Возвращаем название типа монстра в виде строки
// Поскольку это можно было бы использовать где-нибудь еще,
// лучше сделать эту функцию отдельной
std::string getMonsterTypeString(MonsterType type)
{
	switch (type)
	{
	case MonsterType::ogre:
		return "Ogre";
	case MonsterType::dragon:
		return "Dragon";
	case MonsterType::orc:
		return "Orc";
	case MonsterType::giant_spider:
		return "Giant Spider";
	case MonsterType::slime:
		return "Slime";
	}
 
	return "Unknown";
}
 
// Распечатываем информацию о монстре
void printMonster(Monster monster)
{
	std::cout << "This " << getMonsterTypeString(monster.type) <<
		" is named " << monster.name <<
		" and has " << monster.health << " health.\n";
}
 
int main()
{
	Monster ogre{ MonsterType::ogre, "Torg", 145 };
	Monster slime{ MonsterType::slime, "Blurp", 23 };
 
	printMonster(ogre);
	printMonster(slime);
 
	return 0;
}

Теги

C++ / Cppenum / ПеречислениеLearnCppstructДля начинающихКласс перечисления / enum classОбучениеПеречислениеПеречисляемые типы данныхПрограммированиеСтруктура

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.