background image

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 

background image

Program laboratorium przedstawia si

ę

 nast

ę

puj

ą

co:  

Lab

Instrukcja 

Temat Laboratorium 

Test 

Wst

ę

p. Uruchomienie prostej aplikacji terminalowej

 

 

Prosta aplikacja terminalowa. Formatowanie 
obiektowego wej

ś

cia i wyj

ś

cia 

Propozycje programów semestralnych 

Podstawy C,  
Wska

ź

niki i struktury 

 

Definicja prostej klasy (punkt, prostok

ą

t, zesp, itp). 

Obserwacja konstruktorów i destruktorów

 

 

Aplikacja dialogowa – budowa interfejsu u

ż

ytkownika 

+ przydział tematów semestralnych

 

Podstawy C++

 

Rozbudowa aplikacji dialogowej – programowanie 
obsługi wybranych kontrolek

 

 

Klasa z alokacj

ą

 pami

ę

ci – definiowanie 

konstruktorów, destruktora i operatora przypisania

 

Klasy i ich metody

 

Przeci

ąż

anie operatorów. Definiowanie klas 

pochodnych, dziedziczenie proste i wielobazowe

 

 

(kontynuacja 

ć

wiczenia 7)

 

Klasy pochodne, 
Diedziczenie, 
Polimorfizm

 

Funkcje wirtualne, klasy abstrakcyjne

 

 

10 

Aplikacja dialogowa

 

 

11 

Aplikacja SDI

 

Windows (zdarzenia, 
aplikacje dialogowe i SDI) 

 

12 

Aplikacja SDI (cd.)

 

 

13 

Program semestralny

 

UML, Wyj

ą

tki

 

14 

Program semestralny (c.d.)

 

 

15 

Program semestralny (c.d.) i wpisy

 

 

 

background image

Ć

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. 

background image

Ć

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 

background image

(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

ę

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. 

  
 

 

background image

Ć

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). 

background image

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.