lab10 6 id 259051 Nieznany

background image

Programowanie obiektowe 2010/2011

1

Laboratorium 10

Funkcje wirtualne

Zadanie 1.

Uzupełnij podany program. Klasa bazowa Zwierze opisuje zwierzę. Jej klasami pochodnymi są Ssak i Ryba.
Klasa Ssak ma dwie klasy pochodne: Pies i Kon.

#include <iostream>
using namespace std;

enum KOLOR {Czerwony, Zielony, Niebieski, Szary, Bialy, Czarny, Brazowy } ;

class Zwierze {
public:
Zwierze(int);
virtual ~Zwierze() { cout << "Zwierze usuwam...\n"; }
virtual int PodajWiek() const { return jegoWiek; }
virtual void UstawWiek(int wiek) { jegoWiek = wiek; }
virtual void Spij() const = 0;
virtual void Jedz() const = 0;
virtual void Rozmnazaj() const = 0;
virtual void Idz() const = 0;
virtual void DajGlos() const = 0;
private:
int jegoWiek;
};

class Ssak : public Zwierze {
public:
// wstaw potrzebne funkcje
...
virtual void Rozmnazaj () const
{ cout << "Rozmnazanie ssaka...\n"; }
};

class Ryba : public Zwierze {
public:
// wstaw potrzebne funkcje
...
virtual void Rozmnazaj () const
{ cout << "ryba sklada jaja...\n"; }
};

class Kon : public Ssak {
protected:
KOLOR jegoKolor;
public:
// wstaw potrzebne funkcje
};

class Pies : public Ssak {
protected:
KOLOR jegoKolor;
public:
// wstaw potrzebne składowe
};

background image

Programowanie obiektowe 2010/2011

2

int main()
{
Zwierze *pZwierze=0;
int wybor;
bool koniec = false;

while (1) {
cout << "(1)Pies (2)Kon (3)Ryba (0)Koniec: ";
cin >> choice;
switch (choice)
{
case 1: pZwierze = new Pies(5,Brazowy);
break;
case 2: pZwierze = new Kon(4,Czarny);
break;
case 3: pZwierze = new Ryba (5);
break;
default: Koniec = true;
break;
}
if (koniec)
break;

pZwierze->DajGlos();
pZwierze->Jedz();
pZwierze->Rozmnazaj();
pZwierze->Idz();
pZwierze->Spij();
delete pZwierze;
cout << "\n";
}
return 0;
}

Zadanie 2.

Opracować klasę zbior_het udostępniającą operacje na zbiorach elementów rożnych typów. Wszystkie typy są
pochodnymi typu podstawowego o nazwie baza. Klasa baza ma zawierać co najmniej jedną funkcję wyświetl().
Będzie ona przedefiniowana w każdej z klas pochodnych tak, aby można było wyświetlić informacje o obiekcie.
Klasa zbior_het ma zawierać funkcje:

dodaj() – dodaje element do zbioru pod warunkiem, że nie ma go w zbiorze

należy() – sprawdzanie przynależności obiektu do zbioru

licznosc() – zwracanie liczby elementów w zbiorze

drukuj() – wyświetlenie wszystkich elementów zbioru

Ponadto ma zawierać iterator umożliwiający przeszukanie różnych elementów zbioru. Iterator jest obsługiwany
przez następujące funkcje:

init() – inicjalizacja iteratora

nastepny() – zwraca kolejny element zbioru

istnieje() – sprawdza, czy w zbiorze są jeszcze niezbadane elementy

Jak elementy zbioru przyjąć obiekty klas punkt i zespolona. Dziedziczące po typie baza.

class baza;
class zbior_het {
int max; // maksymalna liczba elementów
int lbelem; // biezaca liczba elementów
baza **adel; // adres obszaru ze wskaźnikami elementów
int ten; // numer bieżącego elementu

background image

Programowanie obiektowe 2010/2011

3

public:
zbior_het (int=10);
~zbior_het();
void dodaj(baza &); // dodaje element do zbioru
int nalezy(baza &); // sprawdza przynależność do zbioru
int licznosc(); // licznosc zbioru
void init(); // inicjalizacja iteratora
baza & nastepny(); // przejscie do nastepnego elementu
int istnieje(); //
void drukuj(); // wyświetlenie wartosci elementow
};


Szablony

Zadanie 3.

Napisz szablon funkcji maksimum. Ma ona przyjmować dwa argumenty i zwracać większy z nich (lub
którykolwiek, jeśli są sobie równe). Przetestuj opracowana funkcję na typach wbudowanych i na klasie własnej,
na przykład Ulamek. Wykorzystaj klasę z wykładu (plik lab10.tar.gz).

Zadanie 4.
Napisz szablon klasy mstack. Rozwiązanie wzoruj na przykładzie:

class mstack {
size_t capacity; // rzeczywisty rozmiar tablicy
size_t _size; // logiczny rozmiar tablicy - liczba elementow na stosie
int *tab; // elementy stosu

void grow(); // prywatna funcja do rozszerzania stosu
enum {initial_capacity = 1}; // poczatkowy rozmiar tablicy
public:
// konstruktory/destruktory
mstack();
// konstruktor kopiujacy
mstack(const mstack & s);
// destruktor
~mstack();

// modyfikatory

void push(const int data); // wlozenie elementu na stos
void pop(); // zdjecie elementu ze stosu
int top() const; // udostepninie liczby ze szczytu stosu
int &top(); // udostepnienie referencji
//do liczby na szczycie stosu
bool empty() const; // czy stos jest pusty?
size_t size() const; // biezacy rozmiar stosu

// operator przypisania
mstack & operator= ( mstack const & s);
};

Zadanie 5.

Zmodyfikuj klasę mstack tak, aby do przechowywania elementów wykorzystać biblioteczną klasę vector.

background image

Programowanie obiektowe 2010/2011

4

Zadania domowe

Zadanie 6. (Szablony)

Opracowaną w zadaniu 5 klasę wykorzystaj do rozwiązania następującego zadania: Napisz funkcję, która będzie
tworzyła i zwracała stos zawierający te same elementy co stos S, ale umieszczone w odwrotnej kolejności:

mstack<int> OdwrocStos (mstack<int> & S) ;

Zadanie 7. (Funkcje wirtualne)

Opracuj klasę ciąg arytmetyczny i ciąg geometryczny będące klasami pochodnymi klasy ciąg. Utwórz tablicę, w
której umieścisz adresy 10 losowo wybranych ciągów (arytmetycznych lub geometrycznych). Oblicz sumę n
pierwszych wyrazów dla każdego z ciągów, n jest równe numerowi pozycji ciągu w tablicy wraz z informacją
jakiego typu jest to ciąg.


Wyszukiwarka

Podobne podstrony:
lab10 3 id 259045 Nieznany
lab10 3 id 259045 Nieznany
Lab10 Sprawozdanie id 259061 Nieznany
Lab10 Sprawozdanie id 259061 Nieznany
Abolicja podatkowa id 50334 Nieznany (2)
4 LIDER MENEDZER id 37733 Nieznany (2)
katechezy MB id 233498 Nieznany

więcej podobnych podstron