Osoba Student Będziemy mieli 2 klasy: Osoba, dla której zapamiętamy dane takie jak: imie, nazwisko i wiek Oraz klasę Student, w której będziemy też dodatkowo pamiętać kierunek studiów. Deklaracja klasy Osoba: Class Osoba public: Osoba(); Osoba( string i, string n, int w ); Osoba( Osoba & innaosoba ); void wypiszdaneosobowe(); void setimie( string i ); void setnazwisko( string n ); void setwiek( int w ); // Akcesory string getimie() const; string getnazwisko() const; int getwiek() const; private: string i; string n;int w; ; Deklaracja klasy Student: class Student
public: Student(); Student( string kierunek_studiow ); Student( const Osoba & o, string kierunek_studiow); void wypiszdaneosobowe(); // Modyfikatory void setimie( string im ); void setnazwisko( string nazw ); void setwiek( int wi ); // Akcesory string getimie() const; string getnazwisko() const; int getwiek() const; // Realizator private: string im, nazw; int wi; string kierunek_studiow; ; Stosując zasadę hermetyzacji ukrywamy dane w części prywatnej i zapewniamy dostęp poprzez metody dostępowe (interfejsowe). Funkcje publiczne klasy można nieformalnie podzielić na; akcesory funkcje umożliwiające pobieranie wartości pol, akcesorem jest np. metoda getimie. modyfikatory funkcje dokonujące modyfikacji wartości pol, modyfikatorem jest np. metoda setimie.
realizatory funkcje realizujące właściwe dla danej klasy usługi, realizatorem jest np. metoda wypiszdaneosobowe. Obiekt klasy Osoba od strony programisty-użytkownika Osoba o1; Deklaracja obiektu o1 klasy Osoba: O1.setImie( Agnieszka ); Ustalenie imienia jako Agnieszka Sekcje private i public Dwie podstawowe sekcje: private elementy zadeklarowane w tej sekcji mogą być wykorzystywane wyłącznie przez funkcje składowe danej klasy. Elementami tymi mogą być zarówno pola i funkcje. Mowi się o nich, że są prywatne. public elementy zadeklarowane w tej sekcji są dostępne rownież dla innych elementow programu. Mowi się o nich, że są publiczne lub stanowią interfejs klasy. Definicja funkcji składowych Osoba::Osoba() : i("stefek"),n("burczymucha"), w(100) //Konstruktory dlaosoby Osoba::Osoba(string i, string n, int w) : w(w), i(i), n(n) Osoba::Osoba( Osoba & innaosoba ) : i (innaosoba.i), n(innaosoba.n), w(innaosoba.w)
void Osoba::wypiszDaneOsobowe() cout << "\nimie osoby " << Osoba::getImie() << "\nnazwisko " << Osoba::getNazwisko() << endl; cout << "\nosoba ma lat "<< Osoba::getWiek() << endl; void Osoba::setImie( string im ) Osoba::i = im; void Osoba::setNazwisko( string nazw ) Osoba::n = nazw; // Akcesory string Osoba::getImie() const return i; string Osoba::getNazwisko() const return n; void Osoba::setWiek( int w ) Osoba::w = w; int Osoba::getWiek() const return w; Teraz to samo dla klasy Student: Student::Student() : kierunek_studiow("") //Konstruktory dla Studenta Student::Student(string kierunek_studiow(kierunek_studiow) kierunek_studiow): Student::Student( const Osoba & o, string kierunek_studiow): im( o.getimie() ), nazw (o.getnazwisko()), wi(o.getwiek()),kierunek_studiow (kierunek_studiow) void Student::setImie( string im ) Student::im = im; void Student::setNazwisko( string nazw ) Student::nazw = nazw; void Student::setWiek( int w ) Student::wi = w;
// Akcesory string Student::getImie() const return im; string Student::getNazwisko() const return nazw; int Student::getWiek() const return wi; void Student::wypiszDaneOsobowe() cout << "\nkierunek studiow " << kierunek_studiow << endl; A teraz ciało funkcji main a więc główny program void wyswietl_menu(); void czysc_bufor(); void opisz_osobe(); void opisz_studenta(); int main() char klawisz; //Osoba o1; do wyswietl_menu(); cin >> klawisz; switch( klawisz ) case '1' : opisz_osobe(); break; case '2' : opisz_studenta(); break; default : if( klawisz!= 'q' ) cout<< '\a'; break; while ( klawisz!= 'q' ); return EXIT_SUCCESS;
/*******************************************/ //Funkcja wyswietl menu void wyswietl_menu() system("cls"); cout << "Opisy..." << endl; cout << endl; cout << "1. osoba \n2. student"; cout << "\n\nwybierz numer lub (q)uit aby zakonczyc: "; /*******************************************/ void opisz_osobe() system("cls"); string imie, nazwisko; int wiek; cout << "Opisy dla osoby" << endl; cout << "Podaj imie: "; cin >> imie; cout << "Podaj nazwisko: "; cin >> nazwisko; cout << "Podaj wiek: "; cin >> wiek; Osoba o1; o1.setimie(imie); o1.setnazwisko(nazwisko); o1.setwiek(wiek); o1.wypiszdaneosobowe(); system("pause"); /*******************************************/ void opisz_studenta() system("cls");
string imie, nazwisko; int wiek; string kierunek_studiow; cout << "kierunek studiow" << endl; cout << "Podaj kierunek "; cin >> kierunek_studiow; Osoba o2; Student s1(o2,kierunek_studiow); o2.wypiszdaneosobowe(); s1.wypiszdaneosobowe(); system("pause"); /*******************************************/ Jak zainicjować obiekt na etapie jego definiowania? Konstruktor jest specjalną funkcją, aktywowaną przez kompilator automatycznie w momencie gdy obiekt jest tworzony. Dzieje się tak zanim programista będzie mogł dorwać obiekt. Konstruktor ma przygotować obiekt do życia. Konstruktor to specyficzna funkcja. Konstruktor nie ma typu rezultatu, nosi taką nazwę jak nazwa klasy i zwykle nie wywołuje się go jawnie w kodzie programu. Rodzaje konstruktorów Występują cztery rodzaje konstruktorów: Konstruktor domyślny (ang. default constructor) aktywowany, gdy tworzony jest obiekt bez jawnie określonych danych inicjalizujących. Konstruktor ogólny (ang. general constructor), zwany też parametrowym, aktywowany gdy tworzymy obiekt z jawnie określonymi danymi inicjalizującymi.
Konstruktor kopiujący (ang. copy constructor) aktywowany wtedy, gdy tworzymy obiekt, inicjalizując go danymi z innego obiektu tej samej klasy. Operator & oznacza referencję, umieszczony w deklaracji parametru oznacza przekazanie przez zmienną. Konstruktor rzutujący (ang. cast constructor) aktywowany wtedy, gdy tworzymy obiekt, inicjalizując go danymi z obiektu innej klasy. Przykład konstruktora domyślnego: Osoba o1; Przykład konstruktora ogólnego: Osoba o0 ("Ala","Nowak", 33); Przykład konstruktora kopiującego: Osoba o2; Osoba o3(o2); Przykład konstruktora rzutującego: Osoba o2; Student s1(o2,kierunek_studiow); Metody ze specyfikacją const nie mogą modyfikować pól obiektu, mogą zatem być wywoływane dla obiektów stałych string getimie() const; string getnazwisko() const; int getwiek() const;