Darmowe Forum
Grudzieñ 30, 2024, 18:59:19 *
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: Klasy  (Przeczytany 8565 razy)
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« : Styczeñ 11, 2012, 08:48:30 »

Programowanie strukturalne przedstawia program jako seriê procedur, dzia³aj±cych na danych.
Funkcja jest zestawem specyficznych, wykonywanych jedna po drugiej instrukcji.
Dane s± ca³kowicie odseparowane od funkcji, zadaniem programisty by³o zapamiêtanie,
która funkcja wywo³uje inne funkcje, oraz jakie dane by³y w wyniku tego zmieniane.
G³ówn± ide± programowania strukturalnego jest: „dziel i rz±d¼.” Program komputerowy mo¿e byæ uwa¿any za zestaw zadañ.
Ka¿de zadanie, które jest zbyt skomplikowane aby mo¿na by³o je ³atwo opisaæ, jest rozbijane na zestaw mniejszych zadañ sk³adowych, a¿ do momentu gdy, wszystkie zadania s± wystarczaj±co ³atwe do zrozumienia.
Programowanie strukturalne stanowi niezwykle efektywny sposób rozwi±zywania z³o¿onych problemów. Posiada kilka ograniczeñ nie pozwalaj±cych na bardziej efektywne u¿ywanie kodu.

Jêzyk C++ jest zorientowanym obiektowo, pozwala to na zastosowanie w nim trzech zasad charakterystycznych dla programowania obiektowego: hermetyzacjê (kapsu³kowanie), dziedziczenie oraz polimorfizm.
Hermetyzacja(kapsu³kowanie) oznacza ukrycie metod w czê¶ci prywatnej.
Dziedziczenie to specjalny mechanizm, który umo¿liwia  tworzenie klas pochodnych, czyli bêd±cych niejako rozbudowan± wersj± klas ju¿ istniej±cych.
 Polimorfizm w programowaniu obiektowym oznacza wykorzystanie tego samego kodu do operowania na obiektach przynale¿nych ró¿nym klasom, dziedzicz±cym od siebie. Zjawisko to jest zatem ¶ci¶le zwi±zane z klasami i dziedziczeniem, aczkolwiek w C++ nie dotyczy ono ka¿dej klasy, a jedynie okre¶lonych typów polimorficznych.
Programowanie obiektowe - pozwala na operowanie w programie struktur± która nosi nazwê obiektu.
Obiekt = Dane +Metody.
Dane - (w³a¶ciwo¶ci/ properties) to warto¶ci opisuj±ce obiekt, odpowiadaj± zmiennym w programowaniu strukturalnym. Mo¿na im przypisywaæ warto¶ci za pomoc± operatora = .
Metody - to funkcje wykorzystywane dla ¶ci¶le okre¶lonych danych.
Obiekt jest elementem pewnej klasy.
W C++ nale¿y na pocz±tku zadeklarowaæ klasê i dopiero potem obiekty bêd±ce potomkami klasy.


Metoda zstêpuj±ca polega na:
Roz³o¿yæ ca³y problem na ¶ci¶le okre¶lone podproblemy i udowodniæ, ¿e je¶li ka¿dy podproblem jest rozwi±zany poprawnie, a te rozwi±zania s± po³±czone w okre¶lony sposób, to pierwotny problem te¿ jest rozwi±zany poprawnie. Proces dzielenia na podproblemy nale¿y prowadziæ tak d³ugo, a¿ ich rozwi±zanie mo¿na zapisaæ za pomoc± kilku wierszy w wybranym jêzyku programowania.
« Ostatnia zmiana: Luty 08, 2012, 10:55:50 wys³ane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #1 : Styczeñ 11, 2012, 09:15:12 »

Przyk³ad przedstawiaj±cy deklaracjê klasy i obiektu bêd±cego potomkiem tej klasy.

#include <cstdlib>
#include <iostream>

