DD2387 Programsystemkonstruktion med C++ Tentamen 2

Relevanta dokument
DD2387 Programsystemkonstruktion med C++ Tentamen 1 Tisdagen den 28 oktober 2014, 08:00-12:00

DD2387 Programsystemkonstruktion med C++ Tentamen 1 Tisdagen den 28 oktober 2014, 08:00-12:00

DD2387 Programsystemkonstruktion med C++ Tentamen 3 Onsdagen 7 januari, 14:00-18:00

DD2387 Programsystemkonstruktion med C++ Tentamen 1 Torsdag 7 januari 2016, 14:00-18:00

Tentamen i DD2387 Programsystemkonstruktion med C++

Tentamen i DD2387 Programsystemkonstruktion med C++

Tentamen EDAF30 Programmering i C++

TDIU01 Programmering i C++

TDDC76 - Programmering och Datastrukturer

Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser

TDIU01 - Programmering i C++, grundkurs

Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap

TENTAMEN CD5250. Objektorienterad programutveckling med C++, 5p. Datum: , Tid: 14:00-19:00

TDIU01 - Programmering i C++, grundkurs

Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT / 42

Tentamen i DD2387 Programsystemkonstruktion med C++

Tentamen EDAF30 Programmering i C++

Tentamen EDAF30 Programmering i C++

TDIU01 - Programmering i C++, grundkurs

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Övningar Dag 2 En första klass

Tillämpad programmering

Funktionens deklaration

Innehåll. Pekare Exempel

C++ Objektorientering - Klasser. Eric Elfving

TDDC76 - Programmering och Datastrukturer

Tentamen i Objektorienterad Programmering 5p, Au, D, Fri, Pr,

5 Arv och dynamisk bindning FIGUR

Innehåll. Pekare Exempel

Innehåll. Användardefinierade typer. Användardefinierade typer Kategorier. Konstruktorer. Konstruktorer Två sätt att skriva initiering av medlemmar

TDIU01 (725G67) - Programmering i C++, grundkurs

LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I

Introduktion till arv

Programsystemkonstruktion med C++: Övning 2. Karl Palmskog september 2010

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

C++ Objektorientering - Klasser. Eric Elfving Institutionen för datavetenskap

