zadanie nr 8 termin realizacji: 13 kwiecień 2005

C++

lista asocjacyjna (klasy abstrakcyjne) studia wieczorowe

Niech dana będzie abstrakcyjna klasa reprezentująca zbiór asocjacyjny indeksowany napisami dedykowany klasom pochodnym od DajacySiePoliczyc (klasa zdefiniowana w poprzednim zadaniu).

class Asoc
{
public:
    struct Blad
    {
        const string opis;
        Blad (string op): opis(op) {}
        Blad (const Blad &bl): opis(bl.opis) {}
    };
public:
    virtual ~Asoc () {}
public:
    // operator[] zgłasza wyjątek, gdy nie znajduje elementu o zadanej nazwie
    virtual DajacySiePoliczyc & operator[] (const string &nazwa) throw(Blad) = 0;
    // funkcja wstaw zgłasza wyjątek, gdy elementu o zadanej nazwie już istnieje
    virtual void wstaw (const DajacySiePoliczyc &dsp) throw(Blad) = 0;
    // funkcja usun zgłasza wyjątek, gdy nie znajduje elementu o zadanej nazwie
    virtual void usun (const string &nazwa) throw(Blad) = 0;
};

Na bazie tej klasy stwórz realizację listy asocjacyjnej.

class ListaAsoc: public Asoc
{
    class WezelListy: public Asoc
    {
    protected:
        WezelListy *nastepny;
        DajacySiePoliczyc *element;
    // ...
    };
protected:
    WezelListy *poczatek;
// ...
};

Klasa ListaAsoc powinna posiadać kosstruktor domyślny (lista pusta), konstruktor kopiujący, wirtualny destruktor, operator przypisania kopiującego oraz zaprzyjaźniony operator wypisywania listy do strumienia wyjściowego (można sobie wyobrazić jego działanie w postaci przeglądania listy od początku do końca). Warto zadbać o to, by w klasie WezelListy także znalazł się zaprzyjaźniony operator pisania do strumienia.

Następnie napisz program, który utworzy i zainicjalizuje listę asocjacyjną podstawowych funkcji arytmetycznych i trygonometrycznych zdefiniowanych w poprzednim zadaniu (Pi, E, Abs, Min, Max, Ln, Log, Exp, Power, Sin, Cos, Atan, Acot), a potem będzie interaktywnie odpytywał użytkownika o nazwę funckji i o argumenty (w zależności od arności) i po jej obliczeniu wypisywał wynik na standardowe wyjście.

Uwaga! Klasy zdefiniowane w tym zadaniu będą wykorzystywane w następnych zadaniach, a zatem warto napisać je bardzo starannie.

Uniwersytet Wrocławski Paweł Rzechonek Instytut Informatyki ul. Przesmyckiego 20 PL-51-151 Wrocław