lab9 5 id 260341 Nieznany

background image

Programowanie obiektowe 2010/2011

1

Laboratorium 9

Zad 1.
Który wiersz spowoduje błąd kompilacji i dlaczego?

class A
{
private:
int a3;
protected:
int a2;
public:
int a1;
void fa() { a1 = a2 = a3 = 0; }
};
int main()
{
A x;
x.a1 = 1;
x.a2 = 1;
x.a3 = 1;
return 0;
}

Zad. 2.
Który wiersz spowoduje błąd kompilacji i dlaczego?

class A
{
private:
int a3;
protected:
int a2;
public:
int a1;
void fa() { a1 = a2 = a3 = 0; }
};

class B : public A
{
private:
int b3;
protected:
int b2;
public:
int b1;
void fb();
};

void B::fb()
{
b1 = b2 = b3 = 0;
a1 = 1;
a2 = 2;
a3 = 3;
}

background image

Programowanie obiektowe 2010/2011

2

int main()
{
B y;
y.a1 = 2;
y.fa();
y.a2 = 2;

y.a3 = 2;

y.b1 = 2;
y.b2 = 2;

y.b3 = 2;
}

Zad. 3. Konstruktory, przypisywanie wartości do odpowiedniego konstruktora
Zapoznaj się z programem z pliku przyklad1.cpp. Zmodyfikuj go tak, aby obiekty były tworzone za pomocą
konstruktorów.

Zad. 4. Zasłanianie metod
Uzupełnij program z poprzedniego zadania o metodę baw(). Ma ona przedstawiać ulubione zajęcie zwierzaka.
W klasie bazowej będzie to po prostu zabawa.

Zad. 5. Przeciążanie funkcji.
Uzupełnij program z poprzedniego zadania o metodę szczekaj(), w której możemy podać ile razy pies ma
zaszczekać.

Zad. 6.
Zapoznaj się z programami z plików przyklad2.cpp i przyklad3.cpp

Opracuj klasę bazową Pracownik (pracownik zatrudniony na stałe) i klasę pochodną Pracownik_godz
(pracownik zatrudniony na godziny) według przedstawionej specyfikacji klas.

class Pracownik {
int id; // identyfikator
string nazwisko; // lub char *nazwisko - wtedy destruktor
double podatek_stawka; // % podatku
protected:
double placa_brutto;
public:
Pracownik(int prac_id, string prac_nazw);
void wpisz_podatek(double nowa_stawka);
void wpisz_place(double nowa_placa);
double oblicz_place_netto(); // po odtrąceniu podatku
void drukuj_info(); // wyświetla informację o pracowniku
};
class Pracownik_godz : public Pracownik
{
double ile_godzin; // liczba przepracowanych godzin
double stawka_godz; // stawka godzinowa
public:
Pracownik_godz(int prac_id, string prac_nazw, double stawka);
void wpisz_godz(double ile);
void wpisz_stawke_godz(double stawka);
double oblicz_place();
void drukuj_info();
};

background image

Programowanie obiektowe 2010/2011

3

Przykładowa informacja uzyskana z programu:

Pracownik: nazwisko = Kowalski
id = 1234
placa brutto = 2000
podatek = 400
placa netto = 1600

Pracownik: nazwisko = Nowak
id = 2345
placa brutto = 5000
podatek = 1000
placa netto = 4000
liczba godzin = ...

stawka = ...

Zadanie domowe

Zad. 7.
Opracuj klasę Wielokat do obsługi figur na płaszczyźnie. Klasa ta ma zawierać:

class Wielokat {
int l_bokow; // liczba boków
int *boki; // tablica z długościami boków
public:
Wielokat(); // konstruktor domyślny
Wielokat(int l_bokow); // konstruktor, gdy podana liczba boków
Wielokat(const Wielokat &w); // konstruktor kopiujący
~Wielokat(); // destruktor
// przeciążony operator przypisania
Wielokat& operator=(const Wielokat &w);
// wstawianie dlugości boku
void wpiszBok(int ktory, int dlugosc);
// wyświetlanie boków
void print();
// obliczanie obwodu
int obwod();
// w wersji obecnej: wyświetlanie komunikatu
// "Nie potrafie policzyc powierzchni"
int area();
};

