Dreißig Übungen zu Klassen in C++ — von Attributen und Konstruktoren über Getter bis zur Aufteilung auf Header und Quelldatei.
Dein Fortschritt:
0 / 0 Aufgaben
1
Übungsaufgaben
Dreißig Übungen in gemischter Reihenfolge — du klickst, ziehst, ordnest, rechnest und knobelst. Jede Übung gibt dir sofort eine Rückmeldung, und zu jeder Aufgabe gibt es zwei gestufte Tipps: Der erste zeigt die Richtung, der zweite den entscheidenden Schritt. Die Chips zeigen das Anforderungsniveau: AFB I heißt wiedergeben und direkt anwenden, AFB II selbst entscheiden und verknüpfen, AFB III begründen, beurteilen oder eine Falle durchschauen. Aufgaben mit dem Chip Mix verbinden Wissen aus früheren Unterkapiteln, bei Trick steckt eine Falle drin. Fährst du über ein unterstrichenes Arbeitswort, siehst du, was es genau von dir verlangt.
A1
Was meint der Compiler?
AFB II
Zu einer Klasse Lampe mit dem Attribut private: int hell; und dem Konstruktor Lampe(int h) hat g++ sechs Fehlermeldungen ausgegeben. Ordne jeder Meldung die Ursache zu.
Klicke links einen Eintrag an und dann rechts den passenden — es entsteht eine Verbindungslinie. Mit der Tastatur: Enter zum Auswählen, ↑/↓ zum Wandern.
Die letzte Meldung verwirrt am meisten: Ohne Lampe:: ist dimmen eine ganz normale Funktion, die das Attribut hell nicht kennt. Und Lampe() in der vorletzten Meldung bedeutet „Konstruktor ohne Parameter“ — den gibt es nicht, weil nur Lampe(int h) definiert ist.
Ansatz: Suche in jeder Meldung ein Schlüsselwort: private, constructor, member, class definition …
Weiter:Lampe::Lampe() ist der Konstruktor ohne Parameter.
A2
class oder struct?
AFB II
Erkläre den Unterschied zwischen class und struct, indem du in jeder Zeile das passende Kreuz setzt.
Setze in jeder Zeile das passende Kreuz — hier ist es genau eins pro Zeile. Enter setzt und löscht.
Aussage
nur class
nur struct
beide
Ohne Angabe ist alles private
Ohne Angabe ist alles public
Nach der schließenden Klammer steht ein Semikolon
Kann einen Konstruktor und Methoden enthalten
Mit private: lässt sich ein Bereich sperren
Der einzige Unterschied ist der Standard-Zugriff: class beginnt privat, struct öffentlich. Alles andere — Semikolon, Konstruktoren, Methoden, private: und public: — gilt für beide.
Ansatz: Es gibt nur einen Unterschied zwischen class und struct.
Weiter: Frage dich bei jeder Aussage: Würde sie auch für die jeweils andere Art gelten?
A3
Akku-Anzeige malen
AFB IMix
Zeichne die Ausgabe des Programms ins Raster: ein Feld pro Zeichen, schwarz für #, leer für einen Punkt.
C++ · akku.cpp (Ausschnitt)
class Akku {
private:
int ladung;
public:
Akku(int l) { ladung = l; }
void laden(int p) { ladung = ladung + p; if (ladung > 100) ladung = 100; }
void ausgeben() {
for (int i = 0; i < ladung / 25; i++) cout << "#";
for (int i = ladung / 25; i < 4; i++) cout << ".";
cout << endl;
}
};
// main:
Akku x(40);
x.ausgeben();
x.laden(30);
x.ausgeben();
x.laden(50);
x.ausgeben();
Akku y(10);
y.ausgeben();
Wähle Raute und klicke Felder an — Ziehen malt mehrere auf einmal. Jede Zeile des Rasters ist ein Aufruf von ausgeben, von oben nach unten.
ladung / 25 ist eine Ganzzahldivision: 40 gibt 1 Raute, 70 gibt 2, nach laden(50) wird bei 100 gekappt (4 Rauten). Das neue Objekt y startet mit 10, also 0 Rauten.
Ansatz: Verfolge die Ladung von x Schritt für Schritt: 40, dann 70, dann gekappt.
Weiter: Rauten gibt es ladung / 25 (ganzzahlig), der Rest der vier Felder bleibt leer. Das Objekt y ist unabhängig von x.