Jerzy Kisielewicz
Jakub Gładysz
Karol Puchała
Instrukcja nr 2 do Laboratorium
z Programowania Obiektowego
Zaj
ę
cia 6-9 Tydzie
ń
INEW002L
Semestr 2
Kierunek:
Informatyka (INF)
Teleinformatyka (TIN)
Studium Kształcenia Podstawowego (SKP)
Wrocław 2009
Program laboratorium przedstawia si
ę
nast
ę
puj
ą
co:
Lab
.
Instrukcja
Temat Laboratorium
Test
1
1
Wst
ę
p. Uruchomienie prostej aplikacji terminalowej
2
1
Prosta aplikacja terminalowa. Formatowanie
obiektowego wej
ś
cia i wyj
ś
cia
Propozycje programów semestralnych
Podstawy C,
Wska
ź
niki i struktury
3
1
Definicja prostej klasy (punkt, prostok
ą
t, zesp, itp).
Obserwacja konstruktorów i destruktorów
4
1
Aplikacja dialogowa – budowa interfejsu u
ż
ytkownika
+ przydział tematów semestralnych
Podstawy C++
5
1
Rozbudowa aplikacji dialogowej – programowanie
obsługi wybranych kontrolek
6
2
Klasa z alokacj
ą
pami
ę
ci – definiowanie
konstruktorów, destruktora i operatora przypisania
Klasy i ich metody
7
2
Przeci
ąż
anie operatorów. Definiowanie klas
pochodnych, dziedziczenie proste i wielobazowe
8
2
(kontynuacja
ć
wiczenia 7)
Klasy pochodne,
Diedziczenie,
Polimorfizm
9
2
Funkcje wirtualne, klasy abstrakcyjne
10
3
Aplikacja dialogowa
11
3
Aplikacja SDI
Windows (zdarzenia,
aplikacje dialogowe i SDI)
12
3
Aplikacja SDI (cd.)
13
4
Program semestralny
UML, Wyj
ą
tki
14
4
Program semestralny (c.d.)
15
4
Program semestralny (c.d.) i wpisy
Ć
wiczenie 6. Klasa z alokacj
ą
pami
ę
ci – definiowanie
konstruktorów, destruktora i operatora przypisania.
Zadania laboratoryjne (czas realizacji: 1 tydzie
ń
)
Zdefiniowa
ć
klas
ę
wektorów zawieraj
ą
c
ą
nast
ę
puj
ą
ce dane:
class Vec{
char Naz[4];
int n;
double *A;
static int p;
static double x;
gdzie:
Naz jest maksymalnie 3 znakow
ą
nazw
ą
wektora,
n jest rozmiarem wektora (liczb
ą
elementów tablicy wskazywanej przez A,
A wskazuje na pocz
ą
tkowy element n elementowej tablicy skojarzonej z obiektem,
p jest precyzj
ą
wydruku warto
ś
ci elementów tablicy A,
x jest zmienn
ą
pomocnicz
ą
(do której np. mo
ż
na si
ę
odwoła
ć
przy braku tablicy A).
Oprogramowa
ć
t
ę
klas
ę
. Przyj
ąć
zasad
ę
,
ż
e je
ś
li operatory wymagaj
ą
zgodno
ś
ci
rozmiarów swoich argumentów (wektorów), brakuj
ą
ce elementy wektora o mniejszym
rozmiarze s
ą
zerowe. Mi
ę
dzy innymi zdefiniowa
ć
operatory dodawania, odejmowania
i mno
ż
enia wektorów, zaprzyja
ź
nione operatory wej
ś
cia i wyj
ś
cia, operator indeksacji
i jednej konwersji skalarnej. Zdefiniowa
ć
Odpowiedni zestaw konstruktorów,
destruktor i operator przypisania. Niech w celach testowych konstruktory i destruktor
informuj
ą
o swoim działaniu.
Dane powinny by
ć
wczytywane
1
z pliku wybieranego przez u
ż
ytkownika. Wyniki
mog
ą
by
ć
wy
ś
wietlane w odpowiedniej kontrolce lub zapisywane do pliku.
1
Należy użyć obiektów używając obiektów klasy CFile , CArchive lub obiektów klas ifstream,
ofstream lub fstream.
Ć
wiczenie 7 i 8 Przeci
ąż
anie operatorów. Definiowanie klas
pochodnych, dziedziczenie proste i wielobazowe .
Zadania laboratoryjne (czas realizacji: 2 tygodnie)
Zadanie 1
Celem
ć
wiczenia jest poznanie zasad definiowania klas pochodnych, dziedziczenie
proste, dziedziczenie wielobazowe oraz przeci
ąż
anie operatorów.
Zdefiniowa
ć
klas
ę
macierzy bazuj
ą
c
ą
na klasie wektor z poprzedniego zadania i
oprogramowa
ć
j
ą
:
class Mac: public Vec {
int N, M;
// liczba wierszy i liczba kolumn
. . .
};
Nale
ż
y przyj
ąć
zało
ż
enie,
ż
e elementy macierzy s
ą
pami
ę
tane wierszami w prostej
tablicy o rozmiarze n=N*M wskazywanej przez A.
W klasie macierzy zdefiniowa
ć
wymagane konstruktory i operatory, Podobnie jak w
klasie wektorów, aby uzyska
ć
zgodno
ść
wymiarów macierzy (np. w operacji
mno
ż
enia), nale
ż
y zało
ż
y
ć
,
ż
e brakuj
ą
ce kolumny lub brakuj
ą
ce wiersze s
ą
zerowe.
Indeks elementu z i-tego wiersza oraz j-tej kolumny wyra
ż
a si
ę
wzorem k=i*M+j (lub
k=(i-1)*M +j–1, gdy numeracja wierszy i kolumn zaczyna si
ę
od jedno
ś
ci).
Nie definiowa
ć
dla klasy macierzy operatorów wej
ś
cia i wyj
ś
cia, lecz wykorzysta
ć
istniej
ą
ce operatory zdefiniowane dla klasy wektorów. W tym celu nale
ż
y w obu
klasach zdefiniowa
ć
funkcje wirtualne, które b
ę
d
ą
realizowa
ć
te fragmenty operacji
we/wy, które s
ą
indywidualne w tych klasach. Np. w operacji wej
ś
cia indywidualne
b
ę
d
ą
zaproszenia do podania warto
ś
ci elementu wektora lub tablicy, natomiast
wprowadzone warto
ś
ci s
ą
w obu przypadkach wpisywane kolejno do tablicy A.
W miar
ę
mo
ż
liwo
ś
ci u
ż
y
ć
funkcji wirtualnych w innych przypadkach. Na przykład
definiuj
ą
c wirtualn
ą
funkcj
ę
, która zmieni rozmiar wektora lub wiersza macierzy
(dopisuj
ą
c zera lub usuwaj
ą
c ostatnie elementy), mo
ż
na ujednolici
ć
operatory
dodawania i mno
ż
enia w obu klasach.
Program winien umo
ż
liwia
ć
wprowadzanie oraz wyprowadzanie danych, dodawanie,
odejmowanie, mno
ż
enie macierzy, mno
ż
enie macierzy przez liczb
ę
, wyznaczy
ć
i
wypisa
ć
indeks najmniejszego oraz najwi
ę
kszego elementu w poszczególnym
wierszu. Nale
ż
y pami
ę
ta
ć
aby konstruktory alokowały wymagane obszary pami
ę
ci
oraz zadba
ć
o dobr
ą
hermetyzacj
ę
klas – aby u
ż
ytkownik miał jak najmniejszy dost
ę
p
do wn
ę
trza obiektów.
Zadanie 2
Bazuj
ą
c na Zadaniu 1 napisa
ć
program który:
wczyta liczb
ę
wierszy i liczb
ę
kolumn macierzy A,
zaalokuje pami
ęć
na t
ę
macierz i nast
ę
pnie wczyta jej elementy,
zaalokuje tablic
ę
na wektor B o tylu elementach, ile jest kolumn w macierzy i wczyta
elementy tego wektora,
zaalokuje tablic
ę
na wektor C o tylu elementach, ile jest wierszy w macierzy, a
nast
ę
pnie obliczy elementy wektora C, c
i
=a
i1
b
1
+a
i2
b
2
+...+a
im
b
m
(i=1,2,...,n), czyli
obliczy iloczyn C=AB,
wyprowadzi wczytane dane i obliczone wyniki.
Ć
wiczenie 9. Funkcje wirtualne, klasy abstrakcyjne.
Zadania laboratoryjne (czas realizacji: 1 tydzie
ń
)
Przygotuj klas
ę
Figura, która b
ę
dzie klas
ą
abstrakcyjn
ą
posiadaj
ą
c
ą
nast
ę
puj
ą
ce składniki:
· dane składowe protected:
nazwa (string),
P1(współrz
ę
dne x1, y1),
P2(współrz
ę
dne x2, y2),
P3(współrz
ę
dne x3, y3),
P4 (współrz
ę
dne x4, y4),
kolor
· publiczn
ą
funkcj
ę
składow
ą
: przedstaw_si
ę
(wypisuje nazw
ę
figura),
· wirtualne funkcje składowe Obwód o Pole
· odpowiednie konstruktor
Klasa Figura jest klas
ą
podstawow
ą
dla klas: Kwadrat, Prostok
ą
t, Romb, Czworok
ą
t.
Zdefiniuj ka
ż
d
ą
z klas pochodnych dodaj
ą
c niezb
ę
dne dane składowe opisuj
ą
ce
dan
ą
figur
ę
(np. promie
ń
, itd.). W ka
ż
dym przypadku zdefiniuj odpowiednio funkcje Obwód
oraz Pole. Ka
ż
da z klas musi mie
ć
zdefiniowany swój konstruktor otrzymuj
ą
cy
parametry inicjalizuj
ą
ce figur
ę
.
Przygotuj funkcj
ę
PokazFigure, której argumentem jest wska
ź
nik na obiekt typu
Figura. Funkcja powinna wywoływa
ć
funkcj
ę
składow
ą
Przedstaw_sie oraz
dodatkowo wypisywa
ć
informacj
ę
o polu oraz obwodzie figury.
W programie głównym stwórz obiekty typu Kwadrat, Prostok
ą
t, Romb, Czworok
ą
t.
Wywołaj funkcj
ę
PokazFigure przekazuj
ą
c do niej wska
ź
nik do utworzonych
obiektów.
Zmodyfikuj program tak, aby rysował figury na ekranie (
ś
rodowisko MFC).
Napisz program tak aby była mo
ż
liwo
ść
zmiany poło
ż
enia wierzchołków. Program
powinien sam okre
ś
li
ć
czy dana figura jest prostok
ą
tem, rombem, kwadratem czy
innym dowolnym czworok
ą
tem.