Ssak::Ssak(Ssak& ref):waga(ref.ile_wazy()) {cout << "Konstruktor kopiujacy klasy Ssak...\n";} 1

Podobne dokumenty
Ssak::Ssak(Ssak& ref):waga(ref.ile_wazy()) {cout << "Konstruktor kopiujacy klasy Ssak...\n";} 1

Owad():waga(1),jadowitosc(false) {cout<<"konstruktor domyslny owada\n";}

Dziedziczenie ze wspólnej klasy bazowej. Amfibia

STL: Lekcja 1&2. Filozofia STL

Programowanie i struktury danych

class Samochod { void Ruch(); }; class Amfibia : public Samochod { void Ruch(); // amfibie pływają };

string Rodzaj[4]= {"TV ", "wieza ", "DVD ", "kino "}; string Producent[4]={"Phillips", "Sony ", "Sanyo ", "Samsung "};

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.


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

Plik klasy. h deklaracje klas

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Przeciążenie funkcji w C++ Mechanizm pozwalający na użycie tej samej funkcji do zdefiniowania kilku funkcji o takich samych listach parametrów.

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

Język C++ wykład VIII

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43

Szablon klasy std::vector

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

Programowanie w C++ Wykład 7. Katarzyna Grzelak. 23 kwietnia K.Grzelak (Wykład 7) Programowanie w C++ 1 / 40

Kontenery i iteratory. Wykorzystanie kontenerów w praktyce.

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

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

dr inż. Jarosław Forenc

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

Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.)

Zaawansowane programowanie w języku C++ Biblioteka standardowa

ATD. Wykład 8. Programowanie (język C++) abstrakcyjny typ danych. Abstrakcyjne typy danych (ATD) Metody czysto wirtualne. Definicje i uwagi:

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

Identyfikacje typu na etapie. wykonania (RTTI)

Biblioteka obiektowa C++ klasa string - parę przykładów programów Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ

Składnia C++ Programowanie Obiektowe, część 3 Mateusz Cicheński

Kurs programowania. Wykład 9. Wojciech Macyna

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

Projektowanie klas c.d. Projektowanie klas przykład

Aby uzyskać zaliczenie w pierwszym terminie (do 30 stycznia 2018) rozliczyć trzeba co najmniej 8 projektów, po 4 z każdej z części: C++ oraz Python.

Wstęp do Programowania 2

Algorytmy i Struktury Danych.

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

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

Operatory na rzecz typu TString

Programowanie Obiektowew języku C++ Zadania L9

Szablon klasy std::list

Języki programowania obiektowego Nieobiektowe elementy języka C++

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

Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

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

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

W przypadku STL w specyfikacji nazwy pliku nagłówkowego brak rozszerzenia tj. <string> <string.h> zamiast

Paradygmaty programowania

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

Programowanie obiektowe w C++ Wykład 12

Techniki Programowania wskaźniki

class Student Deklaracja klasy Osoba: Deklaracja klasy Student:

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

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

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Programowanie w C++ z użyciem kontenerów - parę przykładów programów Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ

Modelowanie numeryczne w fizyce atmosfery Ćwiczenia 3

Języki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński

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

Podstawy Programowania

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

Podstawy programowania

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

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

obiekty funkcyjne - funktory

Jak Windows zarządza pamięcią?

Część 4 życie programu

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31

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

tablica: dane_liczbowe

Cena szkolenia. Opis kursu

TEMAT : KLASY POLIMORFIZM

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

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Kontrola przebiegu programu

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

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

Wstęp do programowania

Wstęp do Programowania 2

Pliki wykład 2. Dorota Pylak

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

Laboratorium 2. Funkcje wirtualne

Symfonia C++ standard : programowanie w języku C++ orientowane obiektowo. T. 1 / Jerzy Grębosz. Wyd. 3 C - popr. Kraków, 2015.

typ y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury

Wstęp do Informatyki

Programowanie Obiektowew języku C++ Zadania L8

Klasa std::string. Bogdan Kreczmer. ZPCiR IIAiR PWr pokój 307 budynek C3.

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Podstawy programowania w języku C++

dr inż. Jarosław Forenc

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:

Programowanie obiektowe i C++ dla matematyków

STL Standardt Template Library (wprowadzenie)

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

Operacje wejścia/wyjścia (odsłona druga) - pliki

Programowanie Obiektowe i C++

Transkrypt:

