TDDI14 Objektorienterad programmering

Relevanta dokument
Lektionsuppgifter. TDDI14 Objektorienterad programmering. Lektionsplanering Lektion Lektion Lektion

TDDI TDDI22 Tentaregler

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

TDDI22 (exempel) TDDI22 Tentaregler

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

TDIU20 (exempel) TDIU20 Tentaregler

TDIU01 - Programmering i C++, grundkurs

Tentamen, EDAA10 Programmering i Java

Tentamen EDAF30 Programmering i C++

Tentamen EDAF30 Programmering i C++

TDIU TDIU20 Tentaregler

Tentamen i Introduktion till programmering

TDIU01 Programmering i C++

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

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

TDDI TDDI22 Tentaregler

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

Skapa, kopiera och destruera klassobjekt

Introduktion till arv

TDDC76 - Programmering och Datastrukturer

TDDI TDDI22 Tentaregler

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

Tentamen *:85/2I4123 C

Övningsuppgifter. TDIU04 Programmering i C++, standardbibliotek. Innehåll. Vt Lektion Lektion Lektion Lektion 4...

Övning 4. Arv och andra relationer

TDDI TDDI22 Tentaregler

Försättsblad till skriftlig tentamen vid Linköpings Universitet

TDDC76 - Programmering och Datastrukturer

Tentamen EDAF30 Programmering i C++

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

TDIU01 - Programmering i C++, grundkurs

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

HI1024 Programmering, grundkurs TEN

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Tommy Färnqvist, IDA, Linköpings universitet

TUTORIAL: KLASSER & OBJEKT

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

Objektorienterad programmering i Java

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

TDIU01 - Programmering i C++, grundkurs

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

Tentamen i TDP004 Objektorienterad Programmering Teoretisk del

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Obs! Inget ur Javas standardbibliotek får användas i ett svar (om det inte står att man får det).

Malmö högskola 2007/2008 Teknik och samhälle

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

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2

Tentamen, EDAA20/EDA501 Programmering

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

TDIU01 / 725G

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

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Tentamen i. Programmering i språket C

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

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

PROGRAMMERINGSTEKNIK TIN212

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

Tentamen i. för D1 m fl, även distanskursen. lördag 26 februari 2011

Övningsuppgifter kapitel 8

Objektorienterad programmering Föreläsning 5

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

Objektorienterad programmering Föreläsning 12. Copyright Mahmud Al Hakim

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

Objektorienterad programmering i Java I

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

HI1024 Programmering, grundkurs TEN

Agenda. Objektorienterad programmering Föreläsning 13

Objektorienterad Programmering (TDDC77)

Försättsblad till skriftlig tentamen vid Linköpings Universitet

TDDC76 Programmering och datastrukturer

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

Statistik över heltal

TENTAMEN I. OBJEKTORIENTERAD PROGRAMMERING för Z1. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Klasser. Kapitel 2. Kapitel 2 - Klasser, medlemmar och arv. Klasser. Klasser Medlemmar Arv

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt:

SP:PROG3 HT12 Tenta

Dynamisk bindning och polymorfism

Minnestilldelning (allokering) och frigörande (avallokering) av minne

LÖSNINGSFÖRSLAG TENTAMEN

TDIU01 - Programmering i C++, grundkurs

TENTAMEN OOP

DAT043 Objektorienterad Programmering

C++ - En introduktion

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Algoritmer & Datastrukturer i Java

5 Arv och dynamisk bindning FIGUR

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

Tentamen, EDAA20/EDA501 Programmering

Malmö högskola 2008/2009 CTS

Tentamen ID1004 Objektorienterad programmering October 29, 2013

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2

kl Tentaupplägg

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

Transkript:

LINKÖPINGS TEKNISKA HÖGSKOLA Institutionen för datavetenskap Avdelningen för programvara och system Tommy Olsson 2015-05-27 Datortentamen i TDDI14 Objektorienterad programmering Provkod DAT1 Datum 2015-06-01 Klockan 14 19 Jour Tommy Olsson, 28 1954. Jourhavande besöker salarna varje hel timma under skrivtiden. För övrigt ska jourhavande tillkallas endas vid datorsystemproblem. Administratör Anna Grabska Eklund, 28 2362 Hjälpmedel En bok om C++. Det får finnas egna anteckningar i marginalen men ej på helt tomma sidor, ej på lösa eller fastsatta extra blad eller lappar. En svensk-* ordbok får medtagas. Inga andra hjälpmedel, på papper eller elektroniska, förutom kladdpapper och penna, är tillåtna. Betygssättning Totalt kan 18 poäng erhållas (8+6+4). För betyg 3 krävs 8 poäng, för betyg 4 krävs 11 poäng och för betyg 5 krävs 14 poäng. Anvisningar Se anvisningar på separat papper för inloggning till datortentamenssystemet och arbetet i tentakontot. Läs igenom hela uppgiften innan du börjar lösa en uppgift. Skriv ditt namn och personnummer i en kommentar överst i varje fil. Använd exakt de filnamn och andra namn som anges, även med avseende på stora och små bokstäver. Lösningar ska skicka in via Studentklienten, se separat anvisning. Lycka till!

