Projekty zaliczeniowe z obiektówki

Transkrypt

Projekty zaliczeniowe z obiektówki
Projekty zaliczeniowe z obiektówki
25 maja 2012
1
Przykład klas:
Wiedząc, że deklarowanie typu rekordowego w języku C/ C++ wygląda następująco:
#include <cstdlib>
#include <iostream>
#include <stdlib.h>
#define PI 3.14
using namespace std;
class Kwadrat
//Klasa Kwadrat
{
public:
Kwadrat();
Kwadrat( float bok );
void wypiszPowierzchnie();
private:
float zmienna_bok;
};
Kwadrat::Kwadrat() : zmienna_bok(0)
//Konstruktory dla kwadratu
{
}
Kwadrat::Kwadrat(float bok) : zmienna_bok(bok)
{
}
void Kwadrat::wypiszPowierzchnie()
{
1
cout << "\nPole kwadratu o boku " << zmienna_bok << " wynosi: "
<< zmienna_bok * zmienna_bok << endl;
cout << "Natomiast obwod wynosi: " << 4 * zmienna_bok << endl;
cout << endl;
}
/********************************************/
//Klasa Prostokat
class Prostokat
{
public:
Prostokat();
Prostokat( float bok_1, float bok_2 );
void wypiszPowierzchnie();
private:
float zmienna_bok_1;
float zmienna_bok_2;
};
Prostokat::Prostokat() : zmienna_bok_1(0), zmienna_bok_2(0)
//Konstruktory dla prostokata
{
}
Prostokat::Prostokat(float bok_1, float bok_2) : zmienna_bok_1(bok_1),
zmienna_bok_2(bok_2)
{
}
void Prostokat::wypiszPowierzchnie()
{
cout << "\nPole Prostokata o bokach " << zmienna_bok_1 << ", "
<< zmienna_bok_2<< " wynosi: " << zmienna_bok_1 * zmienna_bok_2 << endl;
cout << "Natomiast Obwod wynosi: "
<< ( 2 * zmienna_bok_1 ) + ( 2 * zmienna_bok_2 ) << endl;
cout << endl;
}
/********************************************/
//Klasa Kolo
class Kolo
{
public:
2
Kolo();
Kolo( float promien);
void wypiszPowierzchnie();
private:
float zmienna_promien;
};
Kolo::Kolo() : zmienna_promien(0)
//Konstruktory dla kola
{
}
Kolo::Kolo(float promien) : zmienna_promien(promien)
{
}
void Kolo::wypiszPowierzchnie()
{
cout << "\nPole kola o promieniu " << zmienna_promien << " wynosi: "
<< PI * zmienna_promien * zmienna_promien << endl;
cout << "Natomiast Obwod wynosi: " << 2 * PI * zmienna_promien << endl;
cout << endl;
}
/********************************************/
void
void
void
void
void
wyswietl_menu();
czysc_bufor();
oblicz_kwadrat();
oblicz_prostokat();
oblicz_kolo();
int main()
{
char klawisz;
do
{
wyswietl_menu();
cin >> klawisz;
switch( klawisz )
{
3
case ’1’ : oblicz_kwadrat();
break;
case ’2’ : oblicz_prostokat();
break;
case ’3’ : oblicz_kolo();
break;
default : if( klawisz != ’q’ )
putchar( ’\a’ );
break;
}
}
while ( klawisz != ’q’ );
return EXIT_SUCCESS;
}
/*******************************************/
//Funkcja wyswietl menu
void wyswietl_menu()
{
system("cls");
cout
cout
cout
cout
<<
<<
<<
<<
"Obliczam parametry figur plaskich..." << endl;
endl;
"1. Kwadrat \n2. Prostokat \n3. Kolo";
"\n\nWybierz numer figury lub (q)uit aby zakonczyc: ";
}
/*******************************************/
void oblicz_kwadrat()
//Funkcja oblicz dla kwadratu
{
system("cls");
float bok;
cout << "Obliczenia dla kwadratu" << endl;
cout << "Podaj dlugosc boku: "; cin >> bok;
Kwadrat kwadratura(bok);
kwadratura.wypiszPowierzchnie();
system("PAUSE");
}
/*******************************************/
void oblicz_prostokat()
//Funkcja oblicz dla kwadratu
{
4
system("cls");
float bok_1, bok_2;
cout << "Obliczenia dla prostokata" << endl;
cout << "Podaj dlugosc pierwszego boku: "; cin >> bok_1;
cout << "Podaj dlugosc drugiego boku: "; cin >> bok_2;
Prostokat Prostokatowanie(bok_1, bok_2);
Prostokatowanie.wypiszPowierzchnie();
system("PAUSE");
}
/*******************************************/
//Funkcja oblicz dla kola
void oblicz_kolo()
{
system("cls");
float promien;
cout << "Obliczenia dla kola" << endl;
cout << "Podaj promien kola: "; cin >> promien;
Kolo Kolowanie(promien);
Kolowanie.wypiszPowierzchnie();
system("PAUSE");
}
/*******************************************/
2
Zadanie do samodzielnego wykonania
Zbuduj hierarchię klas dla pojęć i obiektów określonych w jednym z poniższych
punktów. Należy zidentyfikować odpowiednie klasy, określić, które klasy są pochodnymi, jaka jest nadrzędna klasa w hierarchii.
Dla każdej klasy zaproponuj przykładowe pola (oraz funkcje składowe) oraz
zdefiniuj:
• konstruktor domyślny,
• konstruktor ogólny,
• konstruktor rzutujący,
• przeciążony operator przypisania.
5
W każdej klasie powinna znaleźć się również funkcja putClassN ame wyprowadzająca do strumienia cout nazwę klasy. Uwaga, należy zbudować hierarchię klas
tak, by odwołanie:
$Klasa\_bazowa * p$;
$p = \and jakiś\_obiekt\_klasy\_pochodnej;$
p->putClassName();
spowodowało wyprowadzenie do cout nazwy klasy obiektu wskazywanego przez
p, a nie nazwę klasy Klasa bazowa. Projekt na być oddany w wersji papierowej,
ma zwierać wydruk hierarchii klas oraz prostego programu pokazującego sposób
ich wykorzystania. Do projektu powinien zostać dołączony kod źródłowy (powinien
się zmieścić na dyskietce). Uwaga: w niektórych przypadkach może występować
dziedziczenie wielobazowe. Lista dziedzin, dla których należy zaprojektować
odpowiednią hierarchię klas:
1. Rower, hulajnoga, motorower, motocykl, samochód, ciężarówka, autobus.
2. Mucha, ptak, lotnia, śmigłowiec, samolot, bombowiec, samolot pasażerski.
3. Muzyka klasyczna, jazz, jazz nowoczesny, jazz nowoorleański, rock, heavy
metal, punk rock, pop, techno, drum’n’bass.
4. Woda mineralna gazowana, niegazowana, piwo, piwo ciemne, piwo jasne,
sok, napój gazowany i niegazowany, wino, szampan, żubrówka.
5. Silnik spalinowy, silnik elektryczny, silnik czterosuwowy, silnik dwusuwowy, silnik Wankla, silnik hybrydowy.
6. Narta zjazdowa, narta slalomowa, narta gigantowa, narta biegowa, narta
do skoków, narta wodna.
7. Zwierze mięsożerne, nie mięsożerne, ssak, ryba, owad, wieloryb, łosoś,
mrówka, lew, jeleń.
8. Pracownik etatowy, pracownik kontraktowy, osoba współpracująca, pełnoetatowiec, półetatowiec.
9. Komputer PC, stacja robocza, komputer przenośny, palmtop, superkomputer, serwer sieciowy.
10. Łódka rybacka, kuter rybacki, łódź podwodna, ścigacz, prom, kuter torpedowy, pancernik.
11. Proza, poezja, epika, liryka, felieton, reportaż, fraszka, opowiadanie, powieść.
12. Rower górski, rower dowhhill, rower enduro, rower trekkingowy, rower
szosowy, rower crossowy.
13. Lekkoatleta, piłkarz, kolarz, koszykarz, biegacz, dyskobol, oszczepnik, zapaśnik, karateka.
6
14. Młotek, wiertarka, pilarka, kleszcze, śrubokręt, pilnik, piła, pędzel, szpachla, kielnia.
7