using namespace std;
class osoba
{protected:
char imie[255], nazwisko[255];
int dlug;
public:
osoba();
osoba(char *aimie, char anazwisko, int adlug){};
private: int wiek;
};

int main(int argc, char *argv[])
{ osoba miecio;
    system("PAUSE");
    return EXIT_SUCCESS;
}
osoba::osoba(){};

W programie przedstawionym wy¿ej napisa³em dwie metody o nazwie osoba. Osoba to równie¿ nazwa klasy. Takie dzia³anie nazywane jest przeci±¿eniem nazwy metody , kompilator rozpozna w³a¶ciw± metodê na podstawie liczby parametrów.

Kolejn± nowo¶ci± jest sposób deklaracji cia³a metody. Podobnie jak przy deklarowaniu funkcji w programowaniu strukturalnym cia³o mo¿na umie¶ciæ przy deklaracji prototypu
(osoba(char *aimie, char anazwisko, int adlug){};) lub poza deklaracj± klasy (osoba::osoba(){}).
Wtedy jednak trzeba napisaæ do jakiej klasy przypisana jest dana metoda, s³u¿y temu podwójny dwukropek :: . Operator :: nazywany jest operatorem widoczno¶ci.

Do ograniczenia dostêpu do danych konieczne jest zadeklarowanie z jakimi zmiennymi ma program do czynienia. Istniej± trzy poziomy dostêpno¶ci:
public - oznacza,¿e umieszczone za nim pola i metody s± dostêpne w ca³ym programie.
protected - s± dostêpne w sposób bezpo¶redni, przez u¿ycie operatora wyboru sk³adowej - kropki ( o tym pó¼niej) tylko w klasach pochodnych od danej klasy.
private - brak jest bezpo¶redniego dostêpu do do pól.
Je¿eli zmienna jest typu public, to mo¿na do niej siê do niej odwo³aæ stosuj±c wywo³anie:
miecio.osoba();

Je¿eli zmienna jest typu private  lub protected to na zewn±trz klasy nie mo¿na tego zrobiæ, trzeba wykorzystaæ metodê która bêdzie typu public, ale o tym pó¼niej.
« Ostatnia zmiana: Styczeñ 11, 2012, 10:05:02 wys³ane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #2 : Styczeñ 11, 2012, 10:18:30 »

By³o ciê¿ko spróbujemy trochê ³atwiej. Proszê sobie wyobraziæ,¿e piszemy grê wojenn± w której uczestnicz± pojazdy takie jak czo³gi, transportery, samochody pancerne.

Zadeklarujmy zatem klasê czolg, która bêdzie posiada³a w³a¶ciwo¶ci : amunicja, predkosc,  odpornosc, strzal.
#include <cstdlib>
#include <iostream>

using namespace std;
class czolg
{public:
        int amunicja;
        int predkosc;
        int odpornosc;
        int strzal;};
int main(int argc, char *argv[])
{
    system("PAUSE");
    return EXIT_SUCCESS;
}
-------------------- wersja z klas± transporter ------------------------------------
#include <cstdlib>
#include <iostream>

using namespace std;
class czolg
{public:
        int amunicja;
        int predkosc;
        int odpornosc;
        int strzal;};
class transporter
{public:
        int amunicja;
        int predkosc;
        int odpornosc;
        int strzal;
        int osoby;
        };
int main(int argc, char *argv[])
{
    system("PAUSE");
    return EXIT_SUCCESS;
}

------------------------------------ wersja uproszczona wykorzystuj±ca dziedziczenie -----------
#include <cstdlib>
#include <iostream>

using namespace std;
class czolg
{public:
        int amunicja;
        int predkosc;
        int odpornosc;
        int strzal;};
class transporter :public czolg
{public:
        int osoby;
        };
int main(int argc, char *argv[])
{
    system("PAUSE");
    return EXIT_SUCCESS;
}
« Ostatnia zmiana: Styczeñ 11, 2012, 10:31:22 wys³ane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #3 : Styczeñ 11, 2012, 10:47:38 »