/* Wirtualny konstruktor kopiujący*/ #include<iostream> using namespace std; class Ssak public: Ssak(int w):waga(w) cout<<"konstruktor klasy Ssak...\n"; } Ssak (Ssak& ref); virtual void Glos()cout<<"Glos ssaka\n";} virtual Ssak* Klonuj() return new Ssak(*this);} int Ile_wazy() return this->waga;} protected: int waga; }; Ssak::Ssak(Ssak& ref):waga(ref.ile_wazy()) cout << "Konstruktor kopiujacy klasy Ssak...\n";} 1

class Pies : public Ssak public: Pies():Ssak(10) cout<<"konstruktor klasy Pies...\n";} Pies(Pies & ref); virtual Ssak* Klonuj() return new Pies(*this);} void Glos()cout<<"Hau\n";} }; Pies::Pies(Pies& ref):ssak(ref) cout<<"konstruktor kopiujacy klasy Pies...\n";} class Kot : public Ssak public: Kot():Ssak(2) cout<<"konstruktor klasy Kot...\n";} Kot (Kot& ref); virtual Ssak* Klonuj() return new Kot(*this);} void Glos()cout<<"Miau\n";} }; 2

Kot::Kot(Kot& ref):ssak(ref) cout<<"konstruktor kopiujacy klasy Kot...\n";} enum ZWIERZAKI SSAK, KOT, PIES}; void main() Ssak *tablica [3]; Ssak* ptr; int wybor; for (int i = 0; i < 3; i++) cout<<"(1)pies (2)kot (3)ssak : "; cin>>wybor; switch (wybor) case PIES: ptr = new Pies; break; case KOT: ptr = new Kot; break; default: ptr = new Ssak(1); break; } 3

} tablica[i]=ptr; Ssak *tablica1[3]; for (int i = 0; i < 3 ; i++) tablica[i]->glos(); tablica1[i]=tablica[i]->klonuj(); } } cout<<"po sklonowaniu :\n\n"; for (int i = 0; i < 3; i++) cout<<"tablica1["<<i<<"]\n"; tablica1[i]->glos(); cout<<"waga : "<<tablica1[i]->ile_wazy()<<endl; } system("pause"); 4

(1)pies (2)kot (3)ssak : 1 Konstruktor klasy Ssak... Konstruktor klasy Kot... (1)pies (2)kot (3)ssak : 2 Konstruktor klasy Ssak... Konstruktor klasy Pies... (1)pies (2)kot (3)ssak : 3 Konstruktor klasy Ssak... Miau Konstruktor kopiujacy klasy Ssak... Konstruktor kopiujacy klasy Kot... Hau Konstruktor kopiujacy klasy Ssak... Konstruktor kopiujacy klasy Pies... Glos ssaka Konstruktor kopiujacy klasy Ssak... 5

Po sklonowaniu : tablica1[0] Miau Waga : 2 tablica1[1] Hau Waga : 10 tablica1[2] Glos ssaka Waga : 1 Press any key to continue... 6

// Użycie static_cast i dynamic_cast #include <iostream> using namespace std; class Zwierze public: virtual void Glos() = 0; }; class Pies : public Zwierze public: void Aktywnosc()cout<<"Pies : Macham ogonem!!"<<endl;} void Glos()cout<<"Pies : Hau hau!!"<<endl;} }; 7

class Kot : public Zwierze public: void Aktywnosc()cout<<"Kot : Zlapalem mysz!!"<<endl;} void Glos()cout<<"Kot : Miau miau!!"<<endl;} }; void ID(Zwierze* pzwierze); void main() Zwierze* pzwierze1 = new Pies; Zwierze* pzwierze2 = new Kot; } ID(pZwierze1); pzwierze1->glos(); //pzwierze1->aktywnosc(); ID(pZwierze2); pzwierze2->glos(); //pzwierze2->aktywnosc(); system("pause"); 8

void ID(Zwierze* pzwierze) Pies* ppies = static_cast<pies*>(pzwierze); if(ppies) cout<<"zwierze to pies"<<endl; ppies->glos(); ppies->aktywnosc(); } Kot* pkot = dynamic_cast<kot*>(pzwierze); if(pkot) cout<<"zwierze to kot"<<endl; pkot->glos(); pkot->aktywnosc(); } } 9

