Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Programowanie obiektowe

Podobne prezentacje


Prezentacja na temat: "Programowanie obiektowe"— Zapis prezentacji:

1 Programowanie obiektowe
PO Programowanie obiektowe PO - LAB 3 Wojciech Pieprzyca

2 Funkcje zaprzyjaźnione (I)
PO Funkcje zaprzyjaźnione (I) Funkcja zaprzyjaźniona z klasą to funkcja, która ma dostęp do wszystkich składników klasy pomimo tego, że sama nie jest metodą tej klasy. class punkt { friend void stan(punkt &p); private: int x,y; }; void stan(punkt &p) cout << ”Wsp. X: ” << p.x << endl; cout << ”Wsp. Y: ” << p.y << endl; } Funkcja stan ma dostęp do prywatnych składowych x i y klasy punkt.

3 Funkcje zaprzyjaźnione (II)
PO Funkcje zaprzyjaźnione (II) Funkcji zaprzyjaźnionych używa się zwykle wtedy, gdy utworzenie jej jako metody klasy jest utrudnione lub też gdy chcemy mieć dostęp do składowych kilku klas jednocześnie. Oprócz funkcji zaprzyjaźnionych globalnie, klasa może także deklarować przyjaźń z inną klasą lub z konkretną metodą klasy. Przykładem może być funkcja mnożąca dwie macierze, która musi mieć jednocześnie dostęp do dwóch obiektów klasy macierz. class macierz { friend macierz mnoz(Macierz a, Macierz b) private: int el[5][5]; }; macierz mnoz(Macierz a, Macierz b) …… }

4 Funkcje zaprzyjaźnione (III)
PO Funkcje zaprzyjaźnione (III) Przykład 2: class prostokat; //zapowiedz pozniejszej definicji klasy prostokat class kwadrat { private: int a; public: kwadrat(int _a); friend int pole(kwadrat k, prostokat p); }; class prostokat int a,b; prostokat(int _a, int _b);

5 Funkcje zaprzyjaźnione (IV)
PO Funkcje zaprzyjaźnione (IV) //konstruktor dla klasy kwadrat kwadrat::kwadrat(int _a) { a = _a; } //konstruktor dla klasy prostokat prostokat::prostokat(int _a, int _b) b = _b;

6 Funkcje zaprzyjaźnione (V)
PO Funkcje zaprzyjaźnione (V) //fukcja pole ma dostęp do składowych zarówno klasy kwadrat //jak i klasy prostokat int pole(kwadrat k, prostokat p) { int pk=0, pp=0; pk = k.a*k.a; pp = p.a*p.b; cout << ”Pole kwadratu: ” << pk << endl; cout << ”Pole prostokata: ” << pp << endl; } int main() kwadrat k(3); prostokat p(3,4); pole(k,p);

7 Funkcje wirtualne (I) PO
Funkcja wirtualna pozwala w klasach pochodnych zastępować implementację metod dostarczonych przez klasę bazową. W tym celu najczęściej wykorzystuje się zmienną wskaźnikową, która może wskazywać na obiekty klasy bazowej i obiekty klas pochodnych. W przypadku istnienia kilku metod zastępczych w różnych klasach pochodnych, to która metoda zostanie uruchomiona jest uzależnione od typu obiektu na jaki aktualnie wskazuje zmienna wskaźnikowa. W podanym przykładzie pojawią się 4 definicje metody pole, której zadaniem będzie obliczanie pola odpowiedniej figury. Klasa figura jest tutaj klasą bazową dla 3 klas pochodnych: prostokat, trojkat, romb. figura prostokat trojkat romb

8 Funkcje wirtualne (II)
PO Funkcje wirtualne (II) //klasa bazowa – figura class figura { public: float a,b; figura(int _a, int _b); virtual void pole() cout << ”Nie zdefiniowana funkcja obliczajaca pole”; } }; //klasa pochodna – prostokat class prostokat : public figura prostokat(int a, int b):figura(a,b) {} cout << ”Pole prostokata: ”<< a*b << endl;

9 Funkcje wirtualne (III)
PO Funkcje wirtualne (III) //klasa pochodna - trojkat class trojkat : public figura { public: trojkat(int a, int b):figura(a,b) {} virtual void pole() cout << ”Pole trojkat: ” << 0.5*a*b << endl; } }; //klasa pochodna – romb class romb : public figura romb(int a, int b):figura(a,b) {} //konstruktor klasy figura figura::figura(int _a, int _b) { a = _a; b = _b; }

10 Funkcje wirtualne (IV)
PO Funkcje wirtualne (IV) int main() { //zmienna wskaźnikowa, która może wskazywać zarówno na obiekty //klasy bazowej - figura, jak i obiekty klas pochodnych - prostokat, trojkat, romb figura *wsk = 0; prostokat p(4,2); trojkat t(3,4); romb r(2,3); //na początku wskaźnik pokazuje na obiekt typu prostokąt, //wywołana zostanie metoda pole z klasy prostokąt wsk = &p; wsk->pole(); //teraz wskaźnik pokazuje na obiekt typu trójkąt //wywołana zostanie metoda pole z klasy trójkąt wsk = &t; //zmiana - wskaźnik pokazuje na obiekt typu romb //wywołana zostanie metoda pole z klasy romb wsk = &r; }


Pobierz ppt "Programowanie obiektowe"

Podobne prezentacje


Reklamy Google