Подтвердить что ты не робот

Должен ли я использовать структуры на С++?

Разница между структурой и классом невелика в С++, в основном только члены структуры по умолчанию являются общедоступными, а члены класса - по умолчанию.

Однако я все еще использую структуры, когда мне нужны чистые структуры данных, например:

struct Rectangle {
    int width;
    int height;
};

Я считаю, что очень удобно работать с:

Rectangle r;
r.width = 20;
r.height = 10;

Однако структуры данных связаны с процедурным программированием, и я занимаюсь объектно-ориентированным программированием. Это плохая идея ввести эту концепцию в OO?

4b9b3361

Ответ 1

Нет. Если имеет смысл использовать какую-либо структуру где-нибудь, почему вы усложняете вещи, используя что-то еще, что не предназначено для этой цели?

В моих проектах я обычно использую struct для простых "структур", которые просто должны содержать некоторые тривиальные данные.

Если структура данных должна иметь некоторые "умности" и скрытые поля/методы, то она становится классом.

Ответ 2

Структуры

особенно полезны для инкапсуляции POD (простые старые данные). Это гораздо больше по сравнению с struct vs class в С++

Ответ 3

По-моему, нет, это неплохая идея. Если вы собираетесь использовать класс таким же образом, как

class Rectangle {
    public:
        int width;
        int height;
};

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

Это по-прежнему очень важный объект из всех перспектив использования, поэтому нет, он не противоречит дизайну OO.

Ответ 4

Если ваше приложение нуждается в нем, используйте его. Если ваш дизайн требует, чтобы у вас были только публичные члены, вы можете использовать struct самостоятельно...

Ответ 5

Я использую structs все время для таких объектов, как unary_function и т.д. На самом деле нет смысла явно объявлять public для класса с помощью только метода operator(). Кроме того, это не похоже на то, что вы приглашаете его наследовать.

Ответ 6

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

См. предыдущий вопрос предыдущий вопрос для дальнейшего обсуждения этого вопроса.

Ответ 7

Похоже, у вас есть Ferrari Scaglietti и Lamborgini Espada, когда-нибудь вы водите Ferarri, когда-нибудь вы управляете Lamborghini.... Когда-нибудь вы используете struct, когда-нибудь вы используете класс, есть ли что-то истинное и ложное?

Ответ 8

Нет ничего плохого в использовании структуры на С++, я стараюсь избегать использования классов, если у меня нет достаточного времени для планирования того, что их цель должна быть.

Ответ 9

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

Ответ 10

Я делал следующее:

struct Interface
{
    virtual ~Interface() {}
    virtual void foo() = 0;
};

class Implementation : public Interface
{
    void foo(); // or public, it depends.
public:
    Implementation(...);
};

поскольку по умолчанию интерфейс имеет все свои члены public, и по умолчанию реализации имеют свои члены private.