TDDI14 Objektorienterad programmering 2 (5) 1. Kopiera filen uppgift1.cc från filkatalogen given_files. Filen innehåller anvisningar för hur objekt ska hanteras och testas av programmet. Konstruera en polymorf klasshierarki för att representera GPS-navigatorer. Alla klasser ska ha GPS som gemensam abstrakt basklass. GPS ska ha två direkta subklasser, Road och Outdoor. Outdoor ska i sin tur ha en direkt subklass Tracking. Navigatorer av typ Road används i fordon, Outdoor av personer som rör sig till fots och Tracking för att exempelvis spåra en hund. Alla GPS-klasser ska lagra model, t.ex. nüvi 3790T, och skärmstorlek, t.ex. 3.7x2.2, båda typ std::string. Då ett GPS-objekt skapas ska model och skärmstorlek alltid anges och sedan ej ändras. GPS ska ha funktionerna get_model() och get_screen_size() som returnerar respektive värde. Ett Road-objekt ska även lagra om modellen kan ta emot FM-trafikmeddelanden. Informationen, ja eller nej, lagras som bool och initieras då ett Road-objekt skapas, för att sedan ej ändras. Om inget initialvärde anges ska default vara nej (false). Road ska ha funktionen fm_messages(), som returnerar om modellen kan ta emot meddelanden (true) eller ej (false). Ett Outdoor-objekt ska även lagra om modellen är utrustad med en höjdmätare. Informationen, ja eller nej, lagras som bool och initieras då ett Outdoor-objekt skapas för att sedan ej ändras. Om inget initialvärde anges ska default vara nej (false). Outdoor ska funktionen altimeter() som returnerar om modelen är utrustad med höjdmätare (true) eller ej (false). Tracking har inga egenskaper utöver vad Outdoor har men vi vill hantera sådana objekt separat typmässigt, därav klassen Tracking. Alla navigatorklasser ska ha en medlemsfunktion type() som returnerar en sträng som anger vilken typ av navigator objektet ifråga representerar, Väg för Road-objekt, Utomhus för Outdoor-objekt och Spårning för Tracking-objekt. Objekt förutsätts alltid skapas dynamiskt (new) och hanteras via pekare. Tilldelning ska inte vara tillåtet. Det enda sättet att publikt kopiera objekt ska vara med en polymorf kopieringsfunktion clone(), vilken ska använda kopieringskonstruktorn för att skapa kopian. För speciella medlemsfunktioner gäller, för varje klass, att sådana som ska finnas och kan genereras av kompilatorn ska defaultas, sådana som inte ska finnas men kan genereras av kompilator ska deletas, sådana som inte ska finnas och inte genereras av kompilatorn ska inte deklareras. Inga andra funktioner utöver de som anges ovan får införas. Exempel på utskrift från programmet (se den givna koden för mer information): Modell...: nüvi 3790T Typ...: Väg Skärmstorlek..: 3.7x2.2 FM-meddelanden: Ja Höjdmätare...: Nej Modell...: etrex Summit HC Typ...: Utomhus Skärmstorlek..: 1.3x1.7 FM-meddelanden: Nej Höjdmätare...: Ja Modell...: Astro Typ...: Spårning Skärmstorlek..: 1.5x2.2 FM-meddelanden: Nej Höjdmätare...: Nej Följ specifikationen noga följ anvisningarna i den givna filen noga utnyttja C++ väl!

