Zadania do samodzielnego wykonania i oceniane jako praca domowa
Zadanie 1
Zdefiniuj klasę KOLO, która powinna zawierać:
pola prywatne:
promień koła (typ float)
kolor wypełnienia (typ int)
konstruktor bezparametrowy inicjujący wartość początkową pola okręgu (dowolnie ustaloną)
konstruktor z parametrami promień, kolor wypełnienia
metody publiczne:
Oblicz_Pole(..), obliczająca pole powierzchni koła
Ustaw_Promien(..), zmieniająca promień koła
Ustaw_Kolor(..), zmieniającą kolor koła
funkcję zaprzyjaźnioną Porownaj_Kola(KOLO A, KOLO B), porównującą, czy dwa koła mają taką samą powierzchnię i kolor.
Uruchom w programie głównym sekwencję instrukcji dla dwóch obiektów K1, K2: konstruktor bezparametrowy, porównanie pól, ustawienie tego samego koloru, porównanie pól, ustawienie różnych kolorów, porównanie pól. Użyj na końcu konstruktora z parametrami dla obiektów K3, K4 i pokaż różne warianty ich porównania.
Uwaga:
Wyższą ocenę uzyska rozwiązanie z udziałem wskaźników na obiekty oraz uwalnianie pamięci dynamicznej.
Zadanie 2
Zdefiniuj klasę PROSTOKAT, która powinna zawierać:
pola prywatne typu całkowitego:
długości boków prostokąta
kolor wypełnienia
konstruktor bezparametrowy inicjujący wartość początkową pola prostokąta (dowolnie ustaloną)
konstruktor z parametrami długość, wysokość i kolor wypełnienia prostokąta
metody publiczne:
Daj_Dlugosc(..), zwracającą długość prostokąta
Daj_Wysokosc(..), zwracającą wysokość prostokąta
Zdefiniuj funkcję zaprzyjaźnioną Czy_Kwadrat(PROSTOKAT A), porównującą boki prostokąta (czy jest kwadratem).
Uruchom w programie głównym sekwencję instrukcji dla dwóch obiektów P1, P2: konstruktor bezparametrowy, porównanie czy kwadrat. Użyj też konstruktora z parametrami dla obiektów P3, P4 oraz P5, P6 i pokaż różne warianty porównania ich z kwadratem.
Uwaga:
Wyższą ocenę uzyska rozwiązanie z udziałem wskaźników na obiekty oraz uwalnianie pamięci dynamicznej.
Zadanie 3
Należy zbudować funkcje konstruktorów w hierarchii klas pochodnych do inicjalizacji obiektów A i B, jeśli utworzono je tak, jak pokazano w funkcji main() programu.
//klasa bazowa A
class klasa_A
{ public:
int liczba_int;
public:
.......... tu definicja konstruktora klasy A
void pisz_dane()
{cout<<"liczba int: "<<liczba_int<<endl;}
};
//klasa pochodna B
class klasa_B:public klasa_A
{ char tekst[20];
public:
.......... tu definicja konstruktora klasy B
void pisz_dane()
{cout<<"tekst: "<<tekst<<endl;}
};
void main(void)
{ klasa_A obiekt_A(1); //utworzenie obiektu A klasy bazowej A
klasa_B obiekt_B(2,"Jas Fasola"); //utworzenie obiektu B klasy pochodnej B
A.pisz_dane();
B.pisz_dane();
}
Zadanie 4
Wzorując się na załączonym programie, w którym klasa moneta pochodzi od klasy pieniadz, zbuduj nową klasę pochodną banknot. Zakłada się, że wyróżnikiem monety jest liczba stopów z jakich jest odlana (np. 2zł, 5zł z dwóch stopów, 1gr...1zł - z jednego), natomiast wyróżnikiem banknotu jest znak dotykowy dla niewidomych (10zł-koło, 20zł - romb, 50zł-kwadrat, 100zł-minus, 200zł - plus), które zadeklarowano jako typ wyliczeniowy. Utwórz kilka obiektów poprawnych dla bieżącej polskiej waluty i wyświetl ich dane na ekranie.
enum typ {MONETA=0, BANKNOT=1};
enum symbol {KOLO=0,ROMB=1,KWADRAT=2,MINUS=3,PLUS=4};
//klasa bazowa
class pieniadz
{ protected:
int wartosc;
typ rodzaj;
public:
pieniadz(int x, typ y)
{wartosc=x; rodzaj=y;}
virtual void pisz_dane()=0;
};
//klasa pochodna „moneta”
class moneta: public pieniadz
{ private:
int liczba_stp;
public:
moneta(int x,typ y, int z):pieniadz(x,y)
{liczba_stp=z;}
void pisz_dane()
{cout<<"wartosc: "<<wartosc<<"zl"<<endl;
cout<<"typ: "<<rodzaj<<endl;
cout<<"liczba stopow: "<<liczba_stp<<endl<<endl;}
};
................ tu utwórz klasę pochodną „banknot”
void main(void)
{..........}
Zadanie 5
Co należy zmienić w programie poniżej, aby funkcjonował poprawnie?
//klasa bazowa
class klasa_A
{ private:
int liczba_int;
public:
void daj_dane(int x)
{liczba_int=x;}
void pisz_dane()
{cout<<"liczba int: "<<liczba_int<<endl;}
};
//klasa pochodna B
class klasa_B:public klasa_A
{ private:
char tekst[20];
public:
void daj_dane(int x,char *txt)
{liczba_int=x; strcpy(tekst,txt);}
void pisz_dane()
{cout<<"tekst: "<<tekst<<endl;}
};
void main (void)
{ klasa_A A; klasa_B B;
A.daj_dane(1); A.pisz_dane();
B.daj_dane(2,”Jakis tekst”);B.pisz_dane();
}
Zadanie 6
Utwórz klasę wektor - jednowymiarową tablicę wartości typu float. Klasa powinna zawierać:
pole prywatne p - wskaźnik na początek tablicy typu float,
konstruktor z parametrem typu int - rozmiarem tablicy tworzący dynamicznie - tablicę (New) o odpowiednim rozmiarze,
destruktor zwalniający pamięć zarezerwowaną przez konstruktor
funkcję operatorową >>, tak aby można było wprowadzać dane z klawiatury do wektora,
funkcję operatorową <<, tak aby można było wyprowadzać dane z wektora na ekran
Zadanie 7
Utwórz klasę wektor - jednowymiarową tablicę wartości typu int. Klasa powinna zawierać:
pole prywatne tab - wskaźnik na początek tablicy typu int,
konstruktor z parametrem typu int - rozmiarem tablicy tworzący dynamicznie tablicę (New) o odpowiednim rozmiarze,
destruktor zwalniający pamięć zarezerwowaną przez konstruktor
funkcję operatorową >>, tak aby można było wprowadzać dane z klawiatury do wektora,
funkcję operatorową <<, tak aby można było wyprowadzać dane z wektora na ekran
Zadanie 8
Dla omawianej na ćwiczeniach klasy plik dokonaj jej rozbudowy o funkcje:
konstruktor przeciążony tworzący nowy plik dyskowy,
funkcję operatorową >>, tak by można było wprowadzać dane z klawiatury do nowego pliku dyskowego,
funkcję operatorową =, tak by można było przypisać zawartość pliku
funkcję operatorową +, tak by można było dodawać zawartości dwóch plików. Wraz z operatorem = otrzymamy możliwość działania:
void main()
{ plik plik1(„pl1.txt”), plik2(„p12.txt”, plik3(„pl3.txt”);
plik1 = plik2 + plik3; }