494 Stimmen

Was sind die Unterschiede zwischen struct und class in C++?

Diese Frage war die bereits im Zusammenhang mit C#/.Net gestellt wurden .

Jetzt würde ich gerne die Unterschiede zwischen einer Struktur und einer Klasse in C++ kennenlernen. Bitte erörtern Sie die technischen Unterschiede sowie die Gründe für die Wahl des einen oder des anderen im OO-Design.

Ich werde mit einem offensichtlichen Unterschied beginnen:

  • Wenn Sie nicht angeben public: o private: Die Mitglieder einer Struktur sind standardmäßig öffentlich; die Mitglieder einer Klasse sind standardmäßig privat.

Ich bin sicher, dass es noch weitere Unterschiede gibt, die in den obskuren Ecken der C++-Spezifikation zu finden sind.

-2voto

snow Punkte 1409

Klasse ist nur im Kontext der Softwareentwicklung sinnvoll. Im Zusammenhang mit Datenstrukturen und Algorithmen sind Klasse und Struktur nicht so verschieden. Es gibt keine Regel, die vorschreibt, dass die Mitglieder einer Klasse referenziert werden müssen.

Wenn man ein großes Projekt mit vielen Leuten ohne Klasse entwickelt, kann es zu kompliziertem, gekoppeltem Code kommen, weil jeder die Funktionen und Daten benutzt, die er will. Klasse bietet Berechtigungskontrollen und Erben, um die Entkopplung und Wiederverwendung von Code zu verbessern.

Wenn Sie einige Software-Engineering-Prinzipien lesen, werden Sie feststellen, dass die meisten Standards nicht ohne Klasse implementiert werden können, zum Beispiel: http://en.wikipedia.org/wiki/SOLID_%28object-oriented_design%29

BTW, wenn ein struct ein Crunch von Speicher zuweist und mehrere Variablen enthält, Werttyp Variablen zeigt an, dass Werte in wo struct eingebettet sind zugewiesen wird. Im Gegensatz dazu sind die Werte von Referenzvariablen extern und werden durch einen Zeiger referenziert, der ebenfalls dort eingebettet ist, wo die Struktur zugewiesen wurde.

-3voto

kiriloff Punkte 24291

Sie können dies als Leitfaden für die Wahl der Struktur oder des Unterrichts verwenden, https://msdn.microsoft.com/en-us/library/ms229017%28v=vs.110%29.aspx .

Erwägen Sie die Definition einer Struktur anstelle einer Klasse, wenn Instanzen der Typs klein und in der Regel kurzlebig sind oder häufig in andere andere Objekte eingebettet sind.

X Vermeiden Sie es, eine Struktur zu definieren, es sei denn, der Typ hat alle von die folgenden Merkmale aufweist:

Sie stellt logischerweise einen einzigen Wert dar, ähnlich den primitiven Typen (int, double usw.).

Sie hat eine Instanz Größe unter 16 Byte.

Sie ist unveränderlich.

Es muss nicht verpackt werden häufig.

-4voto

MOBITI MAHENGE Punkte 7

Der Unterschied zwischen Struktur y Klasse Schlüsselwörter in C++ ist, dass, wenn es keinen spezifischen Spezifizierer für einen bestimmten zusammengesetzten Datentyp gibt, standardmäßig Struktur o Gewerkschaft ist das öffentliche Schlüsselwort, das lediglich das Verstecken von Daten berücksichtigt, aber class ist das private Schlüsselwort, das das Verstecken von Programmcodes oder Daten berücksichtigt. Einige Programmierer verwenden immer Struktur für Daten und Klasse um des Codes willen. Für weitere Informationen wenden Sie sich an andere Quellen.

-4voto

Wageesha Punkte 1

Vor allem, weil OOP-Konzepte, die in Klassen verwendet werden, sehr praktisch sind, wenn es darum geht, Szenarien der realen Welt zu erklären, und es daher einfacher ist, sie mit der Realität zu verbinden. z.B. ist die Standardvererbung für Strukturen öffentlich, aber wenn wir diese Regel für die reale Welt anwenden, ist es lächerlich.

Wie auch immer, was ich brauche, um zu rechtfertigen ist Klasse ist ein viel breiter, realen Welt anwendbar Konzept während Struktur ist ein primitives Konzept mit schlechten internen Organisation (auch wenn Struktur folgt OOP-Konzepte, Sie haben eine schlechte Bedeutung)

-4voto

Eric Hill Punkte 391

**UPDATE: ** Bitte ignorieren Sie diese Antwort. Ich habe die Möglichkeit nicht in Betracht gezogen, dass der Wert für die Struktur nicht initialisiert wurde, sondern einfach nur 0 war. Es gibt keinen Unterschied in der Initialisierung zwischen Struktur und Klasse.


Ich sehe einen weiteren Unterschied zwischen Structs und Klassen, der mit der Standardinitialisierung zu tun hat.

struct Foo {
    int a;
};

class Bar {
    int a;
};

class Tester {
    Foo m_Foo = Foo();
    Bar m_Bar = Bar();

public:
    Tester() {}
};

int main() {
    auto myTester = Tester();
}

Führen Sie diesen Code aus und untersuchen Sie myTester. Sie werden feststellen, dass für m_Foo die Struktur m_Foo.a auf 0 initialisiert wurde, aber für m_Bar, die Klasse m_Bar.a nicht initialisiert ist. Es scheint also einen Unterschied darin zu geben, was der Standardkonstruktor für struct vs. class tut. Ich sehe dies mit Visual Studio.

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