Objektorienterad programmering
för D2 m fl
måndag 18 augusti 2008
Gäller som tentamen för:
DT2004 Datateknik B, Objektorienterad programmering, provkod 0100
DT2006 Datateknik B, Tillämpad datavetenskap B, provkod 0330
OBP012 Objektorienterad programmering, provkod 0101 (och 0100)
TDD122 Tillämpad datavetenskap B, provkod 0330 (och 0200)
Hjälpmedel: | Inga hjälpmedel. |
Poängkrav: |
Maximal poäng är 38.
För godkänt betyg (3 respektive G) krävs 19 poäng. |
Resultat och lösningar: | Meddelas på kursens hemsida eller via e-post senast måndag 8 september 2008. |
Återlämning av tentor: | Efter att resultatet meddelats kan tentorna hämtas på institutionen. Man kan också få sin rättade tenta hemskickad. |
Examinator och jourhavande: | Thomas Padron-McCarthy, telefon 070-73 47 013. |
Om bollen träffar en sten, så försvinner stenen. Bollen kan studsa på kanterna och på racketen. Spelaren flyttar racketen i sidled, för att träffa bollen så att den studsar tillbaka in i spelet. Om spelaren missar bollen med racketen, så är den bollen förlorad.
Spelet behöver fyra olika saker som kan visas på skärmen:
För alla uppgifter på tentan gäller: Man får använda både standard-C++ (som till exempel har pekare som anges med * och objekt som skapas med new) och Microsofts dialekt C++/CLI (som till exempel har pekare som anges med ^ och objekt som skapas med gcnew). Man kan dock få poängavdrag om man blandar dem på ett felaktigt sätt, till exempel om man skapar ett objekt med gcnew och sen pekar på det med en *-pekare. |
Dessutom ska det finnas en medlemsfunktion som heter skriv, och som skriver ut den sakens x- och y-koordinat.
På riktigt skulle det säkert också finnas någon funktion för att rita upp saken, men det hinner vi inte med här.
Skriv klassdefinitionen för klassen Sak. (Det är den som börjar med "class Sak", och som ofta skrivs i en egen .h-fil.)
Skriv en main-funktion som först skapar två saker (dvs två Sak-objekt), och sedan skriver ut båda. Objekten ska lagras i vanliga variabler, och inte allokeras dynamiskt med new.
I den här och alla andra uppgifter på tentan gäller: Om du ska använda en klass, funktion eller liknande sak från en tidigare uppgift, behöver du inte skriva koden för den på nytt. Du får också använda den även om du inte gjort uppgiften där man skulle skriva den. |
Implementera denna operator.friend ostream& operator<< (ostream& out, const Sak& sak);
Skriv en main-funktion som först skapar två saker (dvs två Sak-objekt), och sedan skriver ut båda.
Till skillnad från i uppgift 3 ovan, ska vi använda operatorerna från uppgift 4.
Skriv därför ytterligare en main-funktion som skapar två saker (dvs två Sak-objekt), men den här gången ska den använda new för att skapa objekten. Sen ska den, precis som förut, skriva ut båda. Till sist ska den avallokera objekten.
Välj själv om du vill använda funktionerna, som i uppgift 3, eller operatorerna, som i uppgift 5. Glöm inte att avallokera objekten.
Dessutom ska det finnas en medlemsfunktion som heter skriv, och som skriver ut stenens koordinater, dess bredd och dess höjd.
Skriv klassdefinitionen för klassen Sten.
Medlemsfunktionen skriv skriver ut data, men vi har inte gjort den virtuell. Visa, med programkod och tydliga förklaringar, vilket eller vilka problem som uppstår eftersom den inte är virtuell.
b) (3p)
Gör en ny skriv-funktion, som vi kan kalla visa. Ange vilken kod som ska stoppas in, och var, i klasserna Sak och Sten.
c) (2p)
Visa, med programkod och tydliga förklaringar, hur man kan använda funktionen visa. Förklara tydligt vad som händer.
Ha med både en eller flera lämpliga konstruktorer, och de "get"- och "set"-funktioner som verkar lämpliga för att hämta och ändra olika data.
a) (3p)
Skriv klassdefinitionen för klassen Spelplan.
b) (7p)
Skriv definitioner för alla medlemsfunktionerna (dvs implementera dem), och eventuella andra saker som behövs.