• 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: 30 augusti 2001

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

Tid: 5 timmar

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 och för betyg fem krävs 40 poäng. Alla betygs- gränser är inklusive bonuspoäng. Maxpoäng är 45 utan bonus. Maximalt antal bonuspoäng är nio.

1. Betrakta följande program:

struct A {

A() { std::cout << "A()" << std::endl; }

~A() { std::cout << "~A" << std::endl; } A(const A &) { std::cout << "A(A)" << std::endl; } const A &operator=(const A &)

{ std::cout << "A=A" << std::endl; } };

void foo(A a) { A b; b = a; } A bar(const A &a) { A b(a); return b; }

Vad skriver programmet ut när man kör nedanstående rader? Ge en utskrift per rad och en ordentlig motivering för varje utskrift.

a) foo(a); 5p

b) { A c = bar(a); } 5p

2. Skriv två mallfunktioner (template functions) my_new och my_delete som ef- terliknar beteendet hos de inbyggda operatorerna new[] och delete[]. Använd malloc och free för minnehantering. Tänk på att new T[0] är giltigt medan negativa storlekar inte är giltiga. Vad händer när minnesallokering misslyckas?

Exempelprogram:

class A;

A *p = my_new<A>(20);

p[7] = A(100);

p[5] = p[7];

/* ... */

my_delete(p, 20);

Tips: Använd placement new (new-operatorn som tar en adress) för att konstru- era objekten. Exempel: extern void *ptr; new (ptr) T; 12p

1

(2)

3. Följande program innehåller fyra fel och kan därför inte kompileras. Vilka är

felen? Motivera. 10p

struct A {

A(const char *) { } explicit A(double) { } };

extern void foo(const A &);

extern void bar(A &);

A a = "xyz"; A b = 3.14;

A c("xyz"); A d(3.14);

foo("xyz"); bar("xyz");

foo(3.14); foo(a);

bar(a); foo(A());

foo(A(3.14)); foo(A(A(A("xyz"))));

4. Genom att förändra åtkomsten på konstruktor/destruktor etc. kan man få användbara effekter, t.ex. förhindras arv om alla konstruktorer är private.

a) Man kan förhindra instansiering av en basklass genom att deklarera en strikt virtuell (pure virtual ) medlemsfunktion. Liknande beteende får man genom att göra alla konstruktorer protected. Man kan dock få oönskade effekter om man använder protected-metoden. Beskriv hur och när den

oönskade effekten uppkommer. 4p

b) Vilka effekter uppnås genom att göra konstruktor, destruktor, kopierings- konstruktor, tilldelningsoperator samt operatorerna new och delete till protected resp. private? Ge minst tre bra exempel (borträknat de två

ovan givna) med användningsområde. 9p

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

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

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