Zwierze to pies Pies : Hau hau!! Pies : Macham ogonem!! Pies : Hau hau!! Zwierze to pies Kot : Miau miau!! Pies : Macham ogonem!! Zwierze to kot Kot : Miau miau!! Kot : Zlapalem mysz!! Kot : Miau miau!! Press any key to continue... 10

// Użycie reinterpret_cast static_cast dynamic_cast #include <iostream> using namespace std; class Zwierze public: virtual void Aktywnosc() = 0; }; class Pies : public Zwierze public: void Aktywnosc()cout<<"Pies : Macham ogonem!!"<<endl;} }; class Kot : public Zwierze public: void Aktywnosc()cout<<"Kot : Zlapalem mysz!!"<<endl;} }; 11

void main() Zwierze* Podworko[8]; Podworko[0] = new Pies; Podworko[1] = new Kot; cout<<"elementy pierwotne :\n"; Podworko[0]->Aktywnosc(); Podworko[1]->Aktywnosc(); Podworko[2]=reinterpret_cast<Pies*>(Podworko[1]); Podworko[3]=reinterpret_cast<Kot*>(Podworko[0]); cout<<"reinterpret_cast :\nbylem kotem\n"; Podworko[2]->Aktywnosc(); cout<<"bylem psem\n"; Podworko[3]->Aktywnosc(); Podworko[4]=static_cast<Pies*>(Podworko[1]); Podworko[5]=static_cast<Kot*>(Podworko[0]); cout<<"static_cast :\nbylem kotem\n"; Podworko[4]->Aktywnosc(); cout<<"bylem psem\n"; Podworko[5]->Aktywnosc(); 12

/*Podworko[6]=dynamic_cast<Pies*>(Podworko[1]); Podworko[7]=dynamic_cast<Kot*>(Podworko[0]); cout<<"dynamic_cast :\nbylem kotem\n"; Podworko[6]->Aktywnosc(); cout<<"bylem psem\n"; Podworko[7]->Aktywnosc(); program się kompiluje, ale pada przy wykonaniu*/ } system("pause"); 13

Elementy pierwotne : Pies : Macham ogonem!! Kot : Zlapalem mysz!! reinterpret_cast : Bylem kotem Kot : Zlapalem mysz!! Bylem psem Pies : Macham ogonem!! static_cast : Bylem kotem Kot : Zlapalem mysz!! Bylem psem Pies : Macham ogonem!! Press any key to continue... 14

// Użycie reinterpret_cast static_cast i dynamic_cast #include <iostream> using namespace std; class Pies public: void Aktywnosc()cout<<"Pies : Macham ogonem!!"<<endl;} }; class Kot public: void Aktywnosc()cout<<"Kot : Zlapalem mysz!!"<<endl;} }; void main() Pies* psy[4]; Kot* koty[4]; 15

psy[0] = new Pies; koty[0] = new Kot; cout<<"elementy pierwotne :\n"; psy[0]->aktywnosc(); koty[0]->aktywnosc(); psy[1]=reinterpret_cast<pies*>(koty[0]); koty[1]=reinterpret_cast<kot*>(psy[0]); cout<<"reinterpret_cast :\nbylem kotem\n"; psy[1]->aktywnosc(); cout<<"bylem psem\n"; koty[1]->aktywnosc(); /*psy[2]=static_cast<pies*>(koty[0]); koty[2]=static_cast<kot*>(psy[0]); cout<<"static_cast :\nbylem kotem\n"; psy[2]->aktywnosc(); cout<<"bylem psem\n"; koty[2]->aktywnosc(); psy[3]=dynamic_cast<pies*>(koty[0]); koty[3]=dynamic_cast<kot*>(psy[0]); cout<<"dynamic_cast :\nbylem kotem\n"; psy[3]->aktywnosc(); cout<<"bylem psem\n"; 16

koty[3]->aktywnosc(); Pies Azor=reinterpret_cast<Pies>(*koty[0]);*/ Pies& Reks=reinterpret_cast<Pies&>(*koty[0]); cout<<"reinterpret_cast referencja do obiektu :\nbylem kotem\n"; Reks.Aktywnosc(); } system("pause"); Elementy pierwotne : Pies : Macham ogonem!! Kot : Zlapalem mysz!! reinterpret_cast : Bylem kotem Pies : Macham ogonem!! Bylem psem Kot : Zlapalem mysz!! reinterpret_cast referencja do obiektu : Bylem kotem Pies : Macham ogonem!! Press any key to continue... 17

