Monika Dekster

Laboratorium 7. Klasy z dynamiczną alokacją pamięci.

Zadania

  1. Symulacja książki telefonicznej

    Napisz klasę Entry zawierającą nazwisko abonenta i numer telefonu (oba pola typu string). Klasa powinna zawierać konstruktor inicjalizujący pola, funkcję print() wypisującą wartości pól oraz gettery.

    Klasa Directory reprezentuje książkę telefoniczną. Jej struktura wygląda następująco:

    
    class Directory {
    public:
        Directory(int max_size); // set up empty directory of entries (allocate array)
        Directory(const Directory &d); // copy constructor
        ~Directory(); // free memory
        void insert(const Entry &entry); // Insert an entry into the directory.
        void lookup(const string &name) const; // display the directory entry for a name
        void remove(const string &name); // remove an entry.
        void display() const; // display the current directory.
    private:
        int	max_size; // the maximum allowable number of entries
    	int current_size; // the current number of entries
        Entry* entry_list; // pointer to the list of entries
        void grow(); // double the maximum size, when required.
        int find_name(const string &name) const; // return index of an entry, given a name.
    };
    

    Funkcja main() testuje działanie klasy. Powinna zawierać dopisanie kilku obiektów typu Entry do tablicy (funkcja insert()). Jeżeli aktualna liczba elementów tablicy przekroczy max_size, wywoływana jest funkcja grow(), która realokuje tablicę tak, by mogła pomieścić 2 * max_size elementów.

    Należy przetestować również pozostałe funkcje składowe klasy.

  2. Napisz klasę Point definiującą punkt na płaszczyźnie. Klasa powinna zawierać:

    • Konstruktor inicjalizujący współrzędne punktu liczbami losowymi (należącymi do przedziału [-10, 10])
    • ostream& print(ostream& o); funkcja wypisująca współrzędne punktu
    • Funkcję double distance(const Point&), zwracającą odleglość między dwoma punktami

    Napisz klasę Polygon opisującą wielobok o n wierzchołkach.

    Pola klasy to:

    • int n - liczba wierzchołków wieloboku
    • Point* vertices - dynamicznie alokowana tablica punktów będących wierzchołkami wielomianu.

    Zaimplementuj następujące funkcje składowe klasy:

    • Konstruktor, przyjmujący jeden parametr typu całkowitego (określający liczbę wierzchołków wieloboku) powinien przydzielić pamięć dla tablicy wierzchołków oraz zainicjalizować je wartościami losowymi
    • Konstruktor kopiujący
    • Konstruktor przesuwający
    • Destruktor
    • double circumference(); zwraca obwód wieloboku
    • ostream& print(ostream& o); funkcja wypisująca liczbę wierzchołków wieloboku i ich współrzędne oraz obwód wieloboku.

    Napisz funkcję main() wczytującą liczbę wierzchołków wieloboku. Program powinien utworzyć obiekt typu Polygon o zadanej liczbie wierzchołków i wypisać go używając metody print().