Objekte mit mehreren Feldern in C++ [] (Objekte mit mehreren Feldern in C++), Lektion, Seite 723310
https://www.purl.org/stefan_ram/pub/mehrere_felder_c++ (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
C++-Kurs

Objekte mit mehreren Feldern in C++ 

Es ist auch möglich, mehrere Felder in einem Klassenspezifizierer zu deklarieren.

In dem folgenden Programm wird eine Klasse definiert, deren Objekte zwei double-Felder namens »x« und »y« haben. Das Programm zeigt, daß jedes Feld unabhängig vom anderen jeweils einen double-Wert speichern kann.

main.cpp

#include <iostream>
#include <ostream>

struct pair
{ double x;
double y; };

int main()
{ pair o;
o.x = 2.0;
o.y = 3.0;
::std::cout << o.x << '\n';
::std::cout << o.y << '\n'; }

::std::cout
2
3

Das folgende Beispiel illustriert die Unabhängigkeit zweier Felder zweier Objekte.

main.cpp

#include <iostream>
#include <ostream>

struct pair
{ double y;
double x; };

int main()
{ pair p;
pair q;
p.x = 1.0;
p.y = 2.0;
q.x = 3.0;
q.y = 4.0;
::std::cout << p.x << '\n';
::std::cout << p.y << '\n';
::std::cout << q.x << '\n';
::std::cout << q.y << '\n'; }

::std::cout
1
2
3
4

Aggregatinitialisierung

Es ist erlaubt, daß bei einer Aggregatinitialisierung die Initialisierer für einige Felder weggelassen werden, dann werden die Einträge, für die kein Initialisierer festgelegt wurde, mit ihrem Eintragsinitialisierer initialisiert (falls keiner vorhanden ist, werden sie wertinitialisiert).

main.cpp

#include <iostream>
#include <ostream>

struct pair
{ double a;
double b{ 1.0 };
double c{ 5.0 };
double d; };

int main()
{ pair o{ 2.0, 3.0 };
::std::cout << o.a << '\n';
::std::cout << o.b << '\n';
::std::cout << o.c << '\n';
::std::cout << o.d << '\n'; }

transcript
2
3
5
0

Für das Feld »b« wurde ein Initialisierer »{ 1.0 }« im Klassenspezifizierer angegeben, doch dann hatte der Wert »3.0« aus der Aggregatinitialisierung Vorrang. Das folgende Programm zeigt den Ablauf der Initialisierung.

main.cpp

#include <iostream>
#include <ostream>
#include <string>

using namespace ::std::literals;

template< class C >
C value( C const x )
{ ::std::cout << "value: "s << x << '\n';
return x; }

struct pair
{ double b{ value( 1.0 ) }; };

int main()
{ pair o{ value( 2.0 ) };
::std::cout << o.b << '\n'; }

transcript
value: 2
2

 

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 stefanram723310 stefan_ram:723310 Objekte mit mehreren Feldern in C++ Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723310, slrprddef723310, 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/mehrere_felder_c++