Wird geladen...

Einführung in Klassen in C++

Lernen Sie die Grundlagen von Klassen in C++, einschließlich Klassendefinitionen, Objekten und objektorientierter Programmierung.

Der wichtigste Baustein der objektorientierten Programmierung (OOP) ist die Klasse (class). In C++ fassen Klassen Daten (Eigenschaften) und das Verhalten dieser Daten (Methoden) unter einer gemeinsamen Struktur zusammen. In diesem Artikel lernst du, wie man eine Klasse definiert, Objekte erstellt, auf ihre Eigenschaften zugreift und Klassen miteinander in Beziehung setzt.


1. Was ist eine Klasse?

Eine Klasse ist ein abstraktes Modell eines Konzepts oder einer Entität. Man kann sie als die Darstellung eines realen Objekts im Programm betrachten. Zum Beispiel hat ein „Buch“-Objekt Eigenschaften wie Autor, Verlag und Seitenanzahl.

Eine Klasse in C++ wird wie folgt definiert:


class KlassenName {
public:
    // Eigenschaften (Datenfelder)
    // Methoden (Funktionen)
};

2. Die Book-Klasse: Ein einfaches Beispiel

Im folgenden Beispiel wird eine Book-Klasse definiert. Diese Klasse enthält die grundlegenden Eigenschaften und das Verhalten eines Buches.


#include <iostream>
#include <string>
using namespace std;

class Book {
private:
    string title;
    string author;
    int pageCount;
    double price;
    bool available;

public:
    // Konstruktor
    Book(string t, string a, int p, double pr, bool av)
        : title(t), author(a), pageCount(p), price(pr), available(av) {}

    // Getter- und Setter-Methoden
    string GetTitle() const { return title; }
    void SetTitle(string t) { title = t; }

    string GetAuthor() const { return author; }
    void SetAuthor(string a) { author = a; }

    int GetPageCount() const { return pageCount; }

    void DisplayInfo() const {
        cout << "Buch: " << title << endl;
        cout << "Autor: " << author << endl;
        cout << "Seiten: " << pageCount << endl;
        cout << "Preis: " << price << " €" << endl;
        cout << (available ? "Verfügbar" : "Nicht verfügbar") << endl;
    }
};

private-Mitglieder können nur innerhalb der Klasse verwendet werden. Dieses Prinzip nennt man Kapselung (Encapsulation). public-Methoden können von außen aufgerufen werden.


3. Verwendung der Book-Klasse

Die definierte Klasse kann nun wie ein Datentyp verwendet werden. Wir können Objekte vom Typ Book erstellen und ihre Methoden aufrufen.


int main() {
    Book b1("C++ Programmierung", "Bjarne Stroustrup", 1350, 240.0, true);

    b1.DisplayInfo();

    b1.SetTitle("Moderne C++ Programmierung");
    cout << "\nNeuer Titel: " << b1.GetTitle() << endl;

    return 0;
}

Ausgabe:


Buch: C++ Programmierung
Autor: Bjarne Stroustrup
Seiten: 1350
Preis: 240 €
Verfügbar

Neuer Titel: Moderne C++ Programmierung

4. Verknüpfte Klassen: Author und Publisher

In der realen Welt hat ein Buch nicht nur einen Titel, sondern auch einen Autor und einen Verlag. In diesem Fall können wir innerhalb der Book-Klasse andere Klassen über Komposition (composition) verwenden.


class Author {
private:
    string name;
    string country;

public:
    Author(string n, string c) : name(n), country(c) {}
    string GetInfo() const { return name + " (" + country + ")"; }
};

class Publisher {
private:
    string name;
    string city;

public:
    Publisher(string n, string c) : name(n), city(c) {}
    string GetInfo() const { return name + " - " + city; }
};

class Book {
private:
    string title;
    Author author;
    Publisher publisher;
    int pageCount;

public:
    Book(string t, Author a, Publisher p, int pages)
        : title(t), author(a), publisher(p), pageCount(pages) {}

    void DisplayInfo() const {
        cout << "Buch: " << title << endl;
        cout << "Autor: " << author.GetInfo() << endl;
        cout << "Verlag: " << publisher.GetInfo() << endl;
        cout << "Seitenzahl: " << pageCount << endl;
    }
};

Hier enthält die Book-Klasse sowohl eine Author- als auch eine Publisher-Instanz. Das bedeutet: „Ein Buch hat einen Autor und einen Verlag“ — eine Has-a-Beziehung.


5. Praktisches Beispiel: Buch-Informationssystem

Das folgende Beispiel zeigt, wie die drei Klassen zusammen verwendet werden können.


#include <iostream>
#include <string>
using namespace std;

class Author {
private:
    string name;
    string country;

public:
    Author(string n, string c) : name(n), country(c) {}
    string GetName() const { return name; }
    string GetCountry() const { return country; }
};

class Publisher {
private:
    string name;
    int foundedYear;

public:
    Publisher(string n, int year) : name(n), foundedYear(year) {}
    string GetInfo() const {
        return name + " (" + to_string(foundedYear) + ")";
    }
};

class Book {
private:
    string title;
    Author author;
    Publisher publisher;
    int pageCount;
    double price;

public:
    Book(string t, Author a, Publisher p, int pages, double pr)
        : title(t), author(a), publisher(p), pageCount(pages), price(pr) {}

    void DisplayInfo() const {
        cout << "=== Buchinformationen ===" << endl;
        cout << "Titel: " << title << endl;
        cout << "Autor: " << author.GetName()
             << " (" << author.GetCountry() << ")" << endl;
        cout << "Verlag: " << publisher.GetInfo() << endl;
        cout << "Seiten: " << pageCount << endl;
        cout << "Preis: " << price << " €" << endl;
    }
};

int main() {
    Author a("George Orwell", "Großbritannien");
    Publisher p("Penguin Books", 1935);
    Book b("1984", a, p, 328, 89.90);

    b.DisplayInfo();
    return 0;
}

Ausgabe:


=== Buchinformationen ===
Titel: 1984
Autor: George Orwell (Großbritannien)
Verlag: Penguin Books (1935)
Seiten: 328
Preis: 89.9 €

Diese Struktur ist ein Beispiel für Objektkomposition, bei der ein Objekt (Book) andere Objekte (Author, Publisher) enthalten kann. In realen Anwendungen werden solche Klassen oft als Datenmodelle in Datenbanken oder APIs verwendet.


6. TL;DR

  • Klassen fassen Daten (Eigenschaften) und Verhalten (Methoden) zusammen.
  • private-Felder sind nur innerhalb der Klasse zugänglich (Kapselung).
  • public-Methoden bieten kontrollierten Zugriff von außen (Getter/Setter).
  • Im Beispiel Book, Author und Publisher wurde eine Has-a-Beziehung verwendet.
  • Ein Konstruktor wird verwendet, um Eigenschaften beim Erstellen des Objekts zu initialisieren.
  • Alle Beispiele können in Visual Studio 2022 oder GCC 11+ kompiliert werden.

Ähnliche Artikel