1>e:\praca\dydaktyka\programowanie obiektowe\visual project\wykład 2016\w_10_09\w_10_09\w_10_09.cpp(33) : error C2440: 'static_cast' : cannot convert from 'Kot *' to 'Pies *' 1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast 1>e:\praca\dydaktyka\programowanie obiektowe\visual project\wykład 2016\w_10_09\w_10_09\w_10_09.cpp(34) : error C2440: 'static_cast' : cannot convert from 'Pies *' to 'Kot *' 1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast 1>e:\praca\dydaktyka\programowanie obiektowe\visual project\wykład 2016\w_10_09\w_10_09\w_10_09.cpp(39) : error C2683: 'dynamic_cast' : 'Kot' is not a polymorphic type 1> e:\praca\dydaktyka\programowanie obiektowe\visual project\wykład 2016\w_10_09\w_10_09\w_10_09.cpp(13) : see declaration of 'Kot' 1>e:\praca\dydaktyka\programowanie obiektowe\visual project\wykład 2016\w_10_09\w_10_09\w_10_09.cpp(40) : error C2683: 'dynamic_cast' : 'Pies' is not a polymorphic type 1> e:\praca\dydaktyka\programowanie obiektowe\visual project\wykład 2016\w_10_09\w_10_09\w_10_09.cpp(7) : see declaration of 'Pies' 1>e:\praca\dydaktyka\programowanie obiektowe\visual project\wykład 2016\w_10_09\w_10_09\w_10_09.cpp(46) : error C2440: 'reinterpret_cast' : cannot convert from 'Kot' to 'Pies' 1> Conversion requires a constructor or user-defined-conversion operator, which can't be used by const_cast or reinterpret_cast 1>Build log was saved at "file://e:\praca\dydaktyka\programowanie obiektowe\visual Project\Wykład 2016\W_10_09\W_10_09\Debug\BuildLog.htm" 1>W_10_09-5 error(s), 0 warning(s) 18

Standardowa biblioteka wzorców (STL) Zestaw klas i funkcji wzorcowych dostarczających: 1. Kontenerów do przechowywania informacji 2. Iteratorów służących do uzyskiwania dostępu do przechowywanych informacji 3. Algorytmów pozwalających na manipulowanie treścią znajdującą się w kontenerach Kontenery STL: - sekwencyjne (przechowują dane sekwencyjnie podobnie jak tablice czy listy krótki czas wstawiania, długi wyszukiwania) - asocjacyjne (dane w postaci posortowanej dłuższy czas wstawiania, krótszy wyszukiwania) 19

Kontenery sekwencyjne std::vector std::deque Szybkie wstawianie elementu na końcu, dostęp podobny do tablicy Jak vector, możliwość wstawiania elementów na początku Zmiana wielkości może skutkować spadkiem wydajności, czas wyszukiwania proporcjonalny do liczby elementów Nie wymaga funkcji reserve () rezerwacja pamięci std::list Stały czas wstawiania na końcu i w środku listy, czas usuwania niezależny od położenia elementu Brak swobodnego dostępu do do elementów na podstawie ich indeksu 20

Kontenery asocjacyjne: std::set, std::multiset, std::map, std::multimap (pary kluczwartość) std::find Podstawowe algorytmy STL: std::find_if wyszukanie wartości std::reverse odwrócenie kolejności std::remove_if usunięcie std::transform - przekształcenie 21

Klasa STL string Służy do pracy z ciągami tekstowymi. Ułatwia: Kopiowanie Łączenie ciągów Wyszukiwanie znaków i podciągów tekstowych Skracanie Odwracanie zawartości ciągu tekstowego 22

// Ustanawianie i kopiowanie obiektów klasy string #include<string> #include<iostream> using namespace std; int main() const string lancuch_1("abcdefghijklmnop"); char* lancuch_2 ="ABCDEFGHIJKLMNOP" ; //string lancuch_3=const_cast<string>(lancuch_1); string lancuch_3=lancuch_2; lancuch_3+="qrst"; cout<<"lancuch_3 : "<<lancuch_3<<endl; string kopia_1 (lancuch_1); string kopia_2 (lancuch_2); cout<<"kopia 1 : "<<kopia_1<<endl; cout<<"kopia 2 : "<<kopia_2<<endl; string kopia_3(lancuch_3,6); cout <<"kopia 3 : " << kopia_3 <<endl; string kopia_3_1(lancuch_1,0,6); cout <<"kopia 3_1 : " << kopia_3 <<endl; 23

