• No results found

Tentamen i 2D1387 Programsystemkonstruktion med C++

N/A
N/A
Protected

Academic year: 2021

Share "Tentamen i 2D1387 Programsystemkonstruktion med C++"

Copied!
2
0
0

Loading.... (view fulltext now)

Full text

(1)

Tentamen i 2D1387 Programsystemkonstruktion med C++

Datum:9 januari 2003

Hjälpmedel:Valfri lärobok i C++

Tid: 5 timmar

Skriv tydligt och ge motiveringar till dina svar. 25 poäng ger garanterat god- känt. Maxpoäng är 45.

1. Betrakta följande program:

struct A {

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

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

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

};

A a;

B b;

A &ar = b;

a.foo();

b.foo();

ar.foo();

b.a->foo();

Vad skriver programmet ut när man kör det? Motivera ditt svar. 8p 2. Mallfunktionerna max och min jämför två element med operator< och retur- nerar det största resp. minsta elementet. Mallfunktionen swap byter värde på två variabler. Exempel:

int j;

int i = min(1, 2);

A a, b;

A c = max(a, b);

swap(a, b);

Vector v, w; // Vector från lab 1 swap(v, w);

a) Implementera max och min. 6p

b) Implementera swap. 5p

c) Anropet swap(v, w) ovan är onödigt ineffektivt eftersom vektorerna ko- pieras elementvis. Implementera en specialisering swap<Vector>(v, w) som på ett effektivt sätt byter innehållet i de två vektorerna. 6p

1

(2)

3. Nedanstående program går inte att kompilera. Peka ut felen och ge förslag

på åtgärd där så är möjligt. 10p

class A {

static int i;

int j;

public:

virtual void foo() {}

};

struct B : public A {

B(int i) { c = i; j = i; } private:

virtual void foo() {}

};

int main() {

A a;

B b;

a.i = 7;

b.j = 3;

A &ar = b;

ar.foo();

return 0;

}

4. För att minska kompileringstiderna och underlätta underhåll vill man undvika beroenden mellan klasser. Vi vill utöka klassen B genom att återanvända delar av klassen A. Om A är basklass till B måste As definition vara synlig när B definieras.

För att undvika detta kan man i många fall låta B innehålla en pekare till ett A-objekt och begränsa användandet av A till implementationsfilen.

a) Vad är nackdelarna (i resurser såsom tid och minne) med ovanstående

teknik? 4p

b) Virtuella funktioner i A kan bara överskrivas genom arv. Räkna upp ytterli- gare fall där arv är mer fördelaktigt än tekniken ovan. Uppfinningsrikedom

kan ge bonuspoäng. 6p

2

References

Related documents

• Skriv metoden bool move_event(const Date &amp; from, const Date &amp; to, std::string event) som kan flytta händelser i kalendern genom att först plocka ut och sedan lägga

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

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

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

Du vill skapa en trådklass Thread med följande egenskaper: Thread ska när tråden räknat klart frigöra sig själv och får därför inte allokeras på stacken. Trådens arbete ska

Skriv tydligt och ge motiveringar till dina svar. För godkänt krävs 25 poäng, för betyg fyra krävs 34 poäng, för betyg fem krävs 40 poäng. Alla betygsgränser är