TDDC76 - Programmering och Datastrukturer

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {

Del3 Klassanvändning, operatorer och pekare Ämnesområden denna föreläsning:

TDP004. Minne och pekare. Eric Elfving Institutionen för datavetenskap

Programsystemkonstruktion med C++: Övning 1. Karl Palmskog september 2010

Tentamen i TDP004 Objektorienterad Programmering Teoretisk del

Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT / 26

Tommy Färnqvist, IDA, Linköpings universitet

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

Innehåll. Pekaren this Självreferens. Klasser Resurshantering, representation. Överlagring av operatorer. Överlagring av operatorer

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

2D1387, Programsystemkonstruktion med C++ 01/02 1

TDDC76 Programmering och datastrukturer

Innehåll. Konstruktorer vid arv Regler för basklassens konstruktor. Konstruktorer vid arv. Konstruktorer vid arv. Konstruktorer vid arv

Användning av typeid. Operatorerna typeid och. Filen typeinfo.h måste inkluderas. typeid

Generell (template) programmering. Effektiv C++ Slutliga tips Genomgång av gammal tenta. Daniel Aarno Allt som fungerar som x ÄR x

Tentamen Objektorienterad Programutveckling med C++

ÖREBRO UNIVERSITET. Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 13.

Tentamen EDAF30 Programmering i C++

C++ - En introduktion

Övriga byggstenar. Övriga byggstenar. Några tips under programutveckling. Beroenden Pekare till funktioner Typkonvertering

Högskolan Dalarna sid 1 av 5 Data-sektionen Hans-Edy Mårtensson

Att använda pekare i. C-kod

Dynamisk bindning och polymorfism

TDDD78 Objektorientering: Lagring och livstid

TDDC76 - Programmering och Datastrukturer

TDDC76 - Programmering och Datastrukturer

DAT043 Objektorienterad Programmering

Innehåll. Parametriserade typer. Klassmallar. Klassmallen Vektor Konstructor med std::initializer_list. Klassmallen Vektor Medlemsfunktioner

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Tentamen C++-programmering

Föreläsning 3-4 Innehåll

Tentamen i Grundläggande Programvaruutveckling, TDA548

TDIU20 - Objektorienterad programmering i c++ - föreläsning 4

Föreläsning 5: Introduktion av pekare

Objektsamlingar i Java

Innehåll. 1 Funktionsmalllar. 2 Klassmallar. struct Name { string s; //... }; const Name & minimum ( const Name & a, const Name & b) { if(a.s < b.

Innehåll. 1 volatile. 2 Kuriositeter. 3 Klasser och arv. 4 Råd och tumregler. 5 Mer om standard-containers. Trigraphs

Programmering i C++ EDA623 Mallar. EDA623 (Föreläsning 12) HT / 29

Övning 4. Arv och andra relationer

Lösningsförslag till tentamen TDP004 Objektorienterad Programmering Teoretisk del

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Tentamen OOP

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Tentamen TEN1 HI

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

HI1024 Programmering, grundkurs TEN

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga.

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Algoritmbiblioteket (STL) Designstrategi Generiska algoritmer som fungerar på godtyckliga samlingsdatatyper, vilka har iteratorer.

Programsystemkonstruktion med C++

TDDI14 Objektorienterad programmering

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

FÖRSLAG TILL LÖSNING AV Tentamen i Objektorienterad programmering C++ I

2 b) Följande finns definierat: public class Käk String titel = "Chili con carne"; Krydda[] kryddor = new Krydda[10]; kryddor[0] = new Krydda("Svartpe

TDIU01 - Datortenta (DAT2)

Inlämningsuppgift, EDAF30, 2018

Innehåll. Typomvandlingar (casting) Implicita Typomvandlingar. Typomvandlingar (casting) Implicita Typomvandlingar

Operatoröverlagring. endast operatorsymboler definierade i C++ kan överlagras = += -= *= /= %= ^= &= = <<= >>= < > <= >= ==!= && > ->*, [ ] ( )

Vad är en klass? Övning 2. Konstruktorer. ffl copy-konstruktorn tar en instans av klassen som. ffl default-konstruktorn tar inga argument och kan

1 Klasser och objektorientering Vad är objektorientering?

Transkript:

DD2387 Programsystemkonstruktion med C++ Tentamen 2 Måndagen den 10 november 2014, 08:00-12:00 Introduktion Skriv dina svar på separata papper, dessa scannas in efter inlämning. Du kan skriva på båda sidor. Skriv namn och uppgiftsnummer på varje sida Grova fel ger underkänt, men gör ett försök på alla uppgifter Det är ingen självrättning efter tentan Hjälpmedel En, eller två, valfria läroböcker om C++. 1 Var annan fråga förekommer om vartannat Det diskuteras budgetfrågor i dessa dagar. Om ladorna är tomma eller inte och vilkas hjärtefrågor som måste med eller inte. Två politiska partier som bildat koalition vill få med sina hjärtefrågor i budgeten. De kommer överens om att varva sina hjärtefrågor i budgetpropositionen. Frågor a) Skriv en generisk funktion som givet en mängd politiska förslag (definierat av två iteratorer till en godtycklig förslagstyp) returnerar true om intervallet endast består av två olika typer av förslag samt att de kommer i varannan ordning, annars ska funktionen returnera false. A B A B A => true A B A B A B => true A B A B A C => false B A B A B => true A => false Gör inget off-by-one fel, och säkerställ att programmet inte kraschar om man skickar in en för liten (t.ex. tom) mängd. b) Vad ställer din kod för krav på iteratorerna (parametrarna)? 1

2 Den dynamiska budgeten Det kan vara bra att lägga fram ett dynamiskt budgetförslag om det parlamentsmajoriteten skulle kastas om inför omröstning. Förklara kortfattat vad dynamic_cast används till i C++. (Tips: se bok type conversion) 3 Hur budgeten lagras Budgeten är som en containerklass med diverse instoppade element. Man skulle kunna skapa sig en egen container-klass istället för att använda standardklasserna. a) Om vi väljer att implementera en container lik std::vector är det viktigt att inte alltid förlita sig på de automatiskt genererade medlems-funktionerna som kompilatorn skapar åt oss; varför? b) Vilka automatiskt genererade medlemsfunktioner brukar ingå i det som tidigare (C++98) kallades för "Rule Of Three"? 2

