Я работаю над написанием маленькой карточной игры в C++ как практика. Я использую структуру для представления отдельных карточек:
#include <string>
struct card
{
int number;
std::string suit;
};
Карты будут храниться в колоде, для которой я определяю функцию - скажем, draw_card
--that удаляет x
карт со дна колоды, по умолчанию один. Я решил, что могу реализовать это двумя способами:
Как структура:
#include <vector>
struct deck
{
std::vector<card> cards_left
};
void draw_card(std::vector<card>& deck, int cards_to_draw = 1) {
// This function takes a deck by reference and removes cards_to_draw from the bottom.
};
Как класс:
class deck
{
std::vector<card> cards_left;
public:
void draw_card(int cards_to_draw = 1);
};
void deck::draw_card(int cards_to_draw = 1)
{
// This function takes cards_left and removes cards_to_draw from the bottom.
}
Я мог бы написать аналогичную функцию (в обоих случаях) для заполнения cards_left
как в классе, так и в структуре. Для таких проблем, почему я должен использовать класс над структурой? Строго ли это вопрос об организации всех функций, которые применяются только к данному классу, или есть дополнительные преимущества?
Разница между классом и структурой - это защита атрибутов по умолчанию (как данных, так и метода).
Например:
class deck
{
std::vector<card> cards_left;
public:
void draw_card(int cards_to_draw = 1);
};
работает так же, как:
struct deck
{
private:
std::vector<card> cards_left;
public:
void draw_card(int cards_to_draw = 1);
};