Tentamen i 2D1387 Programsystemkonstruktion med C++
Datum: Torsdag 15 januari, 14-19 Hjälpmedel: Valfri lärobok i C++
Tid: 5 timmar
Skriv tydligt och ge motiveringar till dina svar. För godkänt krävs högst 25 po- äng. Maximal poäng är 45.
1. Betrakta programkoden nedan.
a) Vilka medlemsfunktioner ges implicit av kompilatorn om du inte skriver
dem själv? 2p
b) Ange för varje rad i programmet vilka av funktionerna från uppgift a som
anropas i klassen A. 8p
int main() {
class A {};
A *ap = new A;
A *aa = new A[3];
A a = *ap;
a = *aa;
delete ap;
delete [] aa;
return 0;
}
2. Funktionen apply applicerar (anropar) en funktion f på varje element i en sekvens av element.
a) Skriv en generell implementation av apply. 8p b) Ge två exempel på hur du anropar apply. Låt sekvenserna vara en in- byggd array och en STL-behållare. Låt f vara en vanlig funktion och ett
funktionsobjekt. 4p
1
3. Programkoden nedan innehåller fel och kan inte kompileras. Vilka är felen
och hur kan de åtgärdas? 12p
struct A {
virtual static void foo() {}
static int bar() { return 0; } static const int i = bar();
static int j = 8;
int k = bar();
int m;
int n;
B b;
class B {
B() : A(), m(bar()), n(A::n) {}
int n;
};
};
4. C är det programspråk som ligger till grunden för C++. I C använde man preprocessorn flitigt, något man försöker undvika i C++ så långt det går.
a) Preprocessorn kan användas till att skapa konstanter, t.ex. #define SIZE 10.
I C++ rekommenderas man använda const för att skapa en konstant. Vad
är fördelarna med const över #define? 3p
b) Preprocessorn kan även användas för att skapa makron, som påminner en del om funktioner. Exempel: #define MAX(a, b) ((a) > (b) ? (a) : (b)).
I C++ har man infört mallar, och dessa kan i kombination med inline med fördel användas istället för makron. Vad är fördelarna med mallar
över makron? 6p
c) Finns det några nackdelar med att använda mallar istället för makron? 2p
2