Objektorienterad programmering
för D2 m fl
måndag 5 november 2007 kl 08:00 - 13:00
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 40.
För godkänt betyg (3 respektive G) krävs 20 poäng. |
Resultat och lösningar: | Meddelas på kursens hemsida eller via e-post senast måndag 19 november 2007. |
Visning och frågestund: |
Måndag 19 november 2007 kl 12:00-12:30 i mitt rum (T2220).
Efter visningen 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. |
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. |
Skriv klassdefinitionen för klassen Datum. Den ska ha en lämplig konstruktor, och tre medlemsfunktioner:
Skriv en main-funktion som först skapar två datum (dvs två Datum-objekt), läser in båda, skriver ut båda, och till sist jämför dem. Om de är lika ska programmet skriva ut Lika!, annars Olika!. 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 dessa tre operatorer.friend ostream& operator<< (ostream& out, const Datum& datum); friend istream& operator>> (istream& in, Datum& datum); bool operator== (Datum& andra_datumet);
Skriv en main-funktion som först skapar två datum (dvs två Datum-objekt), läser in båda, skriver ut båda, och till sist jämför dem. Om de är lika ska programmet skriva ut Lika!, annars Olika!.
Till skillnad från i uppgift 3 ovan, ska vi använda de tre nya operatorerna för detta.
Skriv därför ytterligare en main-funktion, som först skapar två datum (dvs två Datum-objekt), men den här gången ska den använda new för att skapa objekten. Sen ska den, precis som förut, läsa in båda, skriva ut båda, och till sist jämföra dem. Om de är lika ska programmet skriva ut Lika!, annars Olika!. Glöm inte att avallokera objekten.
Välj själv om du vill använda funktionerna, som i uppgift 3, eller operatorerna, som i uppgift 5.
Det ska finnas en medlemsfunktion skriv, som skriver ut data om fartyget på standardutmatningen, till exempel så här:
Den funktionen ska vara virtuell, så eventuella subklasser till Fartyg ska kunna göra sina egna, mer specialiserade, utskrifter.Fartyget Titanic från 1911-05-31
Det ska finnas en medlemsfunktion antal_kanoner, som returnerar antalet kanoner som fartyget har. Den ska returnera noll, för vanliga fartyg har (normalt) inga kanoner. Den funktionen ska också vara virtuell, så eventuella mer beväpnade subklasser till Fartyg ska kunna returnera andra värden.
Dessutom ska alla fartygen lagras i en länkad lista. Lägg till lämpliga medlemsvariabler och medlemsfunktioner för detta.
a) (3p)
Skriv klassdefinitionen för klassen Fartyg. Glöm inte att det ska finnas (minst) en konstruktor.
b) (3p)
Skriv definitioner (dvs implementera) för alla medlemsfunktionerna, och eventuella andra saker som behövs.
c) (1p)
Skriv kodrader för att skapa fartyget Titanic, som sjösattes 1911-05-31, och sen skriva ut det med skriv-funktionen.
d) (2p)
Skriv funktionen skriv_alla_fartyg. Den ska skriva ut alla fartygen, genom att gå igenom den länkade listan och anropa skriv-funktionen i vart och ett av fartygen.
Fartyget Yamato från 1940-08-08 Det är ett slagskepp med 61 kanoner.
a) (2p)
Skriv klassdefinitionen för klassen Slagskepp.
b) (2p)
Skriv definitioner (dvs implementera) för alla medlemsfunktionerna, och eventuella andra saker som behövs.
c) (1p)
Hur behöver funktionen skriv_alla_fartyg från uppgiften ovan förändras, nu när det finns en ny sorts fartyg att ta hänsyn till? Förklara också varför.
d) (1p)
Skriv funktionen besegrar, som tar två slagskepp som argument, och returnerar true om det första slagskeppet besegrar det andra, och false om det inte gör det. I en strid är det alltid slagskeppet med flest kanoner som vinner. Om de har lika många kanoner, vinner ingen, och funktionen ska då returnera false.
e) (2p)
Skapa två slagskepp, Yamato, som sjösattes 1940-08-08 och har 61 kanoner, och Iowa, som sjösattes 1942-08-27 och har 158 kanoner. Låt dem strida med varandra genom att anropa funktionen besegrar, och skriv ut det slagskepp som vinner.