Uwagi do poprzedniego przyk³adu:
Podczas dziedziczenia zawarto¶æ klasy podstawowej staje siê automatycznie zawarto¶ci± klasy pochodnej.
Wszystkie sk³adniki i funkcje sk³adowe staj± siê dostêpne w klasie odziedziczonej. W  przyk³adzie u¿yto zmiennych typu public.  Dodajmy teraz kilka funkcje do zadeklarowanych klas.

class czolg
{public:
        int amunicja;
        int predkosc;
        int odpornosc;
        int strzal;
        void jazda();
        };
        void czolg::jazda(){
            int v=0;
           }
           

int main(int argc, char *argv[])
{
    system("PAUSE");
    return EXIT_SUCCESS;
}

-------------------------- wersja z metody typu int -----------------------
class czolg
{public:
        int amunicja;
        int predkosc;
        int odpornosc;
        int strzal;
        void jazda();
        };
        void czolg::jazda(){
            int v=0;
           }
           

int main(int argc, char *argv[])
{
    system("PAUSE");
    return EXIT_SUCCESS;
}
« Ostatnia zmiana: Styczeñ 11, 2012, 11:47:32 wys³ane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #4 : Styczeñ 11, 2012, 12:08:14 »

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³.
Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #5 : Styczeñ 11, 2012, 12:09:38 »

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.
Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #6 : Styczeñ 11, 2012, 12:10:37 »

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;
}
Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #7 : Luty 29, 2012, 11:43:40 »

Zadanie 3. Zadeklarowaæ klasê Marta posiadaj±c± metody: konstruktora, destruktora, glos oraz w³a¶ciwo¶ci: masa typu int , kolor typu char. Nastêpnie zadeklarowaæ klasê malwina posiadaj±c± takie same metody i w³a¶ciwo¶ci jak marta ale dodatkow jeszcze metodê rysunek zwracaj±ca warto¶æ pust±.

using namespace std;
class marta
      {public:
        marta(){};
        ~marta(){};
        void glos(){};
        int masa;
        char kolor;};
       
        class malwina{
        public :
        malwina(){};
        ~malwina(){};
        void glos(){};
        void rysunek(){};
         int masa;
         char kolor;     
              };
       
int main(int argc, char *argv[])
{
    system("PAUSE");
    return EXIT_SUCCESS;
}
Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #8 : Luty 29, 2012, 11:46:47 »

Zadanie 4. Podobnie jak poprzednio tylko klasa malwina jest potomkiem klasy marta.

#include <cstdlib>
#include <iostream>

using namespace std;
class marta
      {public:
        marta(){};
        ~marta(){};
        void glos(){};
        int masa;
        char kolor;};
       
        class malwina:public  marta
        {
        void rysunek(){};
           
              };
       
int main(int argc, char *argv[])
{
    system("PAUSE");
    return EXIT_SUCCESS;
}
Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #9 : Luty 29, 2012, 12:36:54 »

Zadanie 5. Napisaæ program w którym zadeklarowano klasê wie¿owiec. Klasa zawiera funkcjê: objêto¶æ, oraz zmienne: liczba piêter i powierzchnia piêtra. Nale¿y zadeklarowaæ obiekt wie¿a bêd±ca potomkiem klasy wie¿owiec . Nastêpnie w programie wprowadziæ z klawiatury warto¶ci liczby piêter i powierzchni i przez wywo³anie funkcji objêto¶æ obliczyæ kubaturê obiektu wie¿a.

#include <cstdlib>
#include <iostream>

using namespace std;
class wiezowiec
      {public:
        //wiezowiec(){}; konstruktor
        //~wiezowiec(){}; destruktor
        float objetosc(float a, float b){return (a*b);};
        float liczba_pieter;
        float powierzchnia;};
     
       
