C++
VeröffentlichtRevision 1

Zusammengehörige Daten mit struct bündeln

Eine Struktur, mit struct definiert, bündelt zusammengehörige Daten unter einem Typnamen. Die darin enthaltenen Variablen heißen Datenmember oder Felder. Ein konkreter Wert dieses Typs ist eine Instanz.

Zusammengehörige Daten mit struct bündeln#

Eigene Datentypen und Klassen · Lektion 38 von 60

Voraussetzungen: Strings, Vector. Lernziel: Du bildest einen eigenen Datentyp für ein fachliches Objekt.

Eine Struktur, mit struct definiert, bündelt zusammengehörige Daten unter einem Typnamen. Die darin enthaltenen Variablen heißen Datenmember oder Felder. Ein konkreter Wert dieses Typs ist eine Instanz.

C++
1#include <iostream>2#include <string>3#include <vector>4 5struct Person {6    std::string name;7    int alter{};8};9 10int main() {11    Person ada{"Ada", 36};12    ada.alter = 37;13    std::vector<Person> personen{ada, {"Linus", 30}};14    for (const Person& person : personen) {15        std::cout << person.name << ": " << person.alter << '\n';16    }17}

Der Punktoperator in ada.alter greift auf ein Member zu. Person ist ein Typ, ada ein Objekt. Das Semikolon nach der schließenden Strukturklammer gehört zur Definition und wird leicht vergessen.

Initialisierung und Kopien#

Diese einfache Struktur kann als Aggregat mit einer Liste ihrer Memberwerte initialisiert werden. Die Werte folgen der Deklarationsreihenfolge: zuerst name, dann alter. int alter{}; gibt einen Standardanfangswert vor. Fehlende Textwerte erzeugen hier leere Strings.

Person zweite = ada; kopiert die Member. Strings verwalten ihre Inhalte als unabhängige Werte. Ändert sich zweite.name, ändert das nicht automatisch ada.name. Bei später hinzugefügten Rohzeigern wäre nur der Zeigerwert kopiert; das Ziel würde dadurch nicht zu einer eigenständigen Kopie.

Datenmodell statt paralleler Listen#

Ein Datenmodell beschreibt, welche Informationen zusammengehören. Ein Vector von Person hält Name und Alter gemeinsam. Zwei getrennte Vektoren namen und alter können dagegen versehentlich unterschiedlich lang werden oder in verschiedener Reihenfolge stehen.

Eine Struktur kann auch Memberfunktionen enthalten. In C++ ist struct nicht auf passive Datensammlungen beschränkt. Der wichtigste Standardunterschied zu class liegt in den voreingestellten Zugriffsrechten, nicht in grundsätzlich anderen Fähigkeiten.

Typische Fehler#

no member named ... deutet auf einen falschen Membernamen oder falschen Typ hin. Bei einem Zeiger auf eine Person verwendest du zeiger->name, sofern er ein gültiges Ziel hat. Bei einem Objekt verwendest du person.name. Der Pfeil entspricht beim Rohzeiger im Wesentlichen (*zeiger).name.

Übung#

Entwirf einen Datentyp für ein Buch mit Titel und Seitenzahl.

Lösung

struct Buch { std::string titel; int seiten{}; };. Prüfe externe Seitenzahlen vor der Verwendung auf einen sinnvollen Bereich. Die Struktur allein erzwingt noch nicht, dass alle fachlichen Werte gültig sind.

Weiterlernen#

Zurück: unique_ptr, shared_ptr und weak_ptr · Kursübersicht · Weiter: Benannte Zustände mit enum class

Mitwirkende 1

Menschen, deren Änderungen in dieser Seite veröffentlicht wurden.

Kommentare 0

Kommentare sind für diese Seite deaktiviert.