Функции и структуры против классов

0

Я работаю над написанием маленькой карточной игры в 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 как в классе, так и в структуре. Для таких проблем, почему я должен использовать класс над структурой? Строго ли это вопрос об организации всех функций, которые применяются только к данному классу, или есть дополнительные преимущества?

  • 0
    Нет реальной разницы между классом и структурой. Использование одного над другим - все до соглашения, которых много. Так что этот вопрос основан на мнении.
  • 2
    Вы склонны думать, что наличие метода связано с объявлением класса. Ваш вопрос здесь не структура или класс, это метод или свободная функция. Здесь вы не должны раскрывать внутренности палубы и предоставлять методы для манипулирования колодой. Так что ООП явно в пользу того, что вы называете "классом"
Теги:

1 ответ

2

Разница между классом и структурой - это защита атрибутов по умолчанию (как данных, так и метода).

Например:

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);
};
  • 0
    ... и наследство ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню