Jzyk C++ cz 3. Jarosław Gramacki Instytut Informatyki i Elektroniki ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )



Podobne dokumenty
Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Język C++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski.

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)

public: // interfejs private: // implementacja // składowe klasy protected: // póki nie będziemy dziedziczyć, // to pole nas nie interesuje

Plik klasy. h deklaracje klas

PARADYGMATY PROGRAMOWANIA Wykład 2

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc

PARADYGMATY PROGRAMOWANIA Wykład 4

Wstęp do Programowania 2

Język C++ część 9 szablony klas. Jarosław Gramacki Instytut Informatyki i Elektroniki. szablony funkcji

Programowanie 2. Język C++. Wykład 2.

PARADYGMATY PROGRAMOWANIA Wykład 3

Projektowanie klas c.d. Projektowanie klas przykład

Programowanie obiektowe w C++ Wykład 12

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Operatory na rzecz typu TString

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Programowanie 2. Język C++. Wykład 3.

#include "stdafx.h" #include <iostream> #include "windows.h" using namespace std;

Wstęp do Programowania 2

Konstruktor kopiujacy

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Programowanie obiektowe

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

Programowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Obsługa wyjątków. Język C++ WW12

Wykład V. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Programowanie w języku C++

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++

tel Konsultacje www

Informatyka. Wy-08 Klasy. mgr inż. Krzysztof Kołodziejczyk

Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać)

Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class).

część 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia

Programowanie w języku C++

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

dr inż. Jarosław Forenc

Programowanie Obiektowe i C++

Operator przypisania. Jest czym innym niż konstruktor kopiujący!

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Wstęp do programowania

Dzisiejszy wykład. Klasa string. wersja prosta wersja ze zliczaniem odwołań. Wyjątki Specyfikator volatile Semafory

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

PROGRAMOWANIE OBIEKTOWE W C++ cz. 2. Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów.

Dziedziczenie & W slajdach są materiały zapożyczone z

Języki i paradygmaty programowania

PROGRAMOWANIE NISKOPOZIOMOWE. Struktury w C. Przykład struktury PN.06. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012

Podstawy Programowania Obiektowego

Wykład 4: Klasy i Metody

Język C++ wykład VII. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VII. dr Jarosław Mederski. Spis.

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

dr inż. Jarosław Forenc

Programowanie obiektowe i C++ dla matematyków

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Funkcje przeciążone, konstruktory kopiujące, argumenty domyślne

Programowanie Komputerów

Programowanie obiektowe w języku

class Student Deklaracja klasy Osoba: Deklaracja klasy Student:

obiekty funkcyjne - funktory

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 4. Karol Tarnowski A-1 p.

Programowanie, część I

ALGORYTMY I STRUKTURY DANYCH

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Programowanie Obiektowew języku C++ Zadania L4

Programowanie obiektowe Wykład 3. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21

FUNKCJE WZORCOWE. Wykład 10. Programowanie Obiektowe (język C++) Funkcje wzorcowe wprowadzenie (2) Funkcje wzorcowe wprowadzenie (1)

Zwracanie obiektu. Funkcja może zwracać obiekty: #include"stdafx.h #include <iostream> using namespace std; class samp { inti; public:

Dzisiejszy wykład. Wzorce funkcji Wzorce klas Tablica asocjacyjna Składowe statyczne

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

it = 0; memset((void *)ptr, 0, items*sizeof(double)); cout << "Konstruktor sparametryzowany " << title << " adres: " << ptr << "\n";

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Język C++ wykład VIII

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Paradygmaty programowania. Paradygmaty programowania

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy

Języki programowania - podstawy

Zaawansowane programowanie w języku C++ Klasy w C++

TEMAT : KLASY POLIMORFIZM

DYNAMICZNE PRZYDZIELANIE PAMIECI

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Programowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26

Struktury. Przykład W8_1

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.

Wzorce funkcji (szablony)

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

Programowanie 2. Język C++. Wykład Relacje między klasami, klasy zagnieŝdŝone, klasy lokalne

Programowanie, część I

Tbli Tablice obiektów biktó są tworzone dokładnie d tak samo, jak i tablice, składające się z elementów innego typu

Mechanizm dziedziczenia

Transkrypt:

Jzyk C++ cz 3 Jarosław Gramacki Instytut Informatyki i Elektroniki # $$%%& ' ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )!" 2

