wake-up-neo.com

Kann eine C++ - Struktur Memberfunktionen haben?

Ich war ziemlich verwirrt über den Unterschied zwischen struct und class, da ich sie scheinbar für ziemlich dieselben Dinge benutzte. Ich googelte die Unterschiede und die einzige Antwort, die ich sah, war, dass structs standardmäßig öffentliche Mitglieder und Klassen private Mitglieder haben. Meine Dozenten haben mir jedoch gerade gesagt, dass Strukturen keine Mitgliederfunktionen enthalten können. Ich habe jedoch viele Threads im Internet gesehen, in denen die Mitglieder ihre Mitgliedsfunktionen in structs aufnehmen und ausdrücklich sagen, dass dies in Ordnung ist.

Meine Dozenten scheinen hartnäckig zu sein, dass structs per definitionem keine Funktionen haben können. Was passiert also? Das einzige, woran ich denken könnte, ist, dass der Compiler möglicherweise Funktionen innerhalb einer Struktur in etwas anderes umwandelt, sodass sie technisch keine Funktionen enthalten ... Gibt es eine klare Antwort auf diese Widersprüche?

36
Sam

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

Ja das ist korrekt. Außerdem werden Basen einer Struktur standardmäßig öffentlich vererbt, während Basen einer Klasse standardmäßig privat vererbt werden.

Das Deklarieren einer Funktion als Member einer Struktur hat genau dieselbe Semantik wie das Deklarieren einer Funktion als Member einer Klasse, mit Ausnahme des Unterschieds, den Sie festgestellt haben. Sie werden jeweils als Elementfunktionen bezeichnet.

37
Brian

Ihre Dozenten sind nachweislich falsch, vorausgesetzt, sie sprechen tatsächlich von C++ und nicht von C.

Es ist trivial einfach, sich dies im Code zu beweisen oder Die C++ - Programmiersprache abzufragen und/oder Strukturen zu suchen.

6
meagar

C++ structs kann definitiv Mitgliedsfunktionen haben . C-Strukturen dagegen sind ein ganz anderes Tier - sie sind im Wesentlichen Arrays, die Namen und Typinformationen für bestimmte Indikatoren bereitstellen.

3
Patrick Collins

Es scheint mir, dass nur weil etwas von einer Sprache erlaubt ist, NICHT bedeutet, dass es eine gute Idee ist. Obwohl technisch gesehen 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 das Hauptziel der Einführung eines Klassentyps, um die Definition der Daten und der Logik zu unterstützen, die auf die Daten in einer engen Beziehung wirken, und so gesündere Schnittstellen zu den Daten fördern?

1
Travis

Im C++ 98-Standard:

Eine Struktur ist eine Klasse, die mit der Klassenschlüsselstruktur definiert ist. Ihre Mitglieder und Basisklassen (Klausel 10) sind standardmäßig öffentlich (Klausel 11).

und

Mitglieder einer Klasse, die mit dem Schlüsselwort class definiert sind, sind standardmäßig privat. Mitglieder einer Klasse, die mit den Schlüsselwörtern struct oder union definiert sind, sind standardmäßig öffentlich.

Es bedeutet also, dass der einzige Unterschied zwischen struct und class die Standardelementzugriffssteuerung ist, nämlich public oder private.

Kann eine C++ - Struktur Memberfunktionen haben?

Ja, sie können.

Meine Dozenten scheinen hartnäckig zu sein, dass structs per definitionem keine Funktionen haben können. Was passiert also?

Wenn es eine Vorlesung zu C ist, ist es richtig .. Wenn es eine Vorlesung zu C++ ist, ist es nicht richtig.

Das einzige, woran ich denken könnte, ist, dass der Compiler möglicherweise Funktionen innerhalb einer Struktur in etwas anderes umwandelt, sodass sie technisch keine Funktionen enthalten ... Gibt es eine klare Antwort auf diese Widersprüche?

Ja, es gibt eine klare Antwort: C++ - Struktur kann Memberfunktionen haben.

0
YuGiOhJCJ