r16-06.doc

66
 Rozdział 16. Dziedziczenie Zzaawansowane dziedziczenie Jak dotądDo tej pory używaliśmy korzystaliśmy z   pojedynczego i wielokr otnego dziedziczenia  pojedynczego i wielokr otnego w celu stworzenia relacji typu  jest-czymś. W Z tegotym rozdzialełu dowiesz się  !czym jest zawieranie i jak je zamodelowa" #. !czym jest delegowanie i jak je zamodelowa" #. Jjak zaimplementowa" daną klasę poprzez inną #. Jjak używa" dziedziczenia  prywatnego  dziedziczenia. Zawieranie Jak widzieliśmy pokazaliśmy w poprzednic$ przykładac$# możliwe jest # %y dane składowe jednej klasy o%ejmowały o%iekty innyc$ klas. &rogramiści !'' m(wią wtedy # że klasa zewnętrzna zawiera klasę wewnętrzną. )ak więc klasa Employee *pracownik+ może zawiera" na przykład o%iekt typu ła,cuc$a *przec$owujący nazwisko pracownika+ oraz składowe całkowite *zawierają ce jego pensję i inne dane+. -isting /. opisuje niekompletną# c$o" wciążjednak owoż użyteczną klasę String# doś" podo%ną do klasy String zadeklarowanej w rozdziale 0. )e n listing nie dajegeneruje  żadnego wynikuwydruku . Zamiast tego zostanie1ędzie on jednak  wykorzystanywany razem z dalszymi listingami. -isting /.. 2lasa String  0: // Listing 16.1 Klasa String

Upload: greg

Post on 05-Nov-2015

212 views

Category:

Documents


0 download

TRANSCRIPT

Szablon dla tlumaczy

2

Cz I ( Podstawy obsugi systemu WhizBang (Nagwek strony)

Rozdzia 16.Dziedziczenie zaawansowaneDo tej pory uywalimy dziedziczenia pojedynczego i wielokrotnego w celu stworzenia relacji typu jest-czym.

Z tego rozdziau dowiesz si: czym jest zawieranie i jak je modelowa, czym jest delegowanie i jak je modelowa, jak zaimplementowa dan klas poprzez inn, jak uywa dziedziczenia prywatnego.

Zawieranie

Jak pokazalimy w poprzednich przykadach, moliwe jest, by dane skadowe jednej klasy obejmoway obiekty innych klas. Programici C++ mwi wtedy, e klasa zewntrzna zawiera klas wewntrzn. Tak wic klasa Employee (pracownik) moe zawiera na przykad obiekt typu acucha (przechowujcy nazwisko pracownika) oraz skadowe cakowite (zawierajce jego pensj i inne dane).

Listing 16.1 opisuje niekompletn, jednak uyteczn klas String, do podobn do klasy String zadeklarowanej w rozdziale 13. Ten listing nie generuje adnego wydruku. Bdzie on jednak wykorzystywany razem z dalszymi listingami.

Listing 16.1. Klasa String 0: // Listing 16.1 Klasa String

1:

2: #include

3: #include

4: using namespace std;

5:

6: class String

7: {

8: public:

9: // konstruktory

10: String();

11: String(const char *const);

12: String(const String &);

13: ~String();

14:

15: // przecione operatory

16: char & operator[](int offset);

17: char operator[](int offset) const;

18: String operator+(const String&);

19: void operator+=(const String&);

20: String & operator= (const String &),

21:

22: // oglne akcesory

23: int GetLen()const { return itsLen; }

24: const char * GetString() const { return itsString; }

25: static int ConstructorCount;

26:

27: private:

28: String (int); // prywatny konstruktor

29: char * itsString;

30: unsigned short itsLen;

31:

32: };

33:

34: // domylny konstruktor tworzcy cig pusty (0 bajtw) 35: String::String()

36: {

37: itsString = new char[1];

38: itsString[0] = '\0';

39: itsLen=0;

40: // cout