# $$%%& ' ( $%%/,))3 ( %* 2 / 4 ( ( *' *''*, + ( ' ' ' * ' ( ) ( )'*')1 ( )*'. ( *5 ( )'/inline ( ) ( '/ ( ). ( ( 6 +'' +)*) / ) /2 / 2 / 2 2$%% )50*'*"!" 3 # & *' * ( *)+ **, /,$%% (.) )''+' 2*42 ( ' + 42) 3private public ' +*" +*)'' )+*2 *), +* ( ' + +7*07+*2'/'* ' *'*'*8 ' '8 *8 +* 2" ( *,).$%%' +''')'3 ) '/ / )$%%* " 92 ) ) '**2/ / 2*:;<" ( *'3 ' *0 '/ 22*) "!" 4

# *)&*' / #define MAX_SIZE 5 typedef enum OK, FULL, EMPTY stack_state; ANSI C typedef struct int table[ MAX_SIZE ]; int top; stack_state state; Stack; // ------------------------------------ void push( Stack *s, int element ) if( s->state!= FULL ) s->table[ (s->top)++ ] = element; printf( "Pelny stos!\n" ); if( s->top >= MAX_SIZE ) s->state = FULL; s->state = OK;!" 5 # *)&*' / // ---------------------------------- int pop( Stack *s ) int element = 0; if( s->state!= EMPTY ) element = s->table[ --(s->top) ]; printf( "Pusty stos!\n" ); if( s->top <= 0 ) s->state = EMPTY; s->state = OK; ANSI C return element; // ---------------------------------- void print_stack( Stack *s ) for( int i = s->top-1; i >= 0; i-- ) printf( "[ %d ]\n", s->table[ i ] );!" 6

# *)&*' / void main( void ) Stack s1; int i; ANSI C s1.top = 0; s1.state = EMPTY; push( &s1, 5 ); push( &s1, 10 ); push( &s1, 15 ); printf( "Liczba elementow = %d\n", s1.top ); print_stack( &s1 ); printf( "Pop 1 = %d\n", pop( &s1 )); printf( "Pop 2 = %d\n", pop( &s1 )); printf( "Pop 3 = %d\n", pop( &s1 )); printf( "Liczba elementow = %d\n", s1.top ); printf( "Pop 4 = %d\n", pop( &s1 )); for( i = 0; i <= MAX_SIZE+1; i++ ) printf( "Push : %d\n", i ); push( &s1, i ); print_stack( &s1 ); printf( "Liczba elementow = %d\n", s1.top );!" 7 # *)&*' / & - ( )*Stack " )*4/*.'') 4 *). = +'.'>&?*)22 ( "/'*/**4/ ' '"' 0/' ) push()pop() 0 ') **'')print_stack(). ; /' *) )* ),.'/*, /'7*''07 ( */*,* *4/ ) */+*' ) @ ' *, * ) init()!!! void main( void ) Stack s1; // nasz stos s1.top = 0; s1.state = EMPTY; printf( "Liczba elementow = %d\n", s1.top ); // lub s1.table[0] = s1.table[1] = 7; void init (Stack *s) s->top = 0; s->state = EMPTY!" 8

# *)&*'/ const int MAX_SIZE = 5; enum stack_state OK, FULL, EMPTY; class Stack // deklaracja klasy public: // kwalifikator dostpu void push( int ); // metody int pop(); // (ich void print_stack(); // prototypy) void init(); int ile_elementow(); int table[ MAX_SIZE ]; // dane int top; // (pola) stack_state state; ; void Stack::push( int element ) if( state!= FULL ) table[ top++ ] = element; cout << "Pelny stos!" << endl; C++ B)', ')) +*,4 A4/ )) 2 2/'*5 ))) )/+ B,', ' ". *'+* " if( top >= MAX_SIZE ) state = FULL; state = OK;!" 9 # *)&*'/ int Stack::pop() int element = 0; C++ if( state!= EMPTY ) element = table[ --top ]; cout << "Pusty stos!" << endl; if( top <= 0 ) //nie ma potrzeby pisania Stack::top state = EMPTY; state = OK; return element; void Stack::print_stack() for( int i = top-1; i >= 0; i-- ) cout << "[ " << table[ i ] << " ]" << endl; inline void Stack::init() top = 0; state = EMPTY; inline int Stack::ile_elementow() return top; '7 7 <*''3,*"/ ' '*'*!" 10

