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
.
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:
n
, oznaczającą długość tablicy osób,Person
) o długości n
,Person
, 1 dla obiektów Worker
i 2 dla obiektów Manager
) oraz wartości pól odpowiadające danemu typowi (wyznaczonemu przez kod),Person
.