2014-06-13 12 views
30

Ich war ziemlich verwirrt über den Unterschied zwischen struct und class, wie ich sie für so ziemlich die gleichen Dinge verwendet zu sehen schien. Ich googelte die Unterschiede und die einzige Antwort, die ich sah, war, dass Strukturen standardmäßig öffentliche Mitglieder haben und Klassen standardmäßig private Mitglieder haben. Meine Dozenten haben mir jedoch gerade gesagt, dass Strukturen keine Elementfunktionen enthalten können. Aber ich habe viele Threads im Internet gesehen, wo Leute Member-Funktionen in Structs enthalten und ausdrücklich sagen, dass es in Ordnung ist.Kann C++ - Struktur Memberfunktionen haben?

Meine Dozenten scheinen unnachgiebig zu sein, dass Strukturen definitionsgemäß keine Funktionen haben können, also was ist los? Das einzige, was mir einfällt, ist, dass der Compiler möglicherweise Funktionen innerhalb einer Struktur in etwas anderes umwandelt, so dass sie technisch keine Funktionen enthalten ... Gibt es eine klare Antwort auf diese Widersprüche?

+7

Vielleicht meinen sie C. – chris

+23

Wenn dies ein C++ Kurs sein soll, lassen Sie es sofort fallen. – aschepler

+3

Weisen Sie Ihre Dozenten auf dieses Dokument hin. https://isocpp.org/files/papers/N3797.pdf - Der Arbeitsentwurf des C++ - Standards, Kapitel 9. Die Wörter class und struct werden meistens synonym verwendet. In Absatz 3 gibt es sogar ein Beispiel für eine Struktur mit einer Memberfunktion. –

Antwort

6

Ihre Dozenten sind nachweislich falsch, sie unter der Annahme sprechen eigentlich über C++ und nicht C.

Es ist trivial einfach dies in Code, um sich zu beweisen, oder The C++ Programming Language abholen und structs nachschlagen.

32

Ich googelte die Unterschiede und die einzige Antwort, die ich sah, war, dass Strukturen standardmäßig öffentliche Mitglieder haben und Klassen standardmäßig private Mitglieder haben.

Ja, das ist richtig. Darüber hinaus werden Basen einer Struktur standardmäßig standardmäßig vererbt, während Basen einer Klasse standardmäßig privat vererbt werden.

Die Deklaration einer Funktion als Mitglied einer Struktur hat genau die gleiche Semantik wie die Deklaration einer Funktion als Mitglied einer Klasse, mit Ausnahme des Unterschieds, den Sie bemerkt haben. In jedem Fall heißen sie Mitgliedsfunktionen.

+5

Dies ist die richtige Antwort. Der * ONLY * Unterschied zwischen einer Klasse und einer Struktur ist die Standardsichtbarkeit. – user3344003

2

C++ structs kann definitely have member functions. C-Strukturen hingegen sind ein ganz anderes Biest - sie sind im Wesentlichen Arrays, die Namen und Typinformationen für bestimmte Indices bereitstellen.

1

Es scheint mir, dass nur weil etwas von einer Sprache erlaubt ist, es nicht bedeutet, dass es eine gute Idee ist. Obwohl technisch eine C++ - Struktur Funktionen enthalten kann, glaube ich nicht, dass die ursprüngliche Absicht des Datentyps struct darin bestand, Funktionen zu enthalten. War es nicht der Hauptzweck, einen Class-Typ einzuführen, um die Definition der Daten und der Logik zu unterstützen, die in enger Beziehung zu den Daten agieren, und so gesündere Schnittstellen zu den Daten zu fördern?

+1

Dies ist nachweislich falsch. Stroustrop selbst hat dies zu vielen Gelegenheiten gesagt. Eine Struktur und eine Klasse sind die gleichen, außer wie in den anderen Antworten erwähnt. –

+1

Warum also überhaupt Klassen zur Sprache hinzufügen? Warum NICHT einfach structs benutzen .... Ich war noch nie ein großer Fan von C++, einfach weil es übermäßig komplex erscheint ... zu vielen Möglichkeiten, sich in den Fuß zu schießen. Zwei fast identische Schlüsselwörter in der Sprache zu haben, scheint eine schlechte Idee zu sein ... sicherlich haben neuere Sprachen entschieden, das NICHT zu tun. Python bietet tendenziell einen und nur einen offensichtlich korrekten Weg, Dinge zu tun, und das eignet sich für mehr wartbaren Code.Vielleicht hat Stroustrop sie mit Absicht fast identisch gemacht ... wenn das so ist, sage ich "Schande über ihn, dass er mich verwirrt" :) – Travis

+0

http://www.thealmightyguru.com/Humor/Docs/ShootYourselfInTheFoot.html – Travis