Erzeugung mehrerer Objekte in C++
Wenn wir mehrere Objekt einer Klasse erzeugen, dann enthält jedes dieser Objekte jeweils ein eigenes Feld.
So hat dann man mit zwei Objekten beispielsweise auch zwei unabhängige Felder, wie das folgende Beispielprogramm zeigt.
main.cpp
#include <iostream>
#include <ostream>struct entity { double f; };
int main()
{ entity e0;
entity e1;
e0.f = 1.0;
e1.f = 2.0;
::std::cout << e0.f << '\n';
::std::cout << e1.f << '\n'; }::std::cout
1
2
Der Spezifizierer der Klasse »entity« enthält zwar nur die Deklaration eines Feldes »f«, jedoch erhält daraufhin jedes einzelne Exemplar jener Klasse ein solches Feld »f«. Daher gibt es bei zwei Exemplaren jener Klasse also auch zwei unabhängige Felder »f«, einmal das Feld »e0.f« und dann das Feld »e1.f«.
Zugriff auf verdeckte Klassennamen
main.cpp
#include <iostream>
#include <ostream>struct entity { double entity{ 25 }; };
int main(){ entity entity; ::std::cout << entity.entity << '\n'; }
::std::cout
25
Das voranstehende Programm enthält auch noch eine Variable »entity«, die genauso heißt wie die Klasse »entity«. Ab der Stelle der Definition jener Variablen, steht »entity« dann für die Variable und nicht mehr die Klasse; der Name der Variablen „verdeckt“ den Namen der Klasse. Daher kann danach mit »entity e;« nicht noch eine zweite Variable der Klasse »entity« deklariert werden, denn »entity« stünde darin für die Variable und nicht mehr für den Typ!
Es ist jedoch möglich durch Qualifikation mit »struct« oder »class« auf den verdeckten Typnamen zuzugreifen.
main.cpp
#include <iostream>
#include <ostream>
struct entity { double entity{ 25 }; };
int main()
{ entity e1; ::std::cout << e1.entity << '\n';
struct entity e2; ::std::cout << e2.entity << '\n';
class entity e3; ::std::cout << e3.entity << '\n'; }::std::cout
25
25
25
Übungsfragen
? Objekte mit Feldern
Welche Ausgabe erzeugt das folgende Programm?
main.cpp
#include <iostream>
#include <ostream>struct entity { ::std::string s; };
int main()
{ entity e0;
entity e1;
e1.s = "Anton";
e0.s = "Berta";
::std::cout << e0.s << '\n';
::std::cout << e1.s << '\n'; }
Übungsaufgaben
/ Schreiben und Verwenden einer Klassendefinition
Schreiben Sie eine Definition einer Klasse, die ein int-Feld enthält. Legen Sie zwei Exemplare dieser Klasse an und setzen Sie das int-Feld bei dem einen Exemplar auf den Wert »12« bei dem anderen Exemplar auf den Wert »7«. Geben Sie dann schließlich die Werte der beiden Felder aus.