string kopia_4(lancuch_1,4,6); cout <<"kopia 4 : " << kopia_4 <<endl; string kopia_5(lancuch_2,6); cout <<"kopia 5 : " << kopia_5 <<endl; string kopia_6(lancuch_1,4,6); cout <<"kopia 6 : " << kopia_6 <<endl; } //Inicjalizacja obiektu z 4 znakami X string lancuch_4(4, 'X'); cout <<"lancuch_4 :" << lancuch_4 <<endl; system("pause"); 24

lancuch_3 : ABCDEFGHIJKLMNOPQRST kopia 1 : ABCDEFGHIJKLMNOP kopia 2 : ABCDEFGHIJKLMNOP kopia 3 : GHIJKLMNOPQRST kopia 3_1 : GHIJKLMNOPQRST kopia 4 : EFGHIJ kopia 5 : ABCDEF kopia 6 : EFGHIJ lancuch_4 :XXXX Press any key to continue... 25

// Dostęp do elementów składowych obiektu STL string #include<string> #include<iostream> using namespace std; void main() string lancuch_1("abcdefghijkl"); cout <<"Wyswietlenie zawartosci za pomoca tablicy :" <<endl; for (int k = 0; k < lancuch_1.length(); ++ k) cout <<"Znak [" << k <<"] to: "; cout << lancuch_1[k] <<endl; } cout <<endl; 26

//Dostęp do ciągu za pomocą iteratorów cout <<"Wyswietlenie znakow za pomoca iteratorow :" <<endl; int i = 0; string::iterator iter; for (iter = lancuch_1.begin() ; iter!= lancuch_1.end(); ++ iter) cout <<"Znak [" << i ++ <<"] to: "; cout << *iter <<endl; } cout <<endl; // Dostęp do zawartości jak do ciągu w stylu C } cout << "Reprezentacja char* ciagu to : "; cout << lancuch_1.c_str() <<endl; system("pause"); 27

Wyswietlenie zawartosci za pomoca tablicy : Znak [0] to: a Znak [1] to: b Znak [2] to: c Znak [3] to: d Znak [4] to: e Znak [5] to: f Znak [6] to: g Znak [7] to: h Znak [8] to: i Znak [9] to: j Znak [10] to: k Znak [11] to: l Wyswietlenie znakow za pomoca iteratorow : Znak [0] to: a Znak [1] to: b Znak [2] to: c Znak [3] to: d Znak [4] to: e Znak [5] to: f Znak [6] to: g Znak [7] to: h Znak [8] to: i Znak [9] to: j Znak [10] to: k Znak [11] to: l Reprezentacja char* ciagu to : abcdefghijkl Press any key to continue... 28

// Łączenie ciągów tekstowych #include<string> #include<iostream> using namespace std; void main() string przyklad_1 ("Przyklad 1"); string przyklad_2 (" i drugi."); //Łączenie przyklad_1 += przyklad_2; cout << przyklad_1 << endl; } string przyklad_3 (" Mozna dodac trzeci!"); przyklad_1.append (przyklad_3); cout << przyklad_1 << endl; char* wskaznik = " Wskaznik tez mozna dodac!"; przyklad_1.append(wskaznik); cout << przyklad_1 << endl; system("pause"); 29

Przyklad 1 i drugi. Przyklad 1 i drugi. Mozna dodac trzeci! Przyklad 1 i drugi. Mozna dodac trzeci! Wskaznik tez mozna dodac! Press any key to continue... 30

// Iterator #include<iostream> #include<string> using namespace std; void main() int k; string lancuch="abcdefghijklmnopqrstuvwxyz"; string::iterator iter=lancuch.begin(); cout<<"poczatek lancucha to : "<<*iter; cout<<"\njedziemy w prawo o "; cin>>k; iter+=k; cout<<"pozycji i jestesmy w "<<*iter<<endl; iter=lancuch.end()-1; cout<<"koniec lancucha to : "<<*iter; cout<<"\njedziemy w lewo o "; cin>>k; iter-=k; cout<<"pozycji i jestesmy w "<<*iter<<endl; system("pause"); } 31

