• No results found

2D1387 Programsystemkonstruktion med C++ Lösningsförslag, tentamen 9 januari 2003

N/A
N/A
Protected

Academic year: 2021

Share "2D1387 Programsystemkonstruktion med C++ Lösningsförslag, tentamen 9 januari 2003"

Copied!
2
0
0

Loading.... (view fulltext now)

Full text

(1)

2D1387 Programsystemkonstruktion med C++

Lösningsförslag, tentamen 9 januari 2003

Obs: Dessa lösningar är just lösningsförslag. Rättningen kan se något an- norlunda ut.

Uppgift 1

A B B B

Uppgift 2

a) Exempel på implementation:

template<class T>

const T &min(const T &t1, const T &t2) {

return t1 < t2 ? t1 : t2;

}

template<class T>

const T &max(const T &t1, const T &t2) {

return t1 < t2 ? t2 : t1;

}

b) Exempel på implementation:

template<class T>

void swap(T &t1, T &t2) {

T tmp(t1);

t1 = t2;

t2 = tmp;

}

c) För att byta innehåll i vektorn byter vi plats på dess medlemmar. Exempel på implementation:

template<>

void swap(Vector &v1, Vector &v2) {

swap(v1.size, v2.size);

swap(v1.data, v2.data);

}

(2)

Uppgift 3

Problemen och förslag på åtgärd:

class A {

public: // 1: i synlig från main static int i;

public: // 2: j synlig från B(int) int j;

public:

virtual void foo() {}

};

struct B : public A {

B(int i) : c(i) { j = i; } // 3: c finns inte private:

virtual void foo() {}

};

int A::i; // 4: A::i saknar definition int main()

{

A a;

B b(1); // 5: B har ingen defaultkonstr a.i = 7;

b.j = 3;

A &ar = b;

ar.foo();

return 0;

}

Uppgift 4

a) Alla anrop till A-objektet måste gå via en pekare, vilket tar tid. A-objektet måste allokeras dynamiskt, vilket kan ta tid om det blir många små objekt som ska allokeras och avallokeras. Det dynamiskt allokerade minnet kan ligga på en annan plats i minnet, vilket kan ge cachemissar. Detta är extra illa om man itererar över en vektor med B-objekt, där varje dynamiskt allokerat A-objekt ligger på en egen minnessida. Dessutom måste man implementera det interface som man annars hade ärvt från A.

b) Arv är nödvändigt vid åtkomst av medlemmar som är protected, om B ska användas istället för A-objekt (t.ex. då B * konverteras till A *) och om ett A- objekt inte kan skapas dynamiskt pga att konstruktorn eller operator new() är protected.

References

Related documents

Den sista radens operator[] skriver i strängen. Alltså måste vi allokera nytt minnesutrymme och kopiera över strängen innan vi skriver i det nya minnesutrymmet. Det är detta som

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

b) Typkontroll av argument och returvärde, minskad risk för syntaxfel, de- buggning, mallar kan specialiseras, funktioner kan överlagras på antal element, makron kan inte

c) Både deklaration och definition för bar och baz är korrekta trots att de inte överensstämmer helt. Vad är orsaken till att detta är tillåtet? 3p d) Trots påståendet i uppgift

const A &amp; ger två olika överlagringar av funk- tionen boo eftersom de två överlagringarna exponerar olika gränssnitt för an- vändaren (det ena kan ändra indatat, det andra

på åtgärd där så är möjligt. För att minska kompileringstiderna och underlätta underhåll vill man undvika beroenden mellan klasser. Vi vill utöka klassen B genom att

När använder man dem som argumenttyp? När bör en funktion vara const? Hänvisa till uppgift a med motivering där så är lämpligt. 6p c) Vilken är anledningen till att man gör

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