• No results found

Tentamen i DD2387 Programsystemkonstruktion med C++ Resultat:

N/A
N/A
Protected

Academic year: 2021

Share "Tentamen i DD2387 Programsystemkonstruktion med C++ Resultat:"

Copied!
6
0
0

Loading.... (view fulltext now)

Full text

(1)

Tentamen i DD2387 Programsystemkonstruktion med C++ Resultat:

Datum: Tisdag 19 oktober 2010, 14-18 (rättning 18-19) sal: id:

Hjälpmedel: En eller två valfria läroböcker om C++

Tid: 4 timmar

Skriv inte ditt namn på tentan. Under tentan kommer ett id-nummer att delas ut och skrivas på tentan. Anteckna ditt id-nummer på separat papper. När du lämnar in tentan ska du säga vad du heter och prickas av. Tentan rättas i en första omgång två och två av er själva en timme efter tentans slut. Du måste komma tillbaka för att rätta! Skriv svaren direkt på tentan. Om du inte avser få tentan rättad kan du lämna in blankt. Grova fel ger underkänt. Gör ett försök på alla uppgifter. Tentaresultat anslås inte längre på anslagstavla i enlighet med ny policy från KTH centralt. Lycka till!

1. Häxjakten

Byråkratiska Studiestödsbyrån BSB vill veta hur mycket studenter avser studera per termin. Byråkraterna anser det fullt rimligt att kräva tillbaka 25%från den som klarat 99%av terminen men endast avsåg att läsa 99%medan den som enbart klarat 62%fast avsåg läsa 100%kan få full (100%) ersättning. För att parera bristerna i denna inte helt glasklara logik så tänker skolan tvångsinskriva studenter på en obligatorisk kurs i BSB-byråkrati, en kurs som man inte kan examineras i och som man omregistreras på år efter år.

(a) Skriv en typparametriserad funktion fix som tar en mängd studenter, definerade av två iteratorer, och lägger till en typparametriserad kurs k till deras valbara kurser. Du får själv bestämma vad funktionen ska returnera. Funktionen ska kunna anropas så här:

// ...

fix(v.begin(), v.end(), k); // v en mängd av något slag, k en kurs av något slag

(2)

2. Verkligheten

Byråkratiska studiestödsbyrån har problem med examensarbeten som tar längre tid än därtill avsedda 20 veckor. Frågan är om dessa extra veckor finns på riktigt och om de verkligen kan användas till att söka studiemedel. I den overkliga overkligheten på BSB är detta ett reellt problem även om det för oss andra ter sig virtuellt. Vad som är virtuellt är väsentligt i C++ studera följande program.

#include <string>

#include <iostream>

struct A {

A() : a(this) {}

virtual void foo() { std::cout << "a "; } A * a;

};

struct B : public A { B() : b(this) {}

virtual void foo() { std::cout << "b "; } B * b;

};

struct C : public B {

virtual void foo() { std::cout << "c "; } };

int main() { C c;

B b = c; // copy

B & b1 = c;

B & b2 = b;

A & a1 = b1;

A & a2 = b2;

a1.foo();

a2.foo();

std::cout << std::endl;

a1.a->foo();

a2.a->foo();

std::cout << std::endl;

b1.b->foo();

b2.b->foo();

std::cout << std::endl;

}

(a) Vad skriver programmet ut när man kör det?

(3)

(b) Illustrera med en minnesbild hur minnet ser ut efter kopieringen (se // copy).

(c) När man kompilerar koden kommer det att skapas en icke-virtuell destruktor som kommer att gene- rera en varning. Varför bör destruktorn vara virtuell i klasser med virtuella metoder?

(d) Vilka två andra metoder kommer att (rule of three) automatiskt skapas åt dig vid behov?

(e) Polymorfi är inte detsamma som arv. Förklara kort vad polymorfi är, exemplifiera med koden i (a).

(4)

3. Generaldirektör sökes

Ny generaldirektör för Byråkratiska Studiestödsbyrån har utlysts. Explicit goda referenser krävs för att söka. Det är ett svårt jobb att leda en organisation med sådan konstig struktur. Ringa in och förklara vilka rader som inte kompilerar på structerna nedan, var noga med const och referenser.

01 struct Act {

02 float calc(int a) {

03 return 1.1 * a;

04 }

05 };

06 struct Bureau {

07 // Members variables

08 int x;

09 int & y; // reference 10

11 // Constructors

12 Bureau() {

13 x = 1;

14 y = x;

15 }

16 17

18 Bureau(int & a) : x(1), y(a) {

19 }

20 21

22 Bureau(int a, const int & b) : x(a), y(b) {

23 }

24 25

26 // Member methods

27 float foo(Bureau b, const Act & a) const {

28 return a.calc(*this + b);

29 }

30 31 32

33 float bar(Act & a) {

34 return a.calc(*this + x); // implicit constructor call

35 }

36 37 38

39 int operator+(Bureau b) const {

40 return x + b.x;

41 }

42 43

44 };

(5)

4. Vänner

Egentligen är det ganska fånigt när två myndigheter bråkar med varandra och läser varandras webbsidor för att hitta motåtgärder mot andra myndighetens motåtgärder. Kan vi inte alla vara vänner med varandra?

(a) Hur deklarerar man en vän? Skriv två minimala klasser varav den ena är vän med den andra.

(b) Syntaxen för att deklarera vänner till typparametriserade klasser är inte helt intuitiv. Gör ett försök att deklarera en sådan vän (rättas snällt).

(c) Varför bör man vara restriktiv att deklarera vänklasser?

(6)

Fyll i felkoder i tabellen nedan för varje fel på varje uppgift. Felkoden är fyra siffror Xx-YY där X är frågenummer, x delfråga och YY ett löpnummer (01, 02 ...). Markera felet på tentan i marginalen (samma fel kan härledas till två ställen ibland) och skriv utförlig kommentar i tabellen nedan samt, om lämpligt, kort kommentar på tentan (använd annan färg t.ex. blå eller rött bläck som finns att låna). Underlåtelse att rätta små som allvarliga fel kan påverka resultatet på rättarens egen tenta. Om du är osäker på om felet är allvarligt, ringa in felkoden. Om det saknas plats, använd kringliggande rutor som är utan anmärkningar.

Fråga allvarlig felkod övriga fel kommentar 1

2

3

4

References

Related documents

För att parera bristerna i denna inte helt glasklara logik så tänker skolan tvångsinskriva studenter på en obligatorisk kurs i BSB-byråkrati, en kurs som man inte kan examineras i

Markera felet på tentan i marginalen (samma fel kan härledas till två ställen ibland) och skriv utförlig kommentar i tabellen nedan samt, om lämpligt, kort kommentar på tentan

Implementera A och B så att följande kod kompilerar. Det är mycket allvarligt att göra fel på const. Observera att parametern till operator+= antingen är en kopia eller

The problem appears restricted to 30GB first generation Zune players. Later 80GB and 120GB models appear to

Givet ett kontor, NewDeal, som ärvt sina metoder från OldWay, så får man två olika börsindex från en och samma kontorsinstans beroende på hur man refererar till det.. struct NewDeal

4. a)What is the program output? b)Does it make any difference if all methods were virtual? c)Write an explicit call inside B assignment method that call its base class

b) Varför kan inte definitioner ligga i headerfilen? 3p c) inline och template är undantag från regeln i deluppgift b). Varför måste. dessa ligga i

b) Vilka effekter uppnås genom att göra konstruktor, destruktor, kopierings- konstruktor, tilldelningsoperator samt operatorerna new och delete till protected