TDDI14 Objektorienterad programmering 3 (5) 2. Kopiera filen uppgift2.cc till din arbetskatalog. Filen innehåller ett testprogram. Standardcontainern vector är en sekvenscontainer. Du kan stega igenom elementen i en vector, från det första till det sista, med hjälp av antingen indexering, operator[], eller med en vectoriterator, eller med intervallstyrd for-sats. För att kunna stega igenom elementen i en vector cykliskt från det sista elementet ska du alltså stega till det första ska du konstruera en komponent med namn Cycler Konstruera en klassmall Cycler, som ska kunna användas på följande sätt: vector<int> v; // v fylls på med värden Cycler<int> cycler{ v }; // vector v som vi vill stega runt i // ett Cycler-objekt cycler binds till vectorn v for (int i = 0; i < 2 * cycler.size(); ++i) // vi tar två varv i vectorn v cout << cycler.next() << \n ; Cycler ska ha en malltypparameter som ange den typ av element som vectorn ifråga ska innehålla, int i exemplet ovan. Då ett Cycler-objekt skapas ska det bindas till ett vector-objekt, som v i exemplet ovan. Cycler<int> cycler{ v }; Det ska inte skapas en kopia av v i cycler. Då exempelvis medlemsfunktionen next(), se nedan, används ska det innebära att operationen utförs på ett element i v. Det finns två alternativ för att åstadkomma detta med pekare eller med referens. Om vectorn är tom ska konstruktorn för Cycler kasta ett undantag cycler_error, som du ska härleda från någon lämplig standardundantagsklass. Cycler ska ha en medlemsfunktion size() som returnerar storleken på vectorn. cycler.size() // returnerar storleken för v Cycler-objektet ska hålla reda på det aktuella elementet i vectorn. Initalt ska det aktuella elementet vara det första elementet i vectorn. Cycler ska ha en medlemsfunktion reset() som återställer det aktuella elementet till det första elementet i vectorn. cycler.reset() // aktuellt element kommer att vara det första i v Cycler ska ha en medlemsfunktion next() som ska ge åtkomst till det aktuella elementet i vectorn, så att elementets värde kan användas eller ändras. next() ska även flytta fram den aktuella positionen ett steg. Följande uttryck ska ge det aktuell elementet i vectorn cycler.next() och nästa gång next() anropas ska nästa element i vectorn erhållas (cykliskt). Följande uttryck ska stega upp värdet på det aktuella elementet i vectorn (postfix ++ fungerar ju eftersom v innehåller int-värden) cycler.next()++ Det som next() returnerar ska alltså ge åtkomst till det aktuella elementet på ett sätt som gör det möjligt att ändra på elementets värde om man så önskar. Det ska inte vara tillåtet att kopiera eller tilldela Cycler-objekt. Fortsättning nästa sida!

TDDI14 Objektorienterad programmering 4 (5) Det givna testprogrammet ska ge följande utskrift då Cycler och cycler_error konstruerats: 1 2 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9 Cyclerfel: tom vector Meddelandet "tom vector" som what() skriver ut har alltså skickats med då cycler_error kastades. Tips: Om du använder en iterator, vector<t>::iterator, för att implementera Cycler får du problem med något som kallas beroende namn ( dependent name ), eftersomdet inte är självklart att iterator i vector<t>::iterator anger en typ. Du måste därför tala om det för kompilatorn genom att specificera med typename, dvs använda typename vector<t>::iterator då du vill deklarera en iterator.

TDDI14 Objektorienterad programmering 5 (5) 3. Kopiera filen uppgift3.cc från mappen given_files. Filen innehåller ett testprogram i main() och följande definition för att lagra en artikel i ett artikelregister (ingår inte i uppgiften): struct Item { string name; double price{}; }; // artikelnamn // artikelpris I ett program som ska hantera sådana poster ska indata kunna läsas från en inström med operator>> och utdata ska kunna skrivas på en utström med operator<<. Exempel på användning: Item x; while (cin >> x) { cout << x << \n ; } // läser in på formen artikel; pris // skriver ut på formen artikel; pris och ny rad Indata för en artikel ska ges på en rad, med artikelnamnet först, sedan ett semikolon och sist priset. Artikelnamn kan bestå av flera delar (några fler finns i den givna filen items.txt). Exempel: Hålfotsinlägg, stl. 45; 107.50 Bollplank; 254.00 Kanelbullar, 10 st; 25.90 Överlagra operator<< och operator>> för att kunna skriva ut respektive läsa in en artikel. operator<< ska inte generera ny rad efter att artikelns pris har skrivits ut. Önskas ny rad ska det program som skriver ut göra detta, som i exemplet ovan. Om det uppstår något fel när operator>> ska läsa det kan inträffa om ett otillåtet värde för priset dyker upp ska variabeln som inläsningen görs till (x) behålla sitt gamla värde. Endast om både artikelnamn och pris kan läsas utan problem ska variabeln erhålla de inlästa värdena. Vid fel får testprogrammet avslutas.