# *)&*'/ void main() Stack s1; // UTWORZENIE OBIEKTU C++ s1.init(); // wywołanie metody Stack::init() dla obiektu s1 s1.push( 5 ); // tylko metody maj dostp do danych s1.push( 10 ); s1.push( 15 ); cout << "Liczba elementow = " << s1.ile_elementow() << endl; s1.print_stack(); cout << "Pop 1 = " << s1.pop() << endl; cout << "Pop 2 = " << s1.pop() << endl; cout << "Pop 3 = " << s1.pop() << endl; cout << "Liczba elementow = " << s1.ile_elementow() << endl; cout << "Pop 4 = " << s1.pop() << endl; for(int i = 0; i < MAX_SIZE+1; i++ ) cout << "Push : " << i << endl; s1.push( i ); s1.print_stack(); cout << "Liczba elementow = "<< s1.ile_elementow() << endl;!" 11 # *)&*'/ &'- ( /,)* )) '' ** 2' -"C* ', /.3) +* ( *' ) private ) ' D') * )+*2 ( 2''4 ) ) '2 ( ; +3 %') public +*)."')')).+*,*, %') private ') +*)."')).+* ) **''') (,,,") public '' + ) private void main( void ) Stack s1; s1.top = 0; s1.state = EMPTY; printf( "Liczba elementow = %d\n", s1.top ); // lub s1.table[0] = s1.table[1] = 7;!" 12

# & 1 / 4 / / 4 ( 1 / 4& )/'' E@:$" ( / / 4& )/'' E@:$" void main() Stack s1; // utworzenie obiektu Stack *ps1 = &s1 // wskanik do obiektu Stack stab[10]; // tablica 10 obiektów s1.init(); // wywołanie metody Stack::init() dla obiektu s1 ps1->init(); // j.w ale poprzez wskanik (*ps1).init(); // j.w ale inny zapis // Przetwarzanie tablicy. for( int i = 0; i < 5; i++ ) stab[ i ].init(); stab[ i ].push( i ); stab[ i ].push( 2 * i ); for( i = 0; i < 5; i++ ) cout << " Stos " << i << " :" << endl; stab[ i ].print_stack();!" 13 # & / ' ' ( *new delete*'). '' / 4 void main() Stack *ps1 = new Stack; // Dynamiczne utworzenie obiektu typu Stack ps1->init(); ps1->push( 5 ); ps1->push( 10 ); ps1->print_stack(); delete ps1; // Zwolnienie pamieci. Stack *ps5 = new Stack[ 5 ]; // Dynamiczne utworzenie piciu obiektów for( int i = 0; i < 5; i++ ) ps5[ i ].init(); ps5[ i ].push( i ); ps5[ i ].push( 2 * i ); for( i = 0; i < 5; i++ ) cout << " Stos " << i << " :" << endl; ps5[ i ].print_stack(); delete [] ps5; // Zwolnienie pamieci przydzielonej tablicy.!" 14

# & ' ( * )')) +,*,'*'*)4' ( " F4"''.'8'* *4 :D 2'5 7.7).// 7 +4*'')),7" ( s1.init(); >&4&?s1.top = 0; s1.state = EMPTY n = s1.ile_elementow()>&4&?n = s1.top; ( '' ' /'*5, +*4 )/'.' ')'//*' 50*top state ) publicc ' +' ) 50 ) (,-C inline)'4* / ) * -" /+.7*7inline.. inline void Stack::init() top = 0; state = EMPTY; inline int Stack::ile_elementow() return top;..!" 15 # & ' ( )+'$%%'+) + /'4 2) 2) Stack::init() i Stack::ile_elementow() ( *' + *,). 5 *.' ) ) ')) ). class Stack public: void push( int ); int pop(); void print_stack(); '40,+,' ) 5 - **"G // Ponisze dwie funkcje zdefiniowane s // w deklaracji klasy, a wiec kompilator automatycznie // uzna je za funkcje inline. void init() top = 0; state = EMPTY; int ile_elementow() return top; int table[ MAX_SIZE ]; int top; stack_state state; ;,' ) /5 "!" 16

