Tytu³: Obowi±zuj±ce zasady, czyli co nale¿y wkuæ Wiadomo¶æ wys³ana przez: 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. Tytu³: Odp: Obowi±zuj±ce zasady, czyli co nale¿y wkuæ Wiadomo¶æ wys³ana przez: admin Maj 03, 2011, 19:24:03 Pamiêtaj: Z klasy tworzone s± obiekty.
Trzy cechy programowania obiektowego:
Tytu³: Odp: Obowi±zuj±ce zasady, czyli co nale¿y wkuæ Wiadomo¶æ wys³ana przez: admin 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. Tytu³: Odp: Obowi±zuj±ce zasady, czyli co nale¿y wkuæ Wiadomo¶æ wys³ana przez: admin 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; } Tytu³: Odp: Obowi±zuj±ce zasady, czyli co nale¿y wkuæ Wiadomo¶æ wys³ana przez: admin 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; } Tytu³: Odp: Obowi±zuj±ce zasady, czyli co nale¿y wkuæ Wiadomo¶æ wys³ana przez: admin 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; } Tytu³: Odp: Obowi±zuj±ce zasady, czyli co nale¿y wkuæ Wiadomo¶æ wys³ana przez: admin 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; } Tytu³: Odp: Obowi±zuj±ce zasady, czyli co nale¿y wkuæ Wiadomo¶æ wys³ana przez: admin 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; } Tytu³: Odp: Obowi±zuj±ce zasady, czyli co nale¿y wkuæ Wiadomo¶æ wys³ana przez: admin 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.
|