4 En oomkullrungelig const budget Praxis var att budgeten måste antas i sin helhet och man kunde inte bryta ut delar ur den. Den var så att säga read-only eller const-deklarerad. Förra året ändrades praxis med oklar laglig grund som i skrivande stund utreds av högsta förvaltningsdomstolen. Konstigt nog ska budgeten röstas igenom innan man vet vad som gäller. Att ha koll på const är viktigt i C++. struct Budgetitem { Budgetitem(string s) { //... ; class Proposition { std::vector<budgetitem> budget; public: bool vote() const { //... ; bool new_kind_of_vote(std::vector<budgetitem>::iterator unwanted_item) const { budget.erase(unwanted_item); void add(const Budgetitem & b) { b = Budgetitem("something we approve"); void add_copy(budgetitem b) { b = Budgetitem("something we approve"); //... constructors, methods etc // change b // change b a) Koden ovan genererar ett par kompileringsfel. Vad är det som är fel? b) Hur skulle man kunna ändra i klassen Proposition (utan att ta bort const) så att koden kompilerar? c) Kompilerar följande kod? int main() { Proposition p; Budgetitem b("endast förluster i välfärden"); const Budgetitem & important_item = b; p.add_copy(b); d) Varför bör man sträva efter att använda const där så är möjligt i C++? 3

5 Den amerikanska budgeten Den amerikanska budgeten ska klubbas igenom den närmsta tiden. Förra året var en riktigt rysare om budgetstupet skulle träda i kraft eller inte. I den virtuella verkligheten som kongressen lever i är det inte lätt att veta vartåt det pekar. Det är viktigt att ha koll på virtual och pekare i C++ #include <iostream> using namespace std; struct Bill { //... ; struct FundRaiser { FundRaiser() : soul (this) { ; virtual void vote(const Bill & b) { cout << "Money please" << endl; struct FundRaiser * soul; struct Politician : FundRaiser { virtual void vote(const Bill & b) { cout << "Possibly" << endl; ; struct Republican : Politician { virtual void vote(const Bill & b) { cout << "No" << endl; ; void persuade(politician p, Bill & b) { p.vote(b); p.soul -> vote(b); // OBS copy 4

int main() { Bill obamacare; Republican r; FundRaiser f = r; FundRaiser * fp = &r; r.vote(obamacare); f.vote(obamacare); cout << "----------" << endl; // rita rak linje f.soul -> vote(obamacare); fp -> vote(obamacare); cout << "----------" << endl; persuade(r, obamacare); cout << "----------" << endl; // rita rak linje // OBS två utskrifter // rita rak linje Politician * pp = dynamic_cast<politician *> (fp); persuade(* pp, obamacare); // OBS två utskrifter Frågor a) Vad skriver ovanstående program ut (11 rader varav tre raka linjer)? b) Hur många pekare skapas i programmet (pekare i eventuell virtuell tabell samt this-pekare räknas inte) c) Rita en minnesbild över hur variablerna r, f och parametern p ser ut under programmets gång. Rita och namnge även de pekare som förekommer. 5

6 Läckor till media Under budgetarbetet får man ibland läsa vad som kommer eller inte kommer att ingå däri. Det tycks vara en strategi att läcka lämpliga delar till media och det kanske är bra för dem som har svårt att minnas vad budgeten ska innehålla. Hur minnesläckor fungerar i C++ är viktigt att känna till. Skriv en funktion leak som läcker minne varje gång den anropas. Funktionen behöver inte göra något vettigt och kan ta valfritt antal parametrar och returnera valfri parameter. 7 Budgetens funktion Vad budgeten fyller för för funktion objektivt sätt och i vilket tillstånd den är i är viktigt. Det är också viktigt att känna till funktionsobjekt (function object) i C++. Skriv kod för ett funktionsobjekt som ändrar på minst en medlemsvariabel. 6