# & 1 2 ( )+'$%%)'),'). / 4).)E,'1 this ( 7'7 )1,.0)* ) void Stack::push( int element ) if( state!= FULL ) table[ top++ ] = element; cout << "Pelny stos!" << endl; if( top >= MAX_SIZE ) state = FULL; state = OK; void Stack::push( Stack* this, int element ) // zawsze jako pierwszy argument if( this->state!= FULL ) this->table[ this->top++ ] = element; cout << "Pelny stos!" << endl; if( this->top >= MAX_SIZE ) this->state = FULL; this->state = OK;!" 17 # & 1 2 ( 1 this)*''' *' ) ) ), )* )) +'' ( 1 this ) ")*' *)',' / &*'' 20* / '* ) ** void main() Stack s1, s2; s1.push( 5 ); s1.push( 10 ); s2.push( 15 ); void main() Stack s1, s2; push(&s1, 5); push(&s1, 10 ); push(&s2, 15 ); inline int Stack::ile_elementow() // return top; return this->top; return (*this).top;!" 18

# & 1 2 // przykład podstawowy #2 class Test public: Test( int = 0 ); void print() const; int x; ; Test::Test( int value ) x = a // konstruktor domylny // konstruktor, inicjalizacja x // print x using implicit and explicit this pointers; // parentheses around *this required void Test::print() const // implicitly use this pointer to access member x cout << " x = " << x; // explicitly use this pointer to access member x cout << "\n this->x = " << this->x; // explicitly use dereferenced this pointer and // the dot operator to access member x cout << "\n(*this).x = " << ( *this ).x << endl; int main() Test testobject( 12 ); testobject.print(); return 0;!" 19 # & 1 2 ( *'*, 01 this (,'1 / ).,)+return this" (,')+/ ).,)+ return *this" ( *'*, 7 7*) ) ) "!" 20

# & 1 2 Stack& Stack::push( int element ) //w oryginalnej wersji bylo void Stack::push( int element ) if( state!= FULL ) table[ top++ ] = element; cout << "Pelny stos!" << endl; if( top >= MAX_SIZE ) state = FULL; '*this *Stack& state = OK; return *this; // zwraca referencje do biecego obiektu // i teraz moliwe jest kaskadowe wywołanie funkcji Stack s1; s1.push(5).push(10).push(15); // zamiast s1.push(5); s1.push(10); s1.push(15); *'3 *'.2*4- String a, b, c; // String& String::operator=(const String&); a = b = c = "Napis"; a.operator=(b.operator=(c.operator=("napis")));!" 21 # & 1 2 // jak to działa? // i teraz moliwe jest kaskadowe wywołanie funkcji Stack s1; s1.push(5).push(10).push(15); ( ** ".)*) + s1.push(5).push(10).push(15); )* )+push(5), 4'4 )+/ ( ' + *''+50 '0*' ) s1.push(10).push(15); ( // tak te jest poprawnie // i teraz moliwe jest kaskadowe wywołanie funkcji Stack s1; s1.push(5).push(10).push(15).print_stack()!" 22

# & ( )* '3' )*'/'',+'/50 "+* *private*)),) )5" ) '+') ( )friend '*')1 "@')*' H ) 2"1 this. E/,' 0/ 3 6$" *4/) '0, ( )*) +) friend)public, private, protected" '' *',"!" 23 # & class MyClass friend void fun ( MyClass& _p, int _a ); // funkcja zewntrzna (na zewntrz klasy) public: int a, b, c; ; void fun (MyClass& _p, int _a) // fun() posiada dostp do pól private klasy _p.a = _a; _p.b = _a + _p.c; int main() MyClass obj; ) / **) '*')1 )*) + ) )))).. ', / * *' )* fun ( obj, 10 ); // a nie Myclass.fun ( 10 ); gdy fun() NIE jest elementem klasy!" 24

# & ( ),34 +* 0)))* * ) (,-3/ / )'*')1 class MyClass public: void f(); void g(); ; class InnaKlasa // Myclass::f() posiada pełny dostp do pól prywatnych klasy Inna friend void MyClass::f(); int a, b, c; ; 7'*')1 7 +')."6$ 6$ 3"* *+*C!" 25 # & (,' )* '0+**4*2 ) ) + '* 64 '*')1 ) ( E&&?=&&?$ E)'*')1 '.==)'*')1 '.$ '0=)'*')1 'E " $'E *'2 5 " class One friend class Two; I)'*')1 /+.)'''+ *'*'. *4=+' 4 0- I)'*')1 /+.)'''+ ' 4=+' 4 0-!" 26

