Monika Dekster

Laboratorium 9. Dziedziczenie i polimorfizm

Zadania

  1. Zdefiniuj klasę Number zawierającą czysto wirtualną funkcję print().

    Napisz dwie klasy Integer i Double dziedziczące z klasy Number, które opisują odpowiednio liczby całkowite i podwójnej precyzji. Definicje tych klas powinny zawierać: konstruktor, inicjalizujący wartość liczby, metodę print(), wypisującą wartość liczby w postaci nazwa typu: wartość gdzie nazwa typu oznacza odpowiednio napis Integer lub Double.

    Zdefiniuj operator strumieniowy dla klasy Number (korzystający z funkcji print()).

    Napisz funkcję main(), która: wczytuje liczbę całkowitą n, oznaczającą długość tablicy liczb, alokuje tablicę liczb (wskaźników do obiektów klasy Number) o długości n, dla każdej pozycji tej tablicy losuje kod (0 dla liczb całkowitych i 1 dla rzeczywistych) oraz wartość elementu tablicy (typu wyznaczonego przez kod), drukuje elementy tablicy korzystając z operatora wyjścia dla klasy Number.

  2. Uzupełnij następujący szkielet programu i zaimplementuj wymienione funkcje i metody. Napisz funkcję main() testującą działanie klas.

    
    class Person {
    
    protected:
    	string name;
    	int year_of_birth;    
    
    public:
    	Person(const string&, int);
    	virtual void print(ostream&) const;
    };
    
    class Worker : public Person {
    
    protected:
    	double salary;
    
    public:
    	Worker(const string&, int, double);
    	void print(ostream&) const;
    	double get_salary() const;
    };
    
    class Manager : public Worker {
    	string dept;
    
    public:
    	Manager(const string&, int, double, const string&);
    	void print(ostream&) const;
    	string get_dept() const;
    };
    
    ostream& operator<<(ostream& os, const Person& o);
    //	make sure it prints the right object type (use print())
    

    Napisz funkcję main(), która:

    1. wczytuje liczbę całkowitą n, oznaczającą długość tablicy osób,
    2. alokuje tablicę pracowników (wskaźników do obiektów klasy Person) o długości n,
    3. dla każdej pozycji tej tablicy losuje kod (0 dla obiektów Person, 1 dla obiektów Worker i 2 dla obiektów Manager) oraz wartości pól odpowiadające danemu typowi (wyznaczonemu przez kod),
    4. alokuje i inicjalizuje obiekt danego typu i wpisuje jego adres do tablicy,
    5. drukuje elementy tablicy korzystając z operatora strumieniowego dla klasy Person.