класс — Как я могу поместить классы друг в друга в C ++?

Моя задача — написать класс, который представляет рыцаря (имя, уровень, xp), и он может иметь максимум 10 предметов (это должен быть другой класс) (item_name, value)

Итак, я хотел бы сделать что-то подобное, но с классами, как я могу это сделать?

struct item
{
char itemName[21];
int value;
};

struct knight
{
char name[21];
int xp;
int level;
struct item cucc[10];
};

-1

Решение

Как я могу поместить классы друг в друга в C ++?

Ну, просто вложите их, если вы это имеете в виду:

struct knight
{
struct item
{
char itemName[21];
int value;
};

char name[21];
int xp;
int level;
item cucc[10]; // Notice, that the struct keyword isn't necessary here
};

ОБНОВИТЬ: (подумав немного лучше о вопросе, который вы на самом деле хотел спросить)

Итак, я хотел бы сделать что-то подобное, но с классами, как я могу это сделать?

Прежде всего, structЭто классы в C ++. Но то, что вы имеете в виду, вероятно, «Как мне инкапсулировать эти данные в классы и установить между ними направленную связь?»

В этом случае я бы пошел на что-то вроде этого:

class item
{
public:
// The constructor to set an item's name and value
item(std::string name, int value);
// Supposing your item's names and values don't change,
// so only getters on the class's interface
std::string get_name() const;
int get_value() const;
private:
// Member variables are private (encapsulated).
std::string itemName;
int value;
};

// Skipping member function definitions. You should provide them.

class knight
{
public:
// The constructor to set a knight's name
knight(std::string name);
// Supposing the name is unchangeable, only getters on the interface
std::string get_name() const;
// ...
// What goes here very much depends on the logic of your application
// ...
private:
std::string name;
int xp;
int level;
std::vector<item> cucc; // If you need reference semantics, consider
// std::vector<std::shared_ptr<item>> instead
};

// Skipping member function definitions. You should provide them.
1

Другие решения

Итак, я хотел бы сделать что-то подобное, но с классами, как я могу это сделать?

У тебя уже есть. struct Ключевое слово определяет класс в C ++, так же как class ключевое слово делает; единственное отличие состоит в том, что видимость по умолчанию является общедоступной, а не частной для классов, представленных struct,

Также обратите внимание, что после item определение класса, struct item а также item назовите точно такой же тип; В C ++ нет разделения между типами и тегами структуры, которые есть в C.

Смотрите раздел 9 стандарта C ++ 11 (или N3337 окончательный рабочий проект, который находится в свободном доступе) для деталей. Особенно, 9.1 Имена классов начинается с:

Определение класса вводит новый тип. [Пример:

struct X { int a; };

Далее поясняется, что это объявление вводит имя класса в область видимости, поясняя, что struct X на свои средства в зависимости от того, X находится в области и т. д.

Разница между struct а также class обсуждается позже в 11 член контроля доступа а также 11.2 Доступность базовых классов и членов базового класса:

Члены класса, определенного с помощью ключевого слова class, по умолчанию являются закрытыми. Члены класса, определенного с помощью ключевых слов struct или union, являются открытыми по умолчанию.

В отсутствие доступ спецификатор для базового класса public предполагается, когда производный класс определяется с класс-ключ struct и частный предполагается, когда класс определяется с класс-ключ class,

1

Классы и структуры (я использую эти термины семантически, а не синтаксически — см. Ниже) могут быть произвольно вложены:

#include <string>
#include <array>

struct Knight {
struct Item {
std::string name;
int value;
};

std::string name;
int xp;
int level;
std::array<Item,10> cucc; // us an `std::vector` if the size is *not* fixed
};

Относительно классов: Есть очень мало различий между структурами и классами, синтаксически, но есть должен сделать различие в том, что вы намерены быть объектом. Если это просто совокупность данных, то концептуально это структура, и это следует указать с помощью struct ключевое слово. Если это интеллектуальная структура данных и она управляет своими собственными закрытыми членами через функции-члены, то концептуально это класс, поэтому обычно она объявляется с class ключевое слово.

Тем не менее, синтаксически class а также struct изменить только видимость по умолчанию для членов и родительских типов (class косвенным образом private, struct косвенным образом public).

0
По вопросам рекламы [email protected]