int main(int argc, char *argv[])
{wiezowiec wieza;
cout<<"Podaj liczbe pieter: "; cin>>wieza.liczba_pieter;
cout<<endl<<"podaj powierzchnie uzytkowa: ";
cin>>wieza.powierzchnia;
cout<<"kubatura: "<<wieza.objetosc(wieza.liczba_pieter, wieza.powierzchnia)<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
« Ostatnia zmiana: Luty 29, 2012, 13:00:49 wys³ane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #10 : Marzec 07, 2012, 08:24:01 »

Zadanie 6. W programie zadeklarowaæ klasê pies posiadaj±c± funkcje: konstruktora, destruktora, int szybko¶æ z argumentem x typu integer. Nastêpnie zadeklarowaæ klasê potomn± kot. W funkcji g³ównej zadeklarowaæ obiekt mysio bêd±cy potomkiem klasy kot.

#include <cstdlib>
#include <iostream>

using namespace std;
class pies
{public:
      pies(){};
~pies(){};
int szybkosc(int x){};};

class kot :public pies
{};

int main(int argc, char *argv[])
{kot mysio;
    system("PAUSE");
    return EXIT_SUCCESS;
}
« Ostatnia zmiana: Marzec 07, 2012, 08:33:45 wys³ane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #11 : Marzec 07, 2012, 09:17:48 »

Zadanie 7. Zadeklarowaæ klasê pojazd,  klasa ma posiadaæ konstruktora, destruktora oraz dwie funkcje public: szybko¶æ posiadaj±c± argument int x, y. oraz zu¿ycie paliwa z argumentem (int z).
private: karoseria typu void.
Napisaæ klasê samochod potomn± do klasy pojazd posiadaj±ca dodatkowo metodê void wysokosc(void).
W funkcji g³ównej zadeklarowaæ obiekt fiat klasy samochod.
do funkcji szybko¶æ nale¿y wczytaæ z klawiatury warto¶ci zmiennych x,y.


#include <cstdlib>
#include <iostream>

using namespace std;
class pojazd
{public:
        int szybkosc(int x,int y){return x*y;};
        int zuz_pal(int z){return 2*z;};
      pojazd(){};
~pojazd(){};
private: void karoseria(void){};};
class samochod :public pojazd
{void wysokosc(void){};};

int main(int argc, char *argv[])
{samochod fiat;
int a,b;
cout<< "podaj x:=";cin>>a;
cout<< "podaj y:=";cin>>b;
cout<<fiat.szybkosc(a,b);
    system("PAUSE");
    return EXIT_SUCCESS;
}

 
« Ostatnia zmiana: Marzec 07, 2012, 10:24:22 wys³ane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #12 : Marzec 07, 2012, 09:57:10 »

Zadanie 8. Do poprzedniego zadania. zadeklarowaæ dwa obiekty fiat i opel. Dopisaæ  porównanie które prosi o podanie zmiennych x,y dla dwóch obiektów fiat i opel i wy¶wiela wiêksza warto¶æ funkcji szybko¶æ.

#include <cstdlib>
#include <iostream>

using namespace std;
class pojazd
{public:
        int szybkosc(int x,int y){return x*y;};
        int zuz_pal(int z){return 2*z;};
      pojazd(){};
~pojazd(){};
private: void karoseria(void){};};
class samochod :public pojazd
{void wysokosc(void){};};
     
int main(int argc, char *argv[])
{samochod fiat,opel;
int a,b,c,d;
cout<< "fiat podaj x:=";cin>>a;
cout<< "fiat podaj y:=";cin>>b;
cout<< "opel podaj x:=";cin>>c;
cout<< "opel podaj y:=";cin>>d;
if(fiat.szybkosc(a,b)<opel.szybkosc(c,d)){};
    system("PAUSE");
    return EXIT_SUCCESS;
}
« Ostatnia zmiana: Marzec 07, 2012, 10:32:16 wys³ane przez admin » 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 moikrewni proskills polski-serwer-rpg shaggydogss