• No results found

Grova fel ger underkänt (betyg U)

N/A
N/A
Protected

Academic year: 2021

Share "Grova fel ger underkänt (betyg U)"

Copied!
3
0
0

Loading.... (view fulltext now)

Full text

(1)

Tentamen i DD2387 Programsystemkonstruktion med C++

Datum: Tisdag 15 januari 2008, 14-18

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

Tid: 4 timmar

Alla rätt ger 6 bonuspoäng. Grova fel ger underkänt (betyg U). Om inte alltför många grova fel görs ges möjlighet att komplettera till godkännt betyg(betyg U*

eller FX) mer information om komplettering kommer att stå på kurshemsidan.

Gör ett försök på alla fem uppgifter. Tentaresultat anslås inte enligt längre på anslagstavla i enlighet med ny policy från KTH centralt. Lycka till!

1. Polisens interna metoder

I denna uppgift ska du vara mycket noga med const, public, private och protected. Den kod du skriver ska kompilera och uppfylla dessa kriterier.

• Klassen Polis har ingen kopieringskonstruktor.

• Klassen Polis har inga relationer till andra klasser.

• Klassen Polis har utöver metoden internt fem medlemsfunktioner

• men enbart ett heltal som medlemsvariabel.

• Metoden internt returnerar alltid true.

// indata polis, utdata true

bool Polis::internt(const Polis & polis) { Polis p;

p[ this->think(polis) ] = polis.maybe(this->appeal(polis));

return *this + p;

}

(a) Deklarera och implementera klassen Polis och dess metoder (skriv implementationen direkt i headerfilen). Du behöver enbart deklarera metoden internt.

(b) Vilka av metoderna kan deklareras protected?

(c) Vilka av metoderna kan deklareras private?

(d) Du behöver inte deklarera/implementera någon konstruktor, varför?

1

(2)

2. Virtuellt struct A {

A() : a(*this) {}

virtual void foo() { std::cout << "1 "; } A & a;

};

struct B : public A {

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

struct C : public B {

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

struct D : public B {

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

struct E : public C {

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

struct F : public D {

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

int main() { C c;

D d;

E e;

F f;

B & b1 = e; // referens B b2 = f;

A & a1 = b1; // referens A & a2 = b2; // referens a1.foo();

a2.foo();

std::cout << std::endl;

a1.a.foo();

a2.a.foo();

std::cout << std::endl;

c.a.foo();

d.a.foo();

}

(a) Vad skriver programmet ut när man kör det?

(b) Finns det några polymorfa anrop i koden och i så fall var?

2

(3)

3. Binärt

Ett binärt sökträd är en datastruktur som används i grundläggande algo- ritmkurser. Binärträdet innehåller två pekare left och right samt sökbart data. Binärträdet har tre metoder; insert som stoppar in data sorterat i trädet, exists som returnerar sant om datat finns i trädet och false annars, samt is_empty som returnerar true/false om trädet är tomt eller inte.

(a) Deklarera ett typparametriserad binärträd med ovannämnda meto- der och medlemmar.

(b) Implementera insert rekursivt m.hj.a en hjälpfunktion som tar data som ska sorteras in samt en referens till en pekare. Den rekursiva algoritmen är ungefär, om noden är tom skapa en ny nod med datat annars om datat är större än nodens data stoppa in i högerträdet annars stoppa in i vänsterträdet.

(c) Vad kräver din funktion av det typparametriserade datat? Vad hän- der om kravet inte är uppfyllt?

4. Kasta loss

(a) I C++ kan man typkonvertera på fler sätt än i C. Varför?

(b) Utred huruvida typkonvertering sker i compile-time eller inte.

(c) Berätta om dynamic_cast. Vad använder man det till? Vad är in- och utdata?

(d) Vad finns det för andra sätt att typkonvertera i C++?

5. Arv

Arv är en central del av C++ det finns inte i C.

(a) Vad har man arv till?

(b) Hur kan man avgöra om en pekare pekar på en subklass? Visa med en if-sats.

(c) Kan man emulera arv i C m.hj.a preprocessordirektiv?

3

References

Related documents

The studies on spontaneous thought are akin to Knieps and colleagues’ research on EFT (Knieps, 2013), in assuming that truth tellers will be more likely to experience

Om pedagoger i förskolan inte får en utbildning som innehåller utomhuspedagogik kan mycket kunskap och engagemang försvinna när denne kommer ut för att arbeta. Vi har i vår

This model proposes that true inten- tions have a higher likelihood than false intentions, which means they should be represented at a more concrete construal level.. This should

In brief, the model proposes that false intentions should be more abstractly represented than true intentions since they concern unlikely rather than likely future tasks..

With respect to the content of the descriptions of the mental images no clear differences were found although truth tellers experienced their mental images more vividly

The Activation-Montoring as a theory for false memory reduction gains support from visual experiments on DRM and also suggests that the fact that the participants were more

Trädet har också fått uppleva hur omgiv- ningen förändrats från ett fårbetat kargt landskap till en igenvuxen snårig enbuskskog, när fåren togs bort från ön

Faris benämner drömmar i magisk realism som ett verktyg för att vilseleda läsaren: ”Magical realist scenes may seem dreamlike, but they are not dreams, and the text may both