• 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:22 oktober 2002

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. Max poäng är 45.

1. Betrakta följande program:

struct A {

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

void print() { vfnc(); }

virtual void vprint() { fnc(); } };

struct B : public A {

virtual void vfnc() { std::cout << "B"; } virtual void vprint() { B::fnc(); }

};

A a;

B b;

A &ar = b;

a.print();

a.vprint();

ar.print();

ar.vprint();

Vad skriver programmet ut när man kör det? Motivera ditt svar. 10p 2. Mallfunktionen accumulate adderar elementen i en behållare med operator+=.

Första argumentet anger startvärde för summeringen. Exempel:

std::vector<int> v;

v.push_back(1);

v.push_back(2);

v.push_back(4);

int a = accumulate(10, v.begin(), v.end()); // a = 17

a) Implementera accumulate. 8p

b) Varför kompilerar inte nedanstående anrop? Hur ordnar du detta på enklast

möjliga sätt? 4p

// "barbazfoo"

const char *b[] = { "bar", "baz", "foo" };

accumulate("", b + 0, b + 3);

1

(2)

3. Antag att du ska skriva en klass BigNum för godtyckligt stora heltal.

a) Ge deklarationer för följande fyra medlemsfunktioner: operator++ (pre- fix), operator++ (postfix), operator+ och operator+= (som båda lägger

till en BigNum). 4p

b) Betrakta följande typer: BigNum, BigNum &, const BigNum, const BigNum

&. När använder man dem som returtyp (ge kommentar för var och en)?

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 en operator till en global funktion istället för medlemsfunktion? Är det någon av operatorerna i a som inte

går att göra global? 3p

4. Vissa funktioner ges implicit av kompilatorn när du inte implementerat dem själv.

a) Hur fungerar de implicit givna funktionerna defaultkonstruktor, kopie- ringskonstruktor, tilldelningsoperator och destruktor? 5p b) Ungefär hur ser kompilatorns implementation ut för de fyra funktionerna givet klassen nedan? Kan kompilatorn verkligen skapa kod för alla fyra

funktionerna och om inte, varför? 5p

class A {

std::string s;

public:

char * const p;

int &r;

static const int size = 1024;

char a[1024];

int i;

};

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

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