http://kondel.dx.am
kurs c++ : klasy

Klasa przypomina troch rozbudowan struktur. Tak jak struktura moe posiada pola i funkcje, ktre tu nazywaj si metodami.
Deklaracja klasy wyglda nastpujco:

class nazwa_klasy {
 public:
  pola;
  metody;
};


stopnie ochrony danych

W c++ istniej trzy storpnie ochrony danych:

private


Jest to najbardziej rygorystyczny stopie ochrony danych. Dostp do danych typu private maj tylko metody klasy oraz klasy i metody zaprzyjanione z dan klas. Np.:

class klasa1 {
private:
int a;
public:
void puta(int x) {a=x;};
};

int main()
{
klasa1 klasa;
klasa.x=5; /*brak dostpu*/
klasa.puta(5); /*OK*/
};

protected


Dostp do danych typu protected maj metody klasy, klasy i metody zaprzyjanione oraz klasy pochodne. Np.:

class klasa1 {
protected:
int a;
};

class klasa2: protected klasa1
{
public:
int geta(void) {return a;};
};

int main()
{
klasa1 klas1;
klasa2 klas2;
klas1.a=5; /*brak dostpu*/
klas2.a=5; /*brak dostpu*/
cout << klas2.geta(); /*OK*/
return 0;
}

public


Tu dostp do danych jest prawie nieograniczony. Jeeli w powyszych przykadach wszdzie zamienilibymy stopnie ochrony danych na public to nigdzie nie wytpi by bd dostpu.


dziedziczenie

Dziedziczenie klas pozwala nam na "odziedziczenie" pl i metod klasy bazowej przez klasy pochodne. Przykad:

class G
{
public: int a,b;
};

class D : public G
{
public: char c;
};

int main()
{
D klasa;
klasa.a=5;
klasa.b=10;
klasa.c='c';
return 0;
}


virtual

Metody virtulane tworzymy dodajc przed deklaracj metody soso virtual.

class CKLASA
{
public:
int a,b;
virtual int pomnoz()=0;
};

Przyrwnanie do zera metody mwi kompilatorowi, e ma do czynienia z funkcj w peni wirtualn. Stworzylimy klas abstrakcyjn, dla ktorej nie definiujemy ciaa metody. Teraz klasy pochodne mog korzysta z metody typu virtual np.::

class CDER: public CKLASA
{
public:
int pomnoz() {return a*b;};
};

class CDER2: public CKLASA
{
public:
int pomnoz() {return a*b*a;};
};

int main()
{
CDER klasa1;
CDER2 klasa2;
klasa1.a=3;
klasa1.b=4;
klasa2.a=2;
klasa2.b=3;
cout << klasa1.pomnoz() << endl << klasa2.pomnoz();
return 0;
};


friend

Klasy i funkjce zaprzyjanione maj dostp do danych prywatnych danej klasy. Przykad:

//biblioteki
class klasa2; //niepena deklaracja
class klasa1
{
  int x; //zmienna private
  friend klasa2;
};

class klasa2
{
public:
  void putx(klasa1& k, int a) {k.x=a;};
  int getx(klasa1* k) {return k->x;};
};

int main()
{
  klasa1 k1;
  klasa2 k2;
  k2.putx(k1,5);
  cout << k2.getx(&k1);
  return 0;
}

Wszystkie pola (prywatne,chronione i publiczne) w klasie zaprzyjanionej s jako pola publiczne. Nie moemy jednak w powyszym przykadzie odwoa si tak:

int main()
{
klasa2 k2;
k2.x=5; //bd
}

Funkcje take mog by zaprzyjanione:

class K
{
  int liczba;
public:
  K(int a) {liczba=a;};
  friend int wyswietl(K&);
};

int wyswietl(K& k) {return k.liczba;}

int main()
{
K klasa(5);
cout << wyswietl(klasa);
return 0;
}


tworzenie plikw nagwkowych

Gdy tworzymy bardziej zoone programy, dobrze jest klasy deklarowa w oddzielnych plikach nagwkowych. Kod programu jest wtedy bardziej przejrzysty.
Przykad pliku nagwkowego:
Tworzymy plik np. o nazwie "mojplik.h" i w nim deklarujemy klase:
#ifndef _MOJPLIK_H_ /*zabezpieczenie*/
#define _MOJPLIK_H_
class mojaklasa {
  private:
  int x;
  public:
  mojaklasa(int);
  int wypisz();
  };
#include "mojplik.cpp"
/*doloczenie pliku*/ #endif

Teraz tworzymy plik o nazwie "mojplik.cpp" i w nim konczymy deklaracje:
mojaklasa::mojaklasa(int a) {x=a;};
int mojaklasa::wypisz() {return x;};

Teraz w programie moemy napisa:
#include "mojplik.h"
...
int main()
{
 mojaklasa MYCLASS(3); /*deklaracja klasy i wywoanie konstruktora*/
 cout >> MYCLASS.wypisz();
 return 0;
};

Program powinien wyswietli 3(bo taki parametr by podany do konstruktora klasy).


wroc
Valid XHTML 1.1 Valid CSS 2 StopIE.com - Stop Internet Explorer Spam Poison
copyrights © 2003-2014 by Kondel
0.033s.   wróć