Programmverständnis
Bei diesem Aufgabentyp geht es darum, dass man den Code versteht und die korrekte Ausgabe findet.
Probeklausur SoSe 2023
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 ZAufgabe 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:
=
- Referenziert:
- Operatoren werden zuerst ausgeführt und danach die weiteren Anweisungen.
m3 = ++m2;->++m2;->m3 = m2;
- Destruktoren werden am Schluss umgekehrt aufgerufen.
std::mapsortiert die Elemente aufsteigend.std::mapbenötigt einen Operator<um die Elemente zu sortieren.- Neue Klassen brauchen einen Operator
<<um sie auszugeben.
Last updated on