• 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!
4
0
0

Loading.... (view fulltext now)

Full text

(1)

Tentamen i DD2387 Programsystemkonstruktion med C++ Resultat:

Datum: Tisdag 20 oktober 2009, 8-12 (rättning 13-14)

Rätta mycket nogrannt. Allt som är fel ska markeras. Avgör därefter om det är ett allvarligt fel eller inte. Enstaka allvarliga fel behöver inte ge underkänt. Kommentera både i tentan och på baksideformuläret. 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

template <class T, class S>

void fix(T iter, T end, S course) { while (iter != end) {

iter->add(course); // or +=, add\_course ...

iter += 1; // or iter++, ++iter, iter=iter+1 }

}

(b) Vad ställer din funktion fix för krav på typparametrarna? Var noga med detaljerna.

The iterator T must have +=. The class which the iterator T points to must have a method add that can take course as parameter. The course could be an object hierarchy or just a a simple int. See below:

struct ss {

void add(int t) {}

template <class T>

void add(T t) { }

};

#include <vector>

int main() {

std::vector<ss> v;

ss k;

fix(v.begin(), v.end(), k);

fix(v.begin(), v.end(), 5);

}

Saxat ur numero: KTHs studenter har under en längre tid trakasserats av CSN med återbetalningskrav för att våra höstterminer endast har varit 17 veckor i st f 20. Detta gäller även studenter på Chalmers LTU och Linköping. Dessa universitet ska träffa CSN i juni för att hitta en vettig lösning, men eftersom ingen tror att CSN kommer att förstå att verkligheten endast modelleras i Ladok kommer HT kommer att förlängas i Ladok (helst retroaktivt ...) skolorna justerar LoT till 30hp per termin. Förhoppningsvis kommer det att få CSN att återgå till sin huvudverksamhet: att inte svara i telefon.

1

(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?

c b

c c

c c

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

See blackboard.

(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?

To ensure that the right destructor is called. Example A * a = new C();

delete a;

2

(3)

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

assignement operator (operator=) and copy constructor

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

Polymorphism is the is the ability of a bas class A, to appear as and be used like the subclass B. It works only with pointers and reference. Example:

a1.foo(); a1 is a pointer to a C object and C::foo() will be called since it is a virtual function.

When grading: Works only for pointers and references, not serious if one is omitted. Might be serious to omit if the answer otherwise is not clear. Serious fault to exemplify with a non-polymorphic call like b.foo()

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

3

(4)

compile message

tal1.cpp:12: error: uninitialized reference member ’Bureau::y’

tal1.cpp:22: error: invalid initialization of reference of type ’int&’ from expression of type ’con tal1.cpp:28: error: no matching function for call to ’Act::calc(int) const’

Note when grading that it is not an error to mark the member function and explain what is missing instead of markin the call of the function.

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.

struct A {

friend struct ss; // friend with struct ss in tal 1 };

(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).

template <class S> friend class Calendar;

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

Because it exposes all private data and data as a general principal in object oriented programming should be encapsulated.

Saxat ur Numero: CSN:s häxjakt på våra studenter fortsätter. Vi lade förra veckan upp en sida med information om hur våra D- och Mediastudenter kan minska risken att fastna i någon av CSN:s kontroller och blev via e- brevskorrespondens medvetna om att CSN nu går in och läser KTH:s webbsidor i syfte att hitta motåtgärder mot våra motåtgärder. I tisdags berättades det på GA-mötet om en student som fått återbetalningskrav med motivet att det inte pågick någon undervisning i tentaveckan (som studenten hade och klarade en tenta i!). På samma GA-möte erbjöd jag mig att söka den utannonserade tjänsten som generaldirektör för CSN i syfte att lägga ner verksamheten, men sista ansökningsdag var 25:e augusti. (http://osqledaren.se/2010/06/regeringskansliet-soker- nygeneraldirektor- for-csn/).

4

References

Related documents

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

(a) Skriv en funktion som givet två strängar returnerar index till första eventuella förekomsten av en sådan omkastning. Om ingen sådan påträffas

The code for “monsterspel” - the text game has a player class and a monster class both derived from Actor. There are several subclasses to the Monster class such as Troll, Wolves

(a) Skriv en typparametriserad partitioneringsfunktion som givet ett in- tervall och ett pivotelement sorterar alla element så att de som är större än pivotelementet hamnar till höger