• 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: Lördag 25 oktober 2003, 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 följande program:

struct A {

A() { cout << "A()"; }

~A() { cout << "~A()"; }

A(const A &) { cout << "A(A)"; }

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

struct B : public A {

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

A a;

B t;

B b = t;

A aa[3] = {a, b};

A &ar1 = aa[1];

A &ar2 = b;

ar1.foo();

ar2.foo();

Vad skriver programmet ut när man kör det? Ge en kommentar för varje rad

för att motivera ditt svar. 10p

2. Funktionen subseq svarar på frågan om en sekvens är en delsekvens av en annan. Exempel: {1 2 3} är en delsekvens av {1 2 3 4} och {2 4} är en del- sekvens av {1 2 3 4} medan varken {3 2} eller {2 2} är en delsekvens av {1 2 3 4}.

a) Skriv en så generell implementation av subseq som möjligt och visa hur

du anropar den. 9p

b) I din implementation, är den tomma sekvensen (dvs sekvensen utan ele-

ment, { }) en delsekvens av {1 2 3 4}? 1p

1

(2)

3. Betrakta följande programkod:

const A * const foo(const A &) const;

const A & const far(const A &) const;

void bar(const int);

void baz(int);

void boo(const A &);

void bar(int) {}

void baz(const int) {}

void boo(A &) {}

a) Redogör för vad de fyra förekomsterna av const i funktionen foo har för

funktion. 4p

b) Deklarationen av funktionen far är inte syntaktiskt korrekt. Vad är pro-

blemet och varför är detta inte tillåtet? 3p

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 c så överensstämmer definitionen för boo inte med deklarationen för boo. Vad är orsaken till detta? Ge gärna exempel

för att tydliggöra. 3p

4. När man skriver programkod som andra ska använda bör man dokumente- ra hur argumenten och returvärdet är tänkta att användas. För att ytterligare underlätta bör man så långt det går använda kompilatorn för att tvinga använ- daren till korrekt och effektiv användning.

a) Funktionen reverse vänder på elementen i en vektor. Vilken deklara- tion är att föredra av void reverse(std::vector &) och std::vector reverse(const std::vector &)? Motivera. 3p b) Vilken deklaration är att föredra av medlemsfunktionerna void operator+

(MyInt &) och MyInt operator+(const MyInt &)? Motivera. 3p c) Du implementerar en funktion get() och väljer mellan följande två dekla- rationer: A &get() och A *get(). De båda implementationerna exponerar olika gränssnitt för användaren. Beskriv i punktform för-och nackdelar i gränssnittet hos den första resp. den andra implementationen. 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

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

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