Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr...

36
Programowanie C/C++ Język C++ wyklad VII dr Jaroslaw Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów konstruktora Przyjaźń Programowanie C/C++ Język C++ wyklad VII dr Jaroslaw Mederski uzupelnienie notatek: dr Jerzy Bialkowski

Transcript of Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr...

Page 1: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

Programowanie C/C++Język C++wykład VII

dr Jarosław Mederski

uzupełnienie notatek: dr Jerzy Białkowski

Page 2: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

1 Polimorfizm

2 Pola i metody statyczne

3 Lista inicjatorów konstruktora

4 Przyjaźń

Page 3: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

Obiektowość języka C++

� Klasa (rozszerzenie struktury), obiekt instancją klasy,konstruktory i destruktory

� Enkapsulacja - kapsułkowanie, ukrywanie informacji(public, protected, private, friend)

� Polimorfizm i metody wirtualne� Dziedziczenie

� pola static� Szablony, STL

� Operacje we-wy

Page 4: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

Obiektowość języka C++

� Klasa (rozszerzenie struktury), obiekt instancją klasy,konstruktory i destruktory

� Enkapsulacja - kapsułkowanie, ukrywanie informacji(public, protected, private, friend)

� Polimorfizm i metody wirtualne� Dziedziczenie

� pola static� Szablony, STL

� Operacje we-wy

Page 5: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

1 #include <i o s t r e a m>2 using namespace std ;34 class Bryla {5 public :6 int l_wierzcholkow ;7 int l_scian ;8 int l_krawedzi ;9 int euler ( ) {10 return l_wierzcholkow + l_scian11 −l_krawedzi ;12 }13 } ;141516171819202122

Page 6: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

23 class Prostopadloscian : public Bryla {24 private :25 double bok_a ;26 double bok_b ;27 double bok_c ;2829 public :30 Prostopadloscian ( double a=0, double b=0, ←↩

double c=0){31 bok_a=a ;32 bok_b=b ;33 bok_c=c ;34 l_wierzcholkow=8;35 l_scian=6;36 l_krawedzi=12;37 }38 double objetosc ( ) {39 return bok_a*bok_b*bok_c ;40 }41 } ;4243

Page 7: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

44 class Czworoscian : public Bryla {45 private :46 double bok_podstawy ;47 double wys_podstawy ;48 double wys ;4950 public :51 Czworoscian ( double b=0, double w_p=0, double←↩

wys=0){52 bok_podstawy=b ;53 wys_podstawy=w_p ;54 this−>wys=wys ;55 l_wierzcholkow=4;56 l_scian=4;57 l_krawedzi=6;58 }59 double objetosc ( ) {60 return bok_podstawy*wys_podstawy*wys / 6 . 0 ;61 }62 } ;6364

Page 8: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