// przykładowy program testowy
int main() {
Wielokat a(5);
Wielokat b = Wielokat(3); // Wielokat b(3)
Wielokat c = a;
Wielokat d;
Wielokat trojkat(3);
int bok;
cout << "Wpisz dlugosci bokow trojkata: "
for (int i = 0; i<3; i++)
{
cin >> bok;
trojkat.wpiszBok(i, bok);
}
cout << "Obwod trojkata = " << trojkat.obwod() << endl;
trojkat.drukuj(); cout << endl;
c.drukuj(); cout << endl;
endl;
}

background image

Programowanie obiektowe 2010/2011

4

Zad. 8.
Na podstawie poprzedniego zdania utwórz hierarchię klas:


class trojkat : public wielokat;
class prostokat : public wielokat;
class kwadrat :public prostokat;

Zmodyfikuj klasę Wielokat, jeśli będzie to wymagane. Klasy pochodne mają posiadać funkcje obliczające
powierzchnię (o ile klasa macierzysta takiej funkcji nie dostarcza) oraz własne funkcje drukuj(). Każda z
funkcji drukuj() ma wyświetlić informację o typie obiektu i jego powierzchni.

Zad. 9.

Zdefiniuj klasę bazową Samochod. W klasie mają być informacje o marce (typ string), pojemność silnika (typ
int) i właścicielu samochodu (typ osoba, utworzony w poprzednim zdanaiu). Utwórz dwie klasy pochodne
Osobowy i Ciezarowy. Klasa Osobowy ma dodatkowe składowe takie jak: liczba pasażerów (typ int), pojemność
bagażnika (typ double), liczba drzwi (typ int). Klasa Ciezarowy powinna mieć dodatkowe składowe: ładowność
(typ double), liczbę osi (typ int), informację o tym, czy posiada urządzenie samowyładowcze (tak/nie, typ bool).
Zapewnij klasom rozsądną liczbę potrzebnych konstruktorów, funkcji dostępu i modyfikacji, przeciążony
operator przypisania i konstruktor kopiujący.

Napisz program testujący opracowane klasy a następnie program demonstracyjny tworzący co najmniej dwa
samochody osobowe, dwa samochody ciężarowe i wyświetlający pełne informacje o utworzonych obiektach.
Defincja klasy Osoba jest podana poniżej. Jej implementacja należy do zadania.

class Osoba {
string nazwisko;
public:
Osoba();
Osoba(string n);
Osoba(const Osoba& os);
string czytaj_nazwisko() const;
Osoba& operator=(const Osoba& os);
friend istream& operator>>(istream& we, Osoba& os);
friend osteram& operator<<(ostare& wy, const Osoba& os);
};


Wyszukiwarka

Podobne podstrony:
lab9 3 id 260337 Nieznany
lab9 2 id 260334 Nieznany
grafika 3D lab9 id 194729 Nieznany
Abolicja podatkowa id 50334 Nieznany (2)
4 LIDER MENEDZER id 37733 Nieznany (2)
katechezy MB id 233498 Nieznany
metro sciaga id 296943 Nieznany
perf id 354744 Nieznany
interbase id 92028 Nieznany
Mbaku id 289860 Nieznany
Probiotyki antybiotyki id 66316 Nieznany
miedziowanie cz 2 id 113259 Nieznany
LTC1729 id 273494 Nieznany
D11B7AOver0400 id 130434 Nieznany
analiza ryzyka bio id 61320 Nieznany
pedagogika ogolna id 353595 Nieznany
Misc3 id 302777 Nieznany

więcej podobnych podstron