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

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älls därför högre krav på vad ni lämnar in.
  • 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
Gott och blandat
C --> C++
STL-intro
Size-klassen
Visual C++
Kursplan
Schema
Underrubriker
exceptions
templateklasser
namespace
Ansvarig lärare: Stefan Råmonth - stefan.ramonth@realfast.se
Senast uppdaterad: