Darmowe Forum
Grudzieñ 22, 2024, 08:29:00 *
Witamy, Go¶æ. Zaloguj siê lub zarejestruj.
Czy dotar³ do Ciebie email aktywacyjny?

Zaloguj siê podaj±c nazwê u¿ytkownika, has³o i d³ugo¶æ sesji
Aktualno¶ci: Forum zosta³o uruchomione!
 
   Strona g³ówna   Pomoc Zaloguj siê Rejestracja  
Strony: [1]
  Drukuj  
Autor W±tek: Obowi±zuj±ce zasady, czyli co nale¿y wkuæ  (Przeczytany 13163 razy)
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« : 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
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« 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
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« 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
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« 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
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« 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
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« 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
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« 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
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« 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
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« 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
Strony: [1]
  Drukuj  
 
Skocz do:  

Powered by SMF 1.1.11 | SMF © 2006-2008, Simple Machines LLC | Sitemap

Polityka cookies
Darmowe Fora | Darmowe Forum

articz zlotasiodemka mylittlepony moikrewni polski-serwer-rpg