Laboratorium 10, 19.12.2012 Należy utworzyć klasy, których obiekty

Transkrypt

Laboratorium 10, 19.12.2012 Należy utworzyć klasy, których obiekty
Laboratorium 10, 19.12.2012
Należy utworzyć klasy, których obiekty będą reprezentować rożne rodzaje figur: trójkąt
równoboczny, kwadrat oraz okrąg. Należy również utworzyć klasę punkt, przechowującą
współrzędne x, y punktu w układzie współrzędnych. Pola klas powinny być niepubliczne.
Klasa punkt powinna zawierać pola x i y do przechowywania współrzędnych, odpowiednie
konstruktory i metody get.
Klasy trójkąt, kwadrat i okrąg powinny dziedziczyć z abstrakcyjne klasy figura.
Klasa figura powinna zawierać dwa pola: tablicę obiektów klasy punkt (pamięć na tablicę powinna
być przydzielana dynamicznie) i pole przechowujące ilość punktów podawanych dla danej figury.
Klasa kwadrat powinna dodatkowo zawierać pole do przechowywania długości boku, klasa trójkąt
pole do przechowywania długości boku i wysokości trójkąta, klasa okrąg pole do przechowujące
promień.
Klasy powinny zawierać odpowiednie metody get (należy kierować się przy ich pisaniu podaną
niżej funkcją getFiguraInfo(figura &)), odpowiednie funkcję powinny być wirtualne. Klasy
powinny również zawierać potrzebne konstruktory oraz destruktor, jeśli jest potrzebny.
Konstruktory przyjmują tablicę punktów ze współrzędnymi i ilość punktów. Dla trójkąta będzie to
tablica trzech punktów - współrzędne wierzchołków, dla kwadratu tablica czterech punktów współrzędne wierzchołków, dla okręgu tablica dwóch punktów - współrzędna środka okręgu i
dowolnego punktu na obwodzie. W konstruktorach obliczamy wartości pól klasy, np. dla okręgu
wartość promienia.
Plik main.cpp :
void getFiguraInfo(figura &fig) {
cout << fig.getTypFigury() << endl;
// zwraca typ figury, np. “okrag”
cout << "Ilosc puntow: " << fig.getIloscPunktow() << endl;
// zwraca ilosc punktow jaka
podajemy
fig.getWspolrzedne();
// wypisuje wspolrzedne podanych punktow
fig.getInfo();
// wypisuje w zaleznosci od rodzaju figury, dla kola promien, dla trojkata
dlugosc boku i wysokosc, dla kwadratu dlugosc boku
cout << "pole: " << fig.getPole() << endl;
// zwraca pole figury
cout << "obwod: " << fig.getObwod() << endl; // zwraca obwod figury
cout << "_____________________" << endl;
}
int main() {
punkt punkt1(1,0);
punkt punkt2(2,2);
punkt punkt3(5,0);
punkt punkt4(3,2*sqrt(3));
punkt punkt5(1,4);
punkt punkt6(5,4);
punkt tabOkrag[2] = {punkt1, punkt2};
punkt tabTrojkat[3] = {punkt1, punkt3, punkt4};
punkt tabKwadrat[4] = {punkt1, punkt3, punkt5, punkt6};
okrag ok(tabOkrag,2);
getFiguraInfo(ok);
trojkat tr(tabTrojkat,3);
getFiguraInfo(tr);
kwadrat kw(tabKwadrat,4);
getFiguraInfo(kw);
}
return 0;
Przykładowy efekt działania programu:
okrag
Ilosc puntow: 2
Wspolrzedne:
(1 , 0)
(2 , 2)
promien: 2.23607
pole: 15.7
obwod: 14.0425
_____________________
trojkat rownoboczny
Ilosc puntow: 3
Wspolrzedne:
(1 , 0)
(5 , 0)
(3 , 3.4641)
dlugosc boku: 4 wysokosc: 3.4641
pole: 6.9282
obwod: 12
_____________________
kwadrat
Ilosc puntow: 4
Wspolrzedne:
(1 , 0)
(5 , 0)
(1 , 4)
(5 , 4)
dlugosc boku: 4
pole: 16
obwod: 16
_____________________