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

Loading.... (view fulltext now)

Full text

(1)

Tentamen i 2D1387 Programsystemkonstruktion med C++

Datum: Onsdag 11 januari 2005, 14-18

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

Tid: 4 timmar

Skriv tydligt och ge motiveringar till dina svar. För godkänt krävs 23 poäng.

Maximal poäng är 39.

1. Studera klasserna A och B nedan.

class A { class B {

vector<int> * m1; vector<int> * m1;

vector<string> * m2; vector<string> * m2;

public: public:

A() { void create() {

m1 = new vector<int>(); m1 = new vector<int>();

m2 = new vector<string>(); m2 = new vector<string>();

} }

~A() { void clear() {

delete m1; delete m1;

delete m2; delete m2;

} }

// andra metoder // andra metoder

}; };

(a) Vad är fördelarna med klass A jämfört med klass B? 2p (b) Vilka andra metoder bör man lägga till i klass A? 3p (c) Varför ska man lägga till dessa metoder? Visa med exempel på hur

det kan bli dåligt. 3p

(d) Skriv metoderna man bör lägga till. 4p

2. Vad är det för fel på följande rader? 3p

int a [] = {1, 2, 3, 4};

int * b = new int[4];

string c = "1234567";

delete a;

delete b;

delete c;

1

(2)

3. Sätt rätt värden på strängarna r1 - r7 så att Nils Ferlins dikt skrivs ut. 7p Du har tappat ditt ord och din papperslapp,

du barfotabarn i livet.

Så sitter du åter på handlarns trapp och gråter så övergivet.

Vad var det för ord - var det långt eller kort, var det väl eller illa skrivet?

Tänk efter nu - förrn vi föser dej bort, du barfotabarn i livet.

#include <iostream>

#include <string>

using namespace std;

string r1, r2, r3, r4, r5, r6, r7;

class Writer { public:

Writer(string name);

virtual void think();

virtual void speak();

string name_;

};

class Poet : public Writer { public:

Poet(string name);

virtual void think();

virtual void speak();

string name_;

};

void think_about_it(Writer & w) { w.speak();

}

Writer::Writer(string name) : name_(name) { cout << name_ << endl;

}

void Writer::think() { cout << r4 << endl;

think_about_it( * this);

}

void Writer::speak() {

cout << r5 << endl << name_ << endl;

}

Poet::Poet(string name) : Writer(r6), name_(name) { cout << r7 << endl;

}

2

(3)

void Poet::think() {

think_about_it( * this);

}

void Poet::speak() { cout << name_ << endl;

}

int main() { // r1 = "...";

// r2 = "...";

// ...

cout << r1 << endl;

Writer * Nils = new Writer(r2);

Writer * Ferlin = new Poet(r3);

cout << endl;

Ferlin -> think();

Nils -> think();

}

4. Använd boken för att besvara följande frågor.

(a) Vad gör funktionen nedan? 1p

template <class Container>

void foo(Container & vec) { back_inserter ( vec ) = 11;

back_insert_iterator<Container > backiter ( vec );

*backiter = 22;

}

(b) Det finns ytterliggare två liknande insert-iteratorer. Vilka? Skriv två nya funktioner likadana som den ovan fast med de två andra insert- iteratorerna. Rita hur en deque kan se ut före och efter anropet. 2p (c) En av insert-iteratorerna kan man inte använda med vector, varför?

1p (d) Visa hur man med en sats kan kopiera alla unika element från en

vektor till en annan vektor. 1p

(e) Beskriv i detalj vad du tror händer i tilldelningssatserna i foo. 2p

3

(4)

5. En vanlig typ av felstavning är omkastade tecken t.ex.

häst - hsät, kanske - knaske.

(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 returneras -1. Om ena strängen är längre än den andra behöver man inte söka i den överflödiga delen. Var noga med att

funktionen inte kraschar. 3p

(b) Skriv en typparametriserad funktion som fungerar som a). Funktio- nen tar två intervall som argument och letar efter omkastade element i ena intervallet jämfört med det andra. 3p (c) Typparametriserade funktioner kan man specialicera. Vad innebär

det? 2p

(d) Kan man använda b) för att lösa a) eller måste man använda speci-

alicering? 2p

4

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

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

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