# & '*' ( E@:$,' /0+* )/ )',/D,'.'.' ( $%%0* ' ( *'' 0 )/+/ 42/ 4) ( ') +')4 ' ),/) / 4)) ( *'3,/ ' / 4J'2*''*, class X public: static int count; ; * ' )0*' K ( /'static' count)* / J ( /'static / +*, ' /0,/" ( 'static ' 2/ 4J ))' count X::X() Count++; ; X::~X() Count--; ; *' ' ' +' ' 'J ' )''!" 27 # & '*' ( )' ) '0'.'.K ( 'K@,' // ) ''') '/ ( $%% ) ' )' )7,/ 7 )E@:$')' ),/)" ( )' private *''' int X::Count = 0; // gdzie poza klas ( ' ')&*' ))" ).,./0,@'' / )-!" 28

# & ')' ( )'050 ' count K'/ 07' 7 getcount() ) public" (.))0'*5 ).,/ JE*',/ ' / 4) 2 4, ' 20KE,)2,/ K class X public: int getcount() const return Count static int Count; ; 2const")2 2/+' +*' '. 4 4" X obj1; X obj2; X obj3; int licznik = obj1.getcount(); // a dlaczego nie obj3.getcount();!" 29 # & ')' class X public: )' static int getcount() const eturn Count static int Count; ; int licznik = X::getCount(); *')+ +').' ' '@ '/ /" ( )'@*/ 1 2 ),,' 5) *) +/.- ( +*.))*' )' ( ) ')@,*5 / )!" 30

# & ')' ( ')./'*5 +*) *4'2, */ ).) 1 2 "@) +/'*5,"+* 246)' 0*'').*'7+' 7 1 / *'*' )" ( @&').+*'4'2) &'2 4 #include <iostream> using namespace std; class st int a; public: static int s_test ( st* obiekt ) obiekt->a = 5; return (obiekt->a); ; int main() st ob1; cout << ob1.s_test( &ob1 ); return 0;!" 31 # & '*' ( **' *4 '2 // emp.h class Employee public: Employee( const char *, const char * ); ~Employee(); const char *getfirstname() const; const char *getlastname() const; // static member function static int getcount(); // constructor // destructor // return first name // return last name // return # objects instantiated char *firstname; char *lastname; // static memeber data static int Count; // number of objects instantiated ;!" 32

# & '*' // emp.cpp int Employee::Count = 0; // define and initialize static data member int Employee::getCount() return Count; Employee::Employee( const char *first, const char *last ) // konstruktor firstname = new char[ strlen( first ) + 1 ]; strcpy( firstname, first ); lastname = new char[ strlen( last ) + 1 ]; strcpy( lastname, last ); ++count; // increment static count of employees Employee::~Employee() delete [] firstname; delete [] lastname; --count; // decrement static count of employees const char *Employee::getFirstName() const // const before return type prevents client from modifying // private data; client should copy returned string before // destructor deletes storage to prevent undefined pointer return firstname; const char *Employee::getLastName() const // const before return type prevents client from modifying // private data; client should copy returned string before // destructor deletes storage to prevent undefined pointer return lastname; // destruktor 2 *2 const /+' )''4 0!" 33 # & '*' // main.cpp int main() cout << "Number of employees before instantiation is " << Employee::getCount() << endl; // use class name Employee Employee *e1ptr = new Employee( "Susan", "Baker" ); Employee *e2ptr = new Employee( "Robert", "Jones" ); cout << "Number of employees after instantiation is " << e1ptr->getcount(); // this time use object's pointer cout << "\n\nemployee 1: " // employees and their data << e1ptr->getfirstname() << " " << e1ptr->getlastname() << "\nemployee 2: " << e2ptr->getfirstname() << " " << e2ptr->getlastname() << "\n\n"; delete e1ptr; e1ptr = 0; delete e2ptr; e2ptr = 0; // disconnect pointer from free-store space // as above cout << "Number of employees after deletion is " << Employee::getCount() << endl; // use class name Employee return 0;!" 34