CD5250 - Objektorienterad programutveckling med C++, 5 poäng, period 4, 2001

Laboration 6

intro

I denna, sjätte och sista labb, skall ni använda er av några av C++ funktioner som kan förbättra programkoden i både läsbarhet och funktionalitet.

Tänk på:

  • Var noggrann. Kontrollera er kod ordentligt innan ni skickar in den. Eftersom denna laboration, sett ur mängd och kodningssvårighet, är relativt liten jämfört med tidigare laborationer ställer jag därför högre krav på vad ni lämnar in.
  • Koden för denna laboration (och även från tidigare laborationer) används som del i betygssättningen, så se till att det ni lämnar in är representativt för er och er kunskap.
  • A. exceptions

    I denna uppgift skall ni utöka er String-klass som ni skrev i en tidigare laboration. Utökningen är en litet tillägg för indexeringsoperatorn. I nuvarande version returnerar ni 0 om man försöker indexera utanför strängen.

  • Ändra detta så att det skapas ett undantagsfel (exception) istället
  • Skapa en lämplig klass (StringException) som slängs vid fel
  • Skapa även ett demonstrationsprogram där ni visar hur ni tar om hand undantagsfel vid felaktig indexering i er String-klass.
  • Genom att använda er av undantagshantering kan ni förenkla användandet av indexeringsoperator eftersom ni inte behöver kontrollera returvärdet vid varje indexering. Dessutom fungerar det att returnera referenser från indexeringsoperatorn så att ni även kan ändra på enstaka tecken i era String-objekt.

    Ni skall exempelvis kunna skriva så här:

    String str("Hello World");
    char a = str[5]; // Detta bör fungera sedan tidigare
    str[5] = '-';
    cout << str; // Bör ge resultatet "Hello-World"
    
    Exempel 1.

    B. templateklasser

    Gör om er Point-klass från tidigare laboration till att vara template-baserad. Lägg även till så att utskriftsoperatorn "<<" fungerar för Point-klassen.

    Ni skall kunna exekvera följande kod med den nya uppdaterade klassen:

    Point<int> ip(10,20);
    Point<double> dp(10.29, 20.001);
    
    cout << "Integervarianten: " << ip << endl;
    cout << "Doublevarianten:  " << dp << endl;
    
    Exempel 2.

    C. namespace

    Döp om String-klassen ni har skapat i en tidigare laboration till "string" så att namnet krockar med standardbibliotekets "string"-klass. Lägg därefter era klasser Point och string i ett eget namespace som lämpligtvis namnsätts efter era initialer.

  • Demonstrera string-klassen i ett litet program där ni använder er av er egen omdöpta string-klass samt lagrar dessa i en std::vector.
  • Demonstrera den "templatiserade" varianten av er Point-klass i ett litet program där ni använder er av er templatiserade point-klass samt lagrar dessa i en std::vector.
  • CD5250
    Nyheter
    Kursinformation
    Föreläsningar
    Labbar
    Projektuppgift
    Redovisningar
    STL-intro
    Size-klassen
    Visual C++
    Kursplan
    Schema
    Aktuellt
    Projektuppgift
    Föreläsning 7
    Laboration 6
    Underrubriker
    exceptions
    templateklasser
    namespace
    Ansvarig lärare: Martin Skogevall - martin.skogevall@mdh.se
    Senast uppdaterad: Sat May 19 16:43:15 GMT+02:00 2001