Poczatek lancucha to : A Jedziemy w prawo o 10 pozycji i jestesmy w K Koniec lancucha to : Z Jedziemy w lewo o 12 pozycji i jestesmy w N Press any key to continue... 32

// Użycie std::find #include<string> #include<iostream> using namespace std; void main() string lancuch ("abcd efgh ijkl mnop rst abcdefgh "); cout << "Przykladowy ciag tekstowy to:" << endl; cout << lancuch <<endl << endl; size_t pozycja = lancuch.find ("efgh",0); if (pozycja!= string::npos) //npos przyjmuje wartosc -1 cout <<"Pierwsze wystapienie 'efgh' nastapilo w pozycji " << pozycja; else cout <<"Nie znaleziono slowa 'efgh'"; cout << endl <<endl; 33

} // Lokalizacja wszystkich wystapien size_t pozycja_1 = lancuch.find("abcd", 0); while (pozycja_1!= string::npos) cout <<"Slowo abcd znaleziono w polozeniu " << pozycja_1<<endl; //Funkcja find wyszukuje dalej size_t pozycja_2 = pozycja_1 +1; pozycja_1 = lancuch.find("abcd", pozycja_2); } cout <<endl; system("pause"); Przykladowy ciag tekstowy to: abcd efgh ijkl mnop rst abcdefgh Pierwsze wystapienie 'efgh' nastapilo w pozycji 5 Slowo abcd znaleziono w polozeniu 0 Slowo abcd znaleziono w polozeniu 24 Press any key to continue... 34

// Dzialania na zawartosci ciągu tekstowego #include<string> #include<algorithm> #include<iostream> using namespace std; void main() string lancuch ("abcdefghijklmnoqprstuvwxyzabceefghijklmnopqrstuvwxyz0123456789" ); cout << "Poczatkowa wartosc ciagu to: " <<endl; cout << lancuch <<endl<<endl; //Odwracanie ciagu tekstowego string lancuch_1(lancuch); reverse(lancuch.begin(),lancuch.end()); cout<<"ciag odwrocony :"<<endl; cout << lancuch <<endl<<endl; //Usuniecie 10 znaków od 15 cout << "10 znakow od 15 zostalo usunietych" <<endl; lancuch_1.erase(14,10); cout <<lancuch_1<<endl<<endl; 35

// Usuniecie P cout <<"Usuniecie P"<<endl<<endl; string::iterator iter = find(lancuch.begin(),lancuch.end(),'p'); if(iter!= lancuch.end()) lancuch.erase(iter); cout <<lancuch <<endl<<endl; //Usuniecie znakow za pomoca przeciazonej wersji erase() cout<<"usuniecie zakresu znakow od begin do end"<<endl<<endl; lancuch.erase(lancuch.begin(),lancuch.end()); if (lancuch.length() ==0) cout<<"ciag tekstowy jest pusty"<<endl; // Konwersja wiekości znaków transform(lancuch_1.begin(),lancuch_1.end(),lancuch_1.begin(), toupper); cout << "Ciag w ktorym znaki skonwertowano na duze: " <<endl; cout << lancuch_1 <<endl<<endl; transform(lancuch_1.begin(),lancuch_1.end(),lancuch_1.begin(), tolower); 36

cout << "Ciag w ktorym znaki skonwertowano na male: " <<endl; cout << lancuch_1 <<lancuch_1<<endl; system("pause"); } 37

Poczatkowa wartosc ciagu to: abcdefghijklmnoqprstuvwxyzabceefghijklmnopqrstuvwxyz0123456789 Ciag odwrocony : 9876543210ZYXWVUTSRQPONMLKJIHGFEECBAzyxwvutsrpqonmlkjihgfedcba 10 znakow od 15 zostalo usunietych abcdefghijklmnyzabceefghijklmnopqrstuvwxyz0123456789 Usuniecie P 9876543210ZYXWVUTSRQONMLKJIHGFEECBAzyxwvutsrpqonmlkjihgfedcba Usuniecie zakresu znakow od begin do end Ciag tekstowy jest pusty Ciag w ktorym znaki skonwertowano na duze: ABCDEFGHIJKLMNYZABCEEFGHIJKLMNOPQRSTUVWXYZ0123456789 Ciag w ktorym znaki skonwertowano na male: abcdefghijklmnyzabceefghijklmnopqrstuvwxyz0123456789abcdefghij klmnyzabceefghijkl mnopqrstuvwxyz0123456789 Press any key to continue... 38