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

Loading.... (view fulltext now)

Full text

(1)

Tentamen i 2D1387 Programsystemkonstruktion med C++

Datum: Lördag 23 oktober 2004, 8-13

Hjälpmedel: En eller två valfria läroböcker om 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. Det kan ibland var svårt att förstå vad dagens företagsledare vill ha sagt.

Vad är det som sägs(skrivs ut) i följande program:

class Leader { public:

virtual void speak() { cout << "Nu måste vi fokusera på kärnverksamheten" << endl; };

};

class President : public Leader { public:

virtual void speak() { cout << "Sammanslagningen ger synergieffekter" << endl; };

};

class VicePresident : public President { public:

virtual void speak() { cout << "Det står på agendan" << endl; };

};

void make_a_statement_cop(Leader f) {f.speak();};

void make_a_statement_ref(Leader & f) {f.speak();};

int main() {

Leader * p_leader = new VicePresident();

President * p_president = new President();

VicePresident * p_vice_president = new VicePresident();

p_president -> speak();

p_leader -> speak();

make_a_statement_cop(* p_president );

make_a_statement_cop(* p_vice_president);

make_a_statement_ref(* p_president );

}

10p

1

(2)

2. Vid tillsättningen av direktörer brukar man anlita en headhunter som kan gallra ut ett antal kandidater bland de sökande. Antag att de sökandes kompe- tens representeras av någon slags siffra. Skriv en generell funktion som givet ett intervall i en generell siffervektor (man vet inte om det är heltal eller flyttal) och en kompetensnivå (en int), returnerar antal förekomster av tal större eller lika med kompetensnivån. Exempel på användning:

int v [] = {1, 2, 5, 12, 14, 23, 5};

int antal = gallra(v, v + 7, 10);

Det ovan angivna förfarandet kan uppfattas som alltför grovt. Man måste kun- na ta med andra aspekter som social kompetens. Skriv därför en ny generell funktion som givet ett intervall i någon slags vektor samt någon slags kompe- tensklass räknar förekomsten av vektorelement som uppfyller jämförelsekriteriet.

Deklarera den jämförelsemetod som krävs för att metoden ska fungera.

7p

3. Ett pensionsförsäkringsbolag har problem med sina rutiner. Ibland försvinner gamla kunder oförklarligt. Man misstänker sitt nya datasystem.

class Datasystem { private:

Customer * customers;

unsigned long nr_of_customers;

unsigned long customer_capacity;

public:

void add_customer(Customer a) { nr_of_customers++;

if (nr_of_customers >= customer_capacity) {

customers = new Customer [customer_capacity * 2];

}

customers[nr_of_customers] = a;

} // ...

a) Förklara kortfattat (högst ett par meningar) vad som är galet med add_customer.

b) En trögfattad kodansvarig förstår inte din förklaring. Illustrera med teck- ningar och förklara steg för steg vad som är galet med add_customer.

c) Skriv en förbättrad version av add_customer. Ta inte hand om fallet att minnesallokering kan misslyckas.

d) Om man nu skulle vilja fånga minnesallokeringsproblem och rapportera problemet hur skulle man bära sig åt då? Motivera ditt förslag.

e) Klassen Datasystem hanterar dynamiskt minne. Du bestämmer dig för att kodkontrollera resten av klassen. Vilka metoder bör du leta efter? Hur bör koden i dessa metoder se ut?

15p

2

(3)

4. När man ska välja styrelsemedlemmar dyker samma namn upp ständigt och jämt. För att spara pengar funderar man på att konstruera en ny strängklass med referensräkning och copy-on-write.

a) Förklara hur det skulle gå till och vad man kan tjäna på det.

b) Givet ett par instanser s1 och s2 av din strängklass. Beskriv de metoder som skulle behövas för att implementera raderna nedan.

s2 = s1; // OBS! s2 might have been initialized.

char c = s2[5];

s2[5] = ’L’;

c) Vad är det för skillnad på raderna nedan?

const char * p1 = &s1[5];

char * p2 = &s1[5];

d) I det ena fallet skulle man kunna få problem med våran referensräknar- klass. Vad för problem?

f ) Föreslå ett sätt att komma runt problemet.

e) Varför behöver det inte bli problem i andra fallet?

13p

3

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