22 Stimmen

Sollte ich Structs in C++ verwenden?

Der Unterschied zwischen struct und class ist in C++ gering, im Grunde nur, dass struct-Mitglieder standardmäßig öffentlich und class-Mitglieder standardmäßig privat sind.

Ich verwende jedoch immer noch Structs, wenn ich zum Beispiel reine Datenstrukturen benötige:

struct Rectangle {
    int width;
    int height;
};

Ich finde es sehr praktisch, damit zu arbeiten:

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

Die Datenstrukturen stammen jedoch aus der prozeduralen Programmierung, und ich mache objektorientierte Programmierung. I

37voto

ereOn Punkte 50658

Nein. Wenn es sinnvoll ist, irgendwo eine Struktur zu verwenden, warum sollten Sie die Dinge verkomplizieren, indem Sie etwas anderes verwenden, das nicht für diesen Zweck gedacht ist?

In meinen Projekten verwende ich in der Regel struct für einfache "Strukturen", die nur einige triviale Daten enthalten müssen.

Wenn eine Datenstruktur eine gewisse "Intelligenz" und versteckte Felder/Methoden haben muss, wird sie zu einer Klasse.

6voto

Steve Townsend Punkte 52288

Structs sind besonders nützlich für die POD-Kapselung (plain old data). Es gibt viel mehr darüber unter struct vs. Klasse in C++

4voto

Tarka Punkte 3926

Meiner Meinung nach ist das keine schlechte Idee. Wenn Sie eine Klasse auf die gleiche Weise verwenden wollen, wie

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

dann können Sie auch eine struct . So stellen Sie sicher, dass Sie nicht vergessen, irgendetwas als öffentlich zu deklarieren, und wenn Sie es konsistent halten, wissen zukünftige Entwickler (einschließlich Sie selbst), dass Sie dies als reines Datenobjekt gedacht haben und nicht als etwas, das Methoden enthält.

Aus Sicht der Benutzerfreundlichkeit handelt es sich immer noch um ein Objekt, so dass es nicht im Widerspruch zum OO-Design steht.

1voto

liaK Punkte 11212

Wenn Ihre Anwendung es braucht, verwenden Sie es. Wenn Ihr Entwurf erfordert, dass Sie nur öffentliche Mitglieder, die Sie verwenden können struct selbst...

1voto

wheaties Punkte 34965

Ich verwende ständig Structs für Objekte wie unary_function und so weiter. Es macht wirklich keinen Sinn, explizit zu deklarieren public bei einer Klasse mit nur einem operator() Methode. Außerdem ist es nicht so, dass Sie dazu auffordern, sie zu vererben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X