Skip to Content

Programmverständnis

Bei diesem Aufgabentyp geht es darum, dass man den Code versteht und die korrekte Ausgabe findet.

Gegeben sei das folgende C++-Programm:

#include <iostream> class Probe { public: Probe() { std::cout << "X "; } ~Probe() { std::cout << "Z "; } Probe fun1(Probe &p) { return p; }; }; void fun2(Probe &p) { Probe z = p; // Kein Copy-Konstruktor wird aufgerufen. }; int main() { Probe p1; // Konstruktor wird aufgerufen -> X p1 = p1.fun1(p1); // fun1 ruft die Referenz auf. Keine Kopie wird erstellt. fun2(p1); // fun2 ruft die Referenz auf. In der Funktion wird eine Kopie erstellt. Probe p2 = p1; // Kopierkonstruktor wird aufgerufen. return 0; // Destruktor wird aufgerufen für p1 und p2 -> Z Z };

Was ist die Ausgabe des Programms?

X Z Z Z Z

Aufgabe 2:

Gegeben sei das folgende C++-Programm:

#include<iostream> template<typename T> bool equal(T a, T b) { return a == b; } int main() { std::cout << equal<int>(3, 4) << "\n"; std::cout << equal<double>(3, 3.0) << "\n"; int a=1, b=1; std::cout << equal<int*>(&a, &b) << "\n"; return 0; }

Ist das gegebene Programm funktional oder beinhaltet es Fehler? Wie ist die Aus- gabe des Programms für alle Zeilen, die keinen Fehler beinhalten?

Tipps

Diese Aufgaben verwenden immer wieder Tricks die man leicht übersehen kann.

  • Darauf achten, wann etwas referenziert wird und wann etwas kopiert wird.
    • Referenziert: &
    • Kopiert: =
  • Operatoren werden zuerst ausgeführt und danach die weiteren Anweisungen.
    • m3 = ++m2; -> ++m2; -> m3 = m2;
  • Destruktoren werden am Schluss umgekehrt aufgerufen.
  • std::map sortiert die Elemente aufsteigend.
  • std::map benötigt einen Operator < um die Elemente zu sortieren.
  • Neue Klassen brauchen einen Operator << um sie auszugeben.
Last updated on