6566 int main ( ) {67 Prostopadloscian P ( 2 , 1 , 3 ) ;68 Czworoscian C ( 2 , 1 , 3 ) ;69 cout << P . objetosc ( ) << "\n" ;70 cout << C . objetosc ( ) << "\n" ;7172 Bryla *B ;7374 B = &P ;75 cout << "Liczba Eulera="76 << B−>euler ( ) << "\n" ;7778 B = &C ;79 cout << "Liczba Eulera="80 << B−>euler ( ) << "\n" ;8182 //B−>o b j e t o s c ( ) ; Blad !83 }

Page 9: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

Metody wirtualne

Metoda wirtualna jest metodą, która zastępuje siebie przeznową wersję, zdefiniowaną w klasie pochodnej. Polimorfizm -wielopostaciowość wskaźników.

� Konstruktor nie może być wirtualny

� Destruktor powinien być wirtualny

Page 10: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

Metody wirtualne

Metoda wirtualna jest metodą, która zastępuje siebie przeznową wersję, zdefiniowaną w klasie pochodnej. Polimorfizm -wielopostaciowość wskaźników.

� Konstruktor nie może być wirtualny

� Destruktor powinien być wirtualny

Page 11: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

Która metoda objetosc()?1 class Bryla {2 public :3 int l_wierzcholkow ;4 int l_scian ;5 int l_krawedzi ;6 int euler ( ) {7 return l_wierzcholkow + l_scian8 −l_krawedzi ;9 }10 double objetosc ( ) { return −1; }11 } ;12 class Czworoscian : public Bryla {13 . . .14 double objetosc ( ) . . . } ;15 . . .16 Czworoscian C ( 2 , 1 , 3 ) ;17 Bryla *B ;18 B = &C ;19 cout << B−>objetosc ( ) << "\n" ;

Page 12: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

1 #include <i o s t r e a m>2 using namespace std ;34 class Bryla {5 public :6 int l_wierzcholkow ;7 int l_scian ;8 int l_krawedzi ;9 int euler ( ) {10 return l_wierzcholkow + l_scian11 − l_krawedzi ;12 }13 virtual double objetosc ( ) {1415 }16 } ;1718 ostream& operator<<(ostream& os , Bryla *B ) {19 os << "Objetosc wynosi "20 << B−>objetosc ( ) << "\n" ;21 return os ;22 }

Page 13: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

2324 class Prostopadloscian : public Bryla {25 private :26 double bok_a ;27 double bok_b ;28 double bok_c ;2930 public :31 Prostopadloscian ( double a=0, double b=0, ←↩

double c=0){32 bok_a=a ;33 bok_b=b ;34 bok_c=c ;35 l_wierzcholkow=8;36 l_scian=6;37 l_krawedzi=12;38 }39 double objetosc ( ) {40 return bok_a*bok_b*bok_c ;41 }42 } ;43

Page 14: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

4445 class Czworoscian : public Bryla {46 private :47 double bok_podstawy ;48 double wys_podstawy ;49 double wys ;5051 public :52 Czworoscian ( double b=0, double w_p=0, double←↩

wys=0){53 bok_podstawy=b ;54 wys_podstawy=w_p ;55 this−>wys=wys ;56 l_wierzcholkow=4;57 l_scian=4;58 l_krawedzi=6;59 }60 double objetosc ( ) {61 return bok_podstawy*wys_podstawy*wys / 6 . 0 ;62 }63 } ;64

Page 15: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

6566 int main ( ) {67 Prostopadloscian P ( 2 , 1 , 3 ) ;68 Czworoscian C ( 2 , 1 , 3 ) ;69 Bryla *B ;7071 B = &P ;72 cout << B−>objetosc ( ) << "\n" ;7374 B = &C ;75 cout << B−>objetosc ( ) << "\n" ;76 // l u b77 cout << B ;78 }

Page 16: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

Wielodziedziczeniei związane z nim problemy

� Język C++ dopuszcza wielodziedziczenie po klasach.

� Jeżeli w obu klasach bazowych znajduje się funkcja o tejsamej nazwie dochodzi do konfiktu.

� W przypadku użycia funkcji która zaimplementowana jestw obu klasach bazowych dochodzi do błędu kompilacjinawet w przypadku gdy te funkcje różnią się argumentami(są przeciążone).

� W większości obiektowych języków programowania (teżpowstaych na bazie języka C++) nie jest możliwedziedziczenie po klasach, ale możliwe jestwielodziedziczenie po interfejsach (iterfejsy są podobne doklas, ale nie zawierają pól i zawierają jedynie deklaracjemetod – bez definicji).

Page 17: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

Wielodziedziczeniei związane z nim problemy

� Język C++ dopuszcza wielodziedziczenie po klasach.

� Jeżeli w obu klasach bazowych znajduje się funkcja o tejsamej nazwie dochodzi do konfiktu.

� W przypadku użycia funkcji która zaimplementowana jestw obu klasach bazowych dochodzi do błędu kompilacjinawet w przypadku gdy te funkcje różnią się argumentami(są przeciążone).

� W większości obiektowych języków programowania (teżpowstaych na bazie języka C++) nie jest możliwedziedziczenie po klasach, ale możliwe jestwielodziedziczenie po interfejsach (iterfejsy są podobne doklas, ale nie zawierają pól i zawierają jedynie deklaracjemetod – bez definicji).

Page 18: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

Wielodziedziczeniei związane z nim problemy

� Język C++ dopuszcza wielodziedziczenie po klasach.

� Jeżeli w obu klasach bazowych znajduje się funkcja o tejsamej nazwie dochodzi do konfiktu.

� W przypadku użycia funkcji która zaimplementowana jestw obu klasach bazowych dochodzi do błędu kompilacjinawet w przypadku gdy te funkcje różnią się argumentami(są przeciążone).

� W większości obiektowych języków programowania (teżpowstaych na bazie języka C++) nie jest możliwedziedziczenie po klasach, ale możliwe jestwielodziedziczenie po interfejsach (iterfejsy są podobne doklas, ale nie zawierają pól i zawierają jedynie deklaracjemetod – bez definicji).

Page 19: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

Wielodziedziczeniei związane z nim problemy

� Język C++ dopuszcza wielodziedziczenie po klasach.

� Jeżeli w obu klasach bazowych znajduje się funkcja o tejsamej nazwie dochodzi do konfiktu.

� W przypadku użycia funkcji która zaimplementowana jestw obu klasach bazowych dochodzi do błędu kompilacji

nawet w przypadku gdy te funkcje różnią się argumentami(są przeciążone).

� W większości obiektowych języków programowania (teżpowstaych na bazie języka C++) nie jest możliwedziedziczenie po klasach, ale możliwe jestwielodziedziczenie po interfejsach (iterfejsy są podobne doklas, ale nie zawierają pól i zawierają jedynie deklaracjemetod – bez definicji).

Page 20: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

Wielodziedziczeniei związane z nim problemy

� Język C++ dopuszcza wielodziedziczenie po klasach.

� Jeżeli w obu klasach bazowych znajduje się funkcja o tejsamej nazwie dochodzi do konfiktu.

� W przypadku użycia funkcji która zaimplementowana jestw obu klasach bazowych dochodzi do błędu kompilacjinawet w przypadku gdy te funkcje różnią się argumentami(są przeciążone).

� W większości obiektowych języków programowania (teżpowstaych na bazie języka C++) nie jest możliwedziedziczenie po klasach, ale możliwe jestwielodziedziczenie po interfejsach (iterfejsy są podobne doklas, ale nie zawierają pól i zawierają jedynie deklaracjemetod – bez definicji).

Page 21: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

Wielodziedziczeniei związane z nim problemy

� Język C++ dopuszcza wielodziedziczenie po klasach.

� Jeżeli w obu klasach bazowych znajduje się funkcja o tejsamej nazwie dochodzi do konfiktu.

� W przypadku użycia funkcji która zaimplementowana jestw obu klasach bazowych dochodzi do błędu kompilacjinawet w przypadku gdy te funkcje różnią się argumentami(są przeciążone).

� W większości obiektowych języków programowania (teżpowstaych na bazie języka C++) nie jest możliwedziedziczenie po klasach

, ale możliwe jestwielodziedziczenie po interfejsach (iterfejsy są podobne doklas, ale nie zawierają pól i zawierają jedynie deklaracjemetod – bez definicji).

Page 22: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

Wielodziedziczeniei związane z nim problemy

� Język C++ dopuszcza wielodziedziczenie po klasach.

� Jeżeli w obu klasach bazowych znajduje się funkcja o tejsamej nazwie dochodzi do konfiktu.

� W przypadku użycia funkcji która zaimplementowana jestw obu klasach bazowych dochodzi do błędu kompilacjinawet w przypadku gdy te funkcje różnią się argumentami(są przeciążone).

� W większości obiektowych języków programowania (teżpowstaych na bazie języka C++) nie jest możliwedziedziczenie po klasach, ale możliwe jestwielodziedziczenie po interfejsach (iterfejsy są podobne doklas, ale nie zawierają pól i zawierają jedynie deklaracjemetod – bez definicji).

Page 23: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

1 #include <i o s t r e a m>2 using namespace std ;34 class A {5 public :6 void Metoda ( ) { cout << "A" << endl ; }7 } ;89 class B {10 public :11 void MetodaB ( ) { cout << "B" << endl ; }12 // Błędy : ( a l e po zakom . l i n i i 21 poprawne )13 // v o i d Metoda ( ) { cout << ”B1” << e n d l ; }14 // v o i d Metoda ( i n t i ) { cout << ”B2\n ” ; }15 } ;1617 class C : public A , public B { } ;1819 int main ( ) {20 C c ;21 c . Metoda ( ) ;22 }

Page 24: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

static

� Pole static jest wspólne dla wszystkich obiektów.

� Domyślna wartość 0, inicjalicacja pola w plikuimplementacji klasy.

� Metoda statyczna może być wywołana nawet, gdy nieistnieją obiekty danej klasy.

� Metoda statyczna może odwoływać się tylko doskładowych statycznych, nie zawiera this.

Page 25: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

Kiedy użyć static?

� zlicznie obiektów

� komunikacja pomiędzy obiektami

� wspólna informacja dla wszystkich obiektów

Page 26: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

1 #include <i o s t r e a m>2 using namespace std ;3 class Bryla {4 private :5 static int liczba_obiektow ;6 public :7 int l_wierzcholkow ;8 int l_scian ;9 int l_krawedzi ;10 int euler ( ) {11 return l_wierzcholkow + l_scian12 − l_krawedzi ;13 }14 virtual double objetosc ( ) { return −1;}1516 static int ile ( ) { return liczba_obiektow ; }17 Bryla ( ) {18 liczba_obiektow++; }19 ˜Bryla ( ) {20 liczba_obiektow−−; }21 } ;22 int Bryla : : liczba_obiektow=0;

Page 27: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

232425 class Prostopadloscian : public Bryla {26 private :27 double bok_a ;28 double bok_b ;29 double bok_c ;3031 public :32 Prostopadloscian ( double a=0, double b=0, ←↩

double c=0){33 bok_a=a ;34 bok_b=b ;35 bok_c=c ;36 l_wierzcholkow=8;37 l_scian=6;38 l_krawedzi=12;39 }40 double objetosc ( ) {41 return bok_a*bok_b*bok_c ;42 }43 } ;

Page 28: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

444546 class Czworoscian : public Bryla {47 private :48 double bok_podstawy ;49 double wys_podstawy ;50 double wys ;5152 public :53 Czworoscian ( double b=0, double w_p=0, double←↩

wys=0){54 bok_podstawy=b ;55 wys_podstawy=w_p ;56 this−>wys=wys ;57 l_wierzcholkow=4;58 l_scian=4;59 l_krawedzi=6;60 }61 double objetosc ( ) {62 return bok_podstawy*wys_podstawy*wys / 6 . 0 ;63 }64 } ;

Page 29: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

6566 int main ( ) {67 cout << Bryla : : ile ( ) << "\n" ;6869 Prostopadloscian P ( 2 , 1 , 3 ) ;70 cout << Bryla : : ile ( ) << "\n" ;7172 Czworoscian C ( 2 , 1 , 3 ) ;73 cout << Bryla : : ile ( ) << "\n" ;7475 if ( true ) {76 Bryla B ;77 cout << Bryla : : ile ( ) << "\n" ;78 }79 cout << Bryla : : ile ( ) << "\n" ;8081 Bryla *B1 ;82 cout << Bryla : : ile ( ) << "\n" ;8384 }

Page 30: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

Lista inicjatorów konstruktoraW klasie pochodnej (podrzędnej) konstruktor może wywołaćkonstruktor klasy bazowej (nadrzędnej) i zainicjować swoje polaoraz pola klasy bazowej.

1 class A {2 public :3 int poleA ;4 A ( ) { . . . }5 A ( int i , int j ) { . . . }6 } ;78 class B : public A {9 int poleB ;10 B ( int k ) : A ( 1 , k ) , poleB (k ) , poleA (k ) {11 . . .12 }13 } ;

Page 31: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

1 #include <i o s t r e a m>2 using namespace std ;3 class Bryla {4 private :5 static int liczba_obiektow ;6 public :7 int l_wierzcholkow ;8 int l_scian ;9 int l_krawedzi ;10 int euler ( ) {11 return l_wierzcholkow + l_scian12 − l_krawedzi ;13 }1415 virtual double objetosc ( ) { return −1;}1617 static int ile ( ) { return liczba_obiektow ; }1819 Bryla ( ) {20 liczba_obiektow++; }2122

Page 32: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

23 Bryla ( int l_w , int l_s , int l_k ) {24 liczba_obiektow++;25 l_wierzcholkow = l_w ;26 l_scian = l_s ;27 l_krawedzi = l_k ;28 }29 ˜Bryla ( ) { liczba_obiektow−−; }30 } ;31 int Bryla : : liczba_obiektow=0;3233 class Prostopadloscian : public Bryla {34 private :35 double bok_a ;36 double bok_b ;37 double bok_c ;38 public :39 Prostopadloscian ( double a=0, double b=0, ←↩

double c=0) : Bryla ( 8 , 6 , 1 2 ) {40 bok_a=a ;41 bok_b=b ;42 bok_c=c ;43 }

Page 33: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

44 double objetosc ( ) {45 return bok_a*bok_b*bok_c ;46 }47 } ;4849 class Czworoscian : public Bryla {50 private :51 double bok_podstawy ;52 double wys_podstawy ;53 double wys ;5455 public :56 Czworoscian ( double b=0, double w_p=0, double←↩

wys=0) : Bryla ( 4 , 4 , 6 ) {57 bok_podstawy=b ;58 wys_podstawy=w_p ;59 this−>wys=wys ;60 }61 double objetosc ( ) {62 return bok_podstawy*wys_podstawy*wys / 6 . 0 ;63 }64 } ;

Page 34: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

6566 int main ( ) {67 cout << Bryla : : ile ( ) << "\n" ;6869 Prostopadloscian P ( 2 , 1 , 3 ) ;70 cout << Bryla : : ile ( ) << "\n" ;7172 Czworoscian C ( 2 , 1 , 3 ) ;73 cout << Bryla : : ile ( ) << "\n" ;7475 if ( true ) {76 Bryla B ;77 cout << Bryla : : ile ( ) << "\n" ;78 }79 cout << Bryla : : ile ( ) << "\n" ;8081 Bryla *B1 ;82 cout << Bryla : : ile ( ) << "\n" ;8384 }

Page 35: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

Funkcję lub metodę zaprzyjaźnioną tworzymy w celu uzyskaniadostępu do prywatnych składowych klasy.

1 class A {2 private :3 int poleA ;45 public :6 A ( ) { poleA=5;}7 friend int funkcja (A&) ;8 } ;910 int funkcja (A& objA ) {11 return objA . poleA ;12 }1314 int main ( ) {15 A objA ;16 cout << funkcja ( objA ) << endl ;17 }

Page 36: Programowanie C/C++ Jezyk C++ wyk ad VIImastem/wyk7.pdfProgramowanie C/C++ Język C++ wykład VII dr Jarosław Mederski Spis Polimorfizm Pola i metody statyczne Lista inicjatorów

ProgramowanieC/C++Język C++wykład VII

dr JarosławMederski

Spis

Polimorfizm

Pola i metodystatyczne

Listainicjatorówkonstruktora

Przyjaźń

Dziękuję za uwagę.