admin
|
|
« : Maj 03, 2011, 18:13:38 » |
|
Wstêp. Klasyczne programowanie , nazywane programowaniem strukturalnym jest zwi±zane z rozdzieleniem dwóch sk³adowych programu : danych i przetwarzaj±cych je funkcji. Czyli je¿eli stworzymy pewn± strukturê np. o nazwie czolg. Niech struktura czolg posiada pola:amunicja, szybkosc , sila_ognia i zasieg_ognia. To chc±c napisaæ prosta gierkê w której bêd± walczy³y dwa ro¿ne czo³gi. Trzeba zadeklarowaæ dwie struktury np. Leopard i Abrams. Obie struktury posiadaj± tylko dane, tzn. w polach szybkosc Abrams ma np. 10, a Leopard 12. Brak jest funkcji przemieszczaj±cej te czo³gi na ekranie i umo¿liwiaj±cej im walkê z sob±. W programie strukturalnym sterowaniem jazd± ka¿dego czo³gu zajmuje siê oddzielna funkcja, do¶æ ³atwo mo¿na stworzyæ funkcje oddzia³uj±c± na szybkosc. Je¿eli czo³gi bêd± dwa mo¿na napisaæ jedn± funkcjê, do której bed± wczytywane jako zmienne zewnêtrzne parametry jazdy okre¶lonego czo³gu np. polozenie( Abrams.szybkosc). Co jednak bêdzie je¿eli szybko¶æ czo³gu zale¿y równie¿ od jego po³o¿enia na planszy i liczby pocisków. Wtedy mamy dwa rozwi±zania piszemy dwie oddzielne funkcje opisuj±ce ruch dla Abrams'a i Leoparda. I jest ok je¿eli mamy tylko dwa czo³gi (tak wygl±da³y kiedy¶ gry). Ale je¿eli mamy 20 czo³gów po ka¿dej stronie, to liczba funkcji ro¶nie straszliwie. Drugim rozwi±zaniem jest zachowanie jednej funkcji ale wczytuj±cej kilkadziesi±t parametrów opisuj±cych stan czo³gu. Te¿ dla wiêkszej liczby pojazdów robi siê z tego pora¿ka. Najbardziej rzucaj±cym sie w oczy rozwi±zaniem by³oby przypisanie do ka¿dej danej z³o¿onej (struktury) ca³ego zestawu funkcji opisuj±cej dzia³anie na danych tylko w jednej strukturze. I to jest w³a¶nie tworzenie klasy. Klas± jest czolg który posiada dane i funkcje zmieniaj±ce te dane. Obiekty wywodz±ce siê z klasy czolg czyli konkretne czo³gi Abrams i Leopard posiadaj± w³asne podobne ale nie takie same funkcje.
|
|
« Ostatnia zmiana: Maj 18, 2011, 07:18:24 wys³ane przez admin »
|
Zapisane
|
|
|
|
admin
|
|
« Odpowiedz #1 : Maj 03, 2011, 19:24:03 » |
|
Pamiêtaj: Z klasy tworzone s± obiekty. Trzy cechy programowania obiektowego: - Hermetyzacja (kapsu³kowanie) - definiowanie nowego typu danych które zawieraj± pola i metody (funkcje). Klasa to struktura która zawiera dane i funkcje. Klasa czolg zawiera parametry czo³gu i funkcje opisuj±ce jak bêdzie siê zachowywa³ np. funkcjê czolg.przemieszczenie opisuj±ca zmianê po³o¿enia czo³gu na planszy gry.
- Dziedziczenie - je¿eli do definicji nowego obiektu u¿ywamy opisu innego wcze¶niej zdefiniowanego , to ten nowy obiekt bêdzie dziedziczy³ wszystkie cechy (dane i metody) po obiekcie rodzicielskim. Abrams i Leopard posiadaj± dziedziczone z klasy czolg funkcjê przemieszczenie
- Polimorfizm - umo¿liwia zmniejszenie do minimum pracy przy pisaniu kodu. Funkcja która zosta³a wprowadzona do obiektu potomnego posiada tak± sam± nazwê jak funkcja w klasie z której powsta³a ale mo¿e wykonywaæ ró¿ne zadania. Np. przy funkcji przemieszczanie Abrams mo¿e uton±æ w bagnie podczas gdy Leopard bêdzie jecha³.
|
|
« Ostatnia zmiana: Maj 18, 2011, 07:24:27 wys³ane przez admin »
|
Zapisane
|
|
|
|
admin
|
|
« Odpowiedz #2 : Maj 18, 2011, 07:57:41 » |
|
Kontrola dostêpu do elementów klasy Prywatne sk³adowe klasy (private : int a;) s± dostêpne jedynie wewn±trz samej klasy , tj. tylko dla jej w³asnych metod.
Publiczne sk³adowe klasy (public : int wiek;) widoczne s± zawsze i wszêdzie - nie tylko dla samej klasy (jej metod), ale na zewn±trz - np. dla jej obiektów.
Je¿eli nie zadeklarowano sposobu ograniczenia dostêpu do danych, to w przypadku klas (definiowanych poprzez class ) jest to dostêp prywatny, natomiast dla typów strukturalnych (s³ówko struct ) - dostêp publiczny.
Metody czyni± klasy. To dziêki funkcjom sk³adowym pasywne zbiory danych, którymi s± struktury, staj± siê aktywnymi obiektami.
|
|
« Ostatnia zmiana: Maj 18, 2011, 08:24:25 wys³ane przez admin »
|
Zapisane
|
|
|
|
admin
|
|
« Odpowiedz #3 : Maj 18, 2011, 11:29:05 » |
|
Przyk³ad w którym do zmiennych b, c zadeklarowanych jako private i protected nie moga byæ u¿yte w programie g³ównym , czyli poza klas±. Aby program kompilowa³ trzeba wy³±czyæ linijki z odwo³aniem do zmiennych w programie g³ównym.
#include <cstdlib> #include <iostream> using namespace std; class Nowa_klasa { public: int a; protected: int b; private: int c; }; int main(int argc, char *argv[]) {Nowa_klasa obiekt; obiekt.a = 2; //wolno obj.b = 3; //nie wolno obiekt.c = 4; //nie wolno system("PAUSE"); return EXIT_SUCCESS; }
|
|
« Ostatnia zmiana: Maj 18, 2011, 12:08:50 wys³ane przez admin »
|
Zapisane
|
|
|
|
admin
|
|
« Odpowiedz #4 : Maj 18, 2011, 11:36:03 » |
|
Przyk³ad ograniczeñ w dziedziczeniu zmiennych protected i private
#include <cstdlib> #include <iostream>
using namespace std; class Nowa_klasa { public: int a; protected: int b; private: int c; };
class Potomna:public Nowa_klasa { void metoda() { a = 2; // Tak wolno b = 3; //Tak wolno c = 4; //Wyst±pi b³±d - mo¿na odwo³±æ siê tylko w swojej klasie } };
int main(int argc, char *argv[]) { Potomna obiekt; obiekt.a = 5; //Tak wolno obiekt.b = 6; //NIe mo¿na obiekt.c = 7; //Nie mo¿na
system("PAUSE"); return EXIT_SUCCESS; }
|
|
« Ostatnia zmiana: Maj 18, 2011, 11:50:01 wys³ane przez admin »
|
Zapisane
|
|
|
|
admin
|
|
« Odpowiedz #5 : Maj 18, 2011, 11:49:16 » |
|
Przyk³ad 3 Wszystkie zmienne public z klasy pierwsza staj± siê zmiennymi typu private w klasie Potmek i wszystkie zmienne protected z klasy Pierwsza staj± siê zmiennymi typu private w klasie Potomek.
#include <cstdlib> #include <iostream>
class Pierwsza { public: int a; protected: int b; private: int c; };
class Potomek :private Pierwsza { void metoda() { a = 2; //Tak wolno b = 3; //Tak wolno c = 4; //Wyst±pi b³±d } };
class Potomek_potomka:public Potomek { void metoda() { a = 5; //B³ad, a to jest teraz zmienna private klasy Potomek b = 6; //B³ad, b to jest teraz zmienna private klasy Potomek c = 7; //B³ad, ca³y czas private } };
int main(int argc, char *argv[]) { Potomek obiekt; obiekt.a = 5; //Tak nie mo¿na obiekt.b = 6; //NIe mo¿na obiekt.c = 7; //Nie mo¿na
system("PAUSE"); return EXIT_SUCCESS; }
|
|
|
Zapisane
|
|
|
|
admin
|
|
« Odpowiedz #6 : Maj 18, 2011, 12:04:51 » |
|
Wszystkie zmienne public z klasy Pierwsza staj± siê protected w klasach potomek i wszystkie zmienne protected klasy Pierwsza staj± siê protected w klasi Potomek.
#include <cstdlib> #include <iostream> class Pierwsza { public: int a; protected: int b; private: int c; };
class Potomek:protected Pierwsza { void metoda() { a = 2; //Tak wolno b = 3; //Tak wolno c = 4; //Tak nie wolno } };
class Potomek_potomka:public Potomek { void metoda() { a = 5; //Wolno, a jest protected wewn±trz klasy Potomek b = 6; //Wolno, b jest protected w potomek_potomka c = 7; //Wyst±pi b³ad } };
int main(int argc, char *argv[]) { Potomek obiekt; obiekt.a = 5; //Nie mo¿na obiekt.b = 6; //NIe mo¿na obiekt.c = 7; //Nie mo¿na
system("PAUSE"); return EXIT_SUCCESS; }
|
|
|
Zapisane
|
|
|
|
admin
|
|
« Odpowiedz #7 : Maj 25, 2011, 07:44:35 » |
|
1. Czy zaprezentowane poni¿ej fragmenty programu napisane s± poprawnie? Je¶li tak - to co wy¶wietli siê na ekranie, je¶li nie - to gdzie jest b³±d ? a) class mojaklasa {int i; }; main() {mojaklasa test; test.i=100; cout<<test.i; } b) class mojaklasa { public: int funkcja(int a); }; int mojaklasa :: funkcja (int a) { cout<<a; } main() { mojaklasa test; test.funkcja(5); } c) class mojaklasa { public: int x,y; mojaklasa(); }; mojaklasa::mojaklasa() {cout<<"Konstruktor "<<endl; x=10;y=20; } main() {mojaklasa test, test1; cout<<test.x<<","<<test.y; cout<<test1.x<<","<<test1.y; }
|
|
|
Zapisane
|
|
|
|
admin
|
|
« Odpowiedz #8 : Maj 25, 2011, 07:51:07 » |
|
Zadanie 2. Proszê zadeklarowaæ klasê Figura zawieraj±c± metody pole powierzchni, obwod. Na podstawie klasy figura zadeklarowaæ obiekty prostokat kwadrat kolo. W deklaracji klasy jawnie zadeklarowac konstruktora i destruktora.
|
|
|
Zapisane
|
|
|
|
|