Uniwersytet Zielonogórski
Instytut Sterowania i Systemów Informatycznych
Programowanie obiektowe w C++
Lista 4 Wst¦p do klas
1 wiczenia
1. Niech b¦dzie dany typ zªo»ony reprezentuj¡cy liczb¦
zespolon¡:
class fLiczbaZespolona {
private:
float Re,Im;
public:
// uzupeªni¢ we wªasnym
// zakresie ;-)
};
Zadeklarowa¢ i zdeniowa¢:
(a) konstruktor inicjalizuj¡cy (zastosowa¢ list¦ ini-
cjalizacyjn¡),
(b) konstruktor domniemany,
(c) metod¦ dodaj umo»liwiaj¡c¡ dodanie dwóch
liczb zespolonych,
(d) funkcj¦ operatorow¡ + wykonuj¡c¡ zadanie z
punktu (1c) w wersji globalnej oraz jako skªa-
dow¡ klasy,
(e) funkcj¦ operatorow¡ + wykonuj¡c¡ dodawa-
nie warto±ci rzeczywistej do liczby zespolo-
nej, tak aby mo»liwa byªa notacja przemien-
na (a dokªadniej: oat + fLiczbaZespolona oraz
fLiczbaZespolona + oat), zdeniowa¢ obiekty
i napisa¢ przykªadowe wywoªania funkcji.
2. Dany jest przykªad klasy:
class wizytowka {
public:
char *nazw; char *imie; char *tel;
};
Zadeklarowa¢ i zdeniowa¢:
(a) konstruktor inicjalizuj¡cy (domniemany),
(b) konstruktor kopiuj¡cy,
(c) operator przypisania = umo»liwiaj¡cy skopio-
wanie zawarto±ci obiektu,
(d) destruktor.
Zdeniowa¢ obiekty i napisa¢ przykªadowe wywoªa-
nia funkcji.
3. Dla nast¦puj¡cej struktury:
class Macierz2D {
static int pamiec;
int (*T)[n][m];
};
Zrealizowa¢ nast¦puj¡ce ¢wiczenia:
(a) zdeniowa¢ konstruktor domniemany,
(b) przeªadowa¢ operator - w wersji jednoargu-
mentowej oraz dwuargumentowej,
(c) przeªadowa¢ operator preinkrementacji oraz
postinkrementacji,
(d) przeªadowa¢ operatory new i delete, tak aby
prowadzi¢ statystyk¦ zu»ywanej pami¦ci.
4. Przeanalizowa¢ poni»szy fragment kodu
#include<iostream.h>
class samochod {
int filtr_powietrza;
public:
int akumulator, zbiornik_paliwa;
//...
};
samochod A,B;
int *wsk1;
int samochod::*wsk2=&samochod::akumulator;
void main() {
wsk1 = &(A.akumulator);
cout << *wsk1 << A.*wsk2;
wsk1 = &(B.akumulator);
cout << *wsk1 << B.*wsk2;
//...
}
Oceni¢ poprawno±¢ instrukcji:
(a) wsk1=&(B.zbiornik_paliwa);
(b) wsk1=&(B.filtr_powietrza);
(c) wsk2=samochod::filtr_powietrza;
(d) wsk2++;
(e) wsk1++;
5. Okre±li¢ poprawno±¢ nast¦puj¡cych deklaracji, po-
da¢ równie» przyczyny dla których s¡ poprawne b¡d¹
nie?
(a) f(int i,int j,int k=0); f(int i,int j);
(b) f(int i,char j); f(int j);
(c) f(const int k); f(int k);
(d) f(const int &k); f(int &k);
6. Okre±lony zostaª zal¡»ek nast¦puj¡cej klasy wektor
zdeniowana jako
class wektor{
int x,y,z;
public:
// ... pozostaªy interfejs
};
Doda¢ implementacj¦ nast¦puj¡cych elementów:
(a) konstruktor domniemany,
(b) konstruktor inicjuj¡cy z list¡ inicjalizacyjn¡,
(c) skªadowe funkcje operatorowe +, , * umo»-
liwiaj¡ce dodawanie, odejmowanie i mno»enie
wektorów,
(d) funkcje z punktu (c) w wersji globalnej.
7. Dla klasy string:
class string {
int roz;
char *wsk;
public:
//...metody
};
Dokona¢ implementacji:
(a) nast¦puj¡cych konstruktorów: standardowy (z
list¡ inicjalizacyjn¡), domniemany i kopiuj¡cy,
(b) metody: zwracaj¡ce rozmiar ªa«cucha, skleja-
j¡ce dwa ªa«cuchy w jeden, odwracaj¡ce kolej-
no±¢ liter w ªa«cuchu i porównuj¡c¡ zawarto±¢
dwóch ªa«cuchów,
(c) destruktor,
(d) funkcje operatorowe , oraz =.
Czy poni»sze denicje konstruktorów s¡ poprawne?
Odpowied¹ uzasadni¢.
(a) string::string(char t[]) :
wsk(new char[roz+1]),
roz(strlen(t))
{
strcpy(wsk,t);
}
(b) string::string(string);
8. Niech b¦dzie dana klasa macierz zdeniowana nast¦-
puj¡co :
class macierz{
int liczba_wierszy, liczba_kolumn;
public:
float *tablica;
...
};
Zdeniowa¢:
(a) konstruktory inicjuj¡cy (domniemany) i kopiu-
j¡cy,
(b) skªadowe funkcje operatorowe +, -, *,
umo»liwiaj¡ce dodawanie, odejmowanie i mno-
»enie macierzy,
(c) funkcje +, -, * realizuj¡ce przemienne
dodawanie, odejmowanie i mno»enie macierzy
przez skalar,
(d) operator przypisania = umo»liwiaj¡cy skopio-
wanie macierzy,
(e) funkcj¦ skªadow¡ obliczaj¡c¡ wyznacznik ma-
cierzy kwadratowej,
(f) destruktor.
9. Stosuj¡c wska¹niki do skªadowych klasy posortowa¢
50 elementow¡ wygenerowan¡ losowo tablic¦ obiek-
tów z ¢wiczenia 2 wedªug zadanego pola (do porów-
nania ªa«cuchów znaków mo»na zastosowa¢ funkcj¦
strcmp z pakietu string.h).
10. Zaprojektowa¢ specjalny wska¹nik do warto±ci typu
caªkowitego, który b¦dzie zapami¦tywaª 10 ostatnio
wskazywanych przez niego adresów oraz 20 adresów
ostatnio utworzonych egzemplarzy takiego wska¹ni-
ka. Nast¦pnie przeªadowa¢ operatory inkrementacji
i dekrementacji dla tej klasy obiektów.