Darmowe Forum
Kwiecień 14, 2025, 14:53:44 *
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 9105 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

blackmoon articz mylittlepony shaggydogss gang-nd