Klassendefinitionen in C++ (Klassendefinitionen in C++), Lektion, Seite 723146
https://www.purl.org/stefan_ram/pub/klassendefinitionen_c++ (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram

Klassendefinitionen in C++ 

Das folgende Programm zeigt die Definition einer Klasse »::entity«.

main.cpp

#include <iostream>
#include <ostream>

struct entity {};

int main() {}

::std::cout
(keine Ausgabe)

Die Klassendefinition in dem obigen Programm ist »struct entity {};«.

Eine Klassendefinition
struct entity {};

Die im Programm definierte Klasse »::entity« kann ähnlich verwendet werden wie eine von der Bibliothek definierte Klasse. Im weiteren Verlauf dieses Kurses folgen noch Beispiele dafür.

Der Klassenname

Der Klassenname kann vom Programmierer festgelegt werden und unterliegt in etwa denselben Regeln wie ein Variablenname. In dem obigen Programmbeispiel wurde als Name »entity« gewählt.

Syntax einer Klassendefinition

Der Klassenspezifizierer

Die Klassendefinition »struct entity {};« wird in der Form eines Klassenspezifizierers »struct entity {}« geschrieben, dem ein Semikolon »;« folgt.

Die vereinfachte Syntax für einen Klassenspezifizierer lautet:

{$upa~〈}class-specifier {$upa~〉 ::=}
'struct' 〈class-name 
'{' '}'.

Der Teil vor der ersten geschweiften Klammer, wie »struct entity«, wird auch class-head  (Klassenkopf ) genannt. Der Rest hinter dem Klassenkopf kann auch Klassenrumpf  genannt werden.

C++ 2015, 9
A class-specifier is commonly referred to as a class definition. A class is considered defined after the closing brace of its class-specifier has been seen

Das Semikolon

Das Semikolon dient dazu, aus dem class-specifier  eine declaration  zu machen, denn ein Programm (technisch gesagt: eine translation-unit ) muß letztendlich eine Folge von Deklarationen sein.

declaration 〉 ::= 〈class-specifier 〉 ';'.

Hinter dem Klassenspezifizierer  könnte noch eine init-declarator-list  folgen, und das Semikolon »;« ist daher nötig, um die Deklaration abzuschließen, damit dem class-specifier  Folgendes nicht als init-declarator-list  interpretiert wird.

Ein Funktionsdefinition  endet mit einen compound-statement  und ist bereits alleine eine declaration , so daß hinter ihr kein Semikolon folgt.

Aufbau einer Übersetzungseinheit *

Die folgenden Produktionsregeln zeigen den Aufbau einer Übersetzungseinheit translation-unit  bis hin zur Klassendefinition und begründen damit auch noch einmal das Semikolon.

translation-unit 〉 ::= [〈declaration-seq 〉].
declaration-seq 〉 ::= 〈declaration-seq 〉 〈declaration 〉 | 〈declaration-seq 〉.
declaration 〉 ::= 〈block-declaration 〉.
block-declaration 〉 ::= 〈simple-declaration 〉.
simple-declaration 〉 ::= [〈decl-specifier-seq 〉] [〈init-declarator-list 〉] ';'.
decl-specifier-seq 〉 ::= 〈decl-specifier 〉 [〈attribute-specifier-seq 〉] | 〈decl-specifier 〉 〈decl-specifier-seq 〉.
decl-specifier 〉 ::= 〈type-specifier 〉.
type-specifier 〉 ::= 〈class-specifier 〉.

Die Größe eines Exemplars

Ein Exemplar einer Klasse, die mit leeren geschweiften Klammern spezifiziert wurde, ist leer  und sollte die Größe 0 haben. Da die Größe eines Exemplars einer Klasse aber in einem Fall wie in dem folgenden Programm immer mindestens 1 sein muß, ist sie 1.

main.cpp

#include <iostream>
#include <ostream>

struct entity {};

int main(){ ::std::cout << sizeof( ::entity )<< '\n'; }

::std::cout
1

Der Namensraum

Eine außerhalb von Klammern deklarierte Klasse befindet sich im globalen Namensraum, wie in dem folgenden Beispielprogramm durch den unären Bereichsoperator verdeutlicht wird.

main.cpp

#include <iostream>
#include <ostream>

struct entity {};

int main(){ ::std::cout << sizeof( ::entity )<< '\n'; }

::std::cout
1

Der Deklarationspunkt *

Ein Deklarationspunkt ist die Stelle eines Programms, ab der ein Name einer Deklaration gültig ist. (Es handelt sich um eine Stelle im Quelltext. Damit ist nicht das Zeichen ».« gemeint.)

Der Deklarationspunkt befindet sich in »struct entity {};« direkt hinter dem Klassennamen »entity«.

Übungsaufgaben

/   Definieren einer neuen Klasse

Definieren Sie eine Klasse »example« und verwenden Sie dann sizeof, um die Größe eines Objektes jener Klasse auszugeben.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723146 stefan_ram:723146 Klassendefinitionen in C++ Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723146, slrprddef723146, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/klassendefinitionen_c++