Wstęp do Programowania 2

Wielkość: px
Rozpocząć pokaz od strony:

Download "Wstęp do Programowania 2"

Transkrypt

1 Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 8

2 Przykład realizowany na wykładzie Klasy StringBad i String. Wstępne pliki załaczone jako źródła. Przykład z ksi ażki: Stephen Prata. Język C++. Szkoła programowania. Wydanie V.

3 StringBad - interfejs #include <iostream> #ifndef STRNGBAD_H_ #define STRNGBAD_H_ class StringBad { private: char * str; // wskaznik ciagu int len; // dlugosc ciagu static int num_strings; // liczba obiektow public: StringBad(const char * s); // konstruktor StringBad(); // konstruktor domyslny ~StringBad(); // destruktor // funkcja zaprzyjazniona friend std::ostream & operator<<(std::ostream & os, const StringBad & st); ; #endif

4 Uwagi do przykładu Składowa statyczna, np. static int num_strings;, ma specjalna własność: program tworzy tylko jedna jej kopię, niezależnie od tego ile obiektów danej klasy zostało powołanych do życie. Wniosek: składowa statyczna jest współdzielona przez wszytkie obiekty klasy.

5 Klasa StringBad - implementacja #include <cstring> #include "strngbad.h" using std::cout; // inicjalizacja statycznej skladowej klasy int StringBad::num_strings = 0; // metody klasy // konstruuje obiekt StringBad na bazie ciagu jezyka C StringBad::StringBad(const char * s) { len = std::strlen(s); // ustalenie rozmiaru str = new char[len + 1]; // przydzial odpowiedniej ilosci pamieci std::strcpy(str, s); // inicjalizacja wskaxnika num_strings++; // uaktualnienie licznika obiektów cout << num_strings << ": \"" << str << "\" - obiekt utworzony.\n"; // komunikat diagnostyczny

6 Uwagi do przykładu Składowej statycznej nie można inicjalizować wewnatrz deklaracji klasy, gdyż deklaracja ta zawiera jedynie opis sposobu alokacji pamięci, jednak samej alokacji nie wykonuje. Alokacja i inicjalizacja pamięci dokonuje się w momencie utworzenia obiektu danej klasy. Pola statyczne inicjalizowane sa niezależnie za pomoca instrukcji znajdujacej się poza deklaracja klasy - powodem jest fakt, że składowe statyczne nie sa przechowywane jako część obiektu.

7 Klasa StringBad - implementacja StringBad::StringBad() // konstruktor domyslny { len = 4; str = new char[4]; std::strcpy(str, "C++"); // ciag domyslny num_strings++; cout << num_strings << ": \"" << str << "\" - obiekt domyslny utworzony.\n"; // komunikat diagnostyczny StringBad::~StringBad() // niezbedny teraz destruktor { cout << "\"" << str << "\" - obiekt usuniety, ";// diagnostyka --num_strings; // koniecznosc cout << "sa jeszcze " << num_strings << ".\n"; // diagnostyka delete [] str; // koniecznosc std::ostream & operator<<(std::ostream & os, const StringBad & st) { os << st.str; return os;

8 Klasa StringBad - test dzialania operatorow new i delete #include <iostream> using std::cout; #include "strngbad.h" void callme1(stringbad &); // obiekt przekazywany przez referencje void callme2(stringbad); // obiekt przekazywany przez wartosc int main() { using std::endl; StringBad headline1("niech zyje bal!"); StringBad headline2("ferie tuz tuz..."); StringBad sports("narciarstwo"); cout << "Z ostatniej chwili: " << headline1 << endl; cout << "Temat dnia: " << headline2 << endl; cout << "Wiadomosci sportowe: " << sports << endl; callme1(headline1); cout << "Z ostatniej chwili: " << headline1 << endl; callme2(headline2); cout << "Temat dnia: " << headline2 << endl; cout << "Inicjalizacja obiektu ciagu innym obiektem:\n"; StringBad sailor = sports; cout << "Z kraju: " << sailor << endl; cout << "Przypisanie obiektu do innego obiektu:\n"; StringBad knot; knot = headline1; cout << "Ze swiata: " << knot << endl; cout << "Koniec main()\n"; return 0;

9 Klasa StringBad - test dzialania operatorow new i delete #include <iostream> using std::cout; #include "strngbad.h" void callme1(stringbad &); // obiekt przekazywany przez referencje void callme2(stringbad); // obiekt przekazywany przez wartosc int main() {... void callme1(stringbad & rsb) { cout << "Obiekt ciagu przekazany przez referencje:\n"; cout << " \"" << rsb << "\"\n"; void callme2(stringbad sb) { cout << "Obiekt ciagu przekazany przez wartosæ:\n"; cout << " \"" << sb << "\"\n";

10 Klasa StringBad - test dzialania operatorow new i delete bws@bws:~/wyklady/wstepdoprog2/wyklad8$./a.out 1: "Niech zyje bal!" - obiekt utworzony. 2: "Ferie tuz tuz..." - obiekt utworzony. 3: "Narciarstwo" - obiekt utworzony. Z ostatniej chwili: Niech zyje bal! Temat dnia: Ferie tuz tuz... Wiadomosci sportowe: Narciarstwo Obiekt ciagu przekazany przez referencje: "Niech zyje bal!" Z ostatniej chwili: Niech zyje bal! Obiekt ciagu przekazany przez wartosc: "Ferie tuz tuz..." "Ferie tuz tuz..." - obiekt usuniety, sa jeszcze 2. Temat dnia: Inicjalizacja obiektu ciagu innym obiektem: Z kraju: Narciarstwo Przypisanie obiektu do innego obiektu: 3: "C++" - obiekt domyslny utworzony. Ze swiata: Niech zyje bal! Koniec main() "Niech zyje bal!" - obiekt usuniety, sa jeszcze 2. "Narciarstwo" - obiekt usuniety, sa jeszcze 1. "" - obiekt usuniety, sa jeszcze 0. *** glibc detected ***./a.out: double free or corruption (fasttop): 0x ffe050 *** ======= Backtrace: ========= /lib/x86_64-linux-gnu/libc.so.6(+0x78a96)[0x7f33cc61ca96]./a.out[0x400e9f]... ======= Memory map: ======== rw-p :

11 Gdzie jest problem???? #include <iostream> using std::cout; #include "strngbad.h" void callme1(stringbad &); // obiekt przekazywany przez referencje void callme2(stringbad); // obiekt przekazywany przez wartosc int main() { using std::endl; StringBad headline1("niech zyje bal!"); StringBad headline2("ferie tuz tuz..."); StringBad sports("narciarstwo"); cout << "Z ostatniej chwili: " << headline1 << endl; cout << "Temat dnia: " << headline2 << endl; cout << "Wiadomosci sportowe: " << sports << endl; //... return 0;

12 Wykonanie problemu brak 1: "Niech zyje bal!" - obiekt utworzony. 2: "Ferie tuz tuz..." - obiekt utworzony. 3: "Narciarstwo" - obiekt utworzony. Z ostatniej chwili: Niech zyje bal! Temat dnia: Ferie tuz tuz... Wiadomosci sportowe: Narciarstwo "Narciarstwo" - obiekt usuniety, sa jeszcze 2. "Ferie tuz tuz..." - obiekt usuniety, sa jeszcze 1. "Niech zyje bal!" - obiekt usuniety, sa jeszcze 0. bws@bws:~/wstepdoprog2/wyklad8$

13 Gdzie jest problem???? #include <iostream> using std::cout; #include "strngbad.h" void callme1(stringbad &); // obiekt przekazywany przez referencje void callme2(stringbad); // obiekt przekazywany przez wartosc int main() { using std::endl; StringBad headline1("niech zyje bal!"); StringBad headline2("ferie tuz tuz..."); StringBad sports("narciarstwo"); cout << "Z ostatniej chwili: " << headline1 << endl; cout << "Temat dnia: " << headline2 << endl; cout << "Wiadomosci sportowe: " << sports << endl; callme1(headline1); cout << "Z ostatniej chwili: " << headline1 << endl; //... return 0;

14 Wykonanie problemu brak 1: "Niech zyje bal!" - obiekt utworzony. 2: "Ferie tuz tuz..." - obiekt utworzony. 3: "Narciarstwo" - obiekt utworzony. Z ostatniej chwili: Niech zyje bal! Temat dnia: Ferie tuz tuz... Wiadomosci sportowe: Narciarstwo Obiekt ciagu przekazany przez referencje: "Niech zyje bal!" Z ostatniej chwili: Niech zyje bal! "Narciarstwo" - obiekt usuniety, sa jeszcze 2. "Ferie tuz tuz..." - obiekt usuniety, sa jeszcze 1. "Niech zyje bal!" - obiekt usuniety, sa jeszcze 0. bws@bws:~/wstepdoprog2/wyklad8$

15 Gdzie jest problem???? #include <iostream> using std::cout; #include "strngbad.h" void callme1(stringbad &); // obiekt przekazywany przez referencje void callme2(stringbad); // obiekt przekazywany przez wartosc int main() { using std::endl; StringBad headline1("niech zyje bal!"); StringBad headline2("ferie tuz tuz..."); StringBad sports("narciarstwo"); cout << "Z ostatniej chwili: " << headline1 << endl; cout << "Temat dnia: " << headline2 << endl; cout << "Wiadomosci sportowe: " << sports << endl; callme1(headline1); cout << "Z ostatniej chwili: " << headline1 << endl; callme2(headline2); cout << "Temat dnia: " << headline2 << endl //... return 0;

16 Wykonanie problemu nr 1 1: "Niech zyje bal!" - obiekt utworzony. 2: "Ferie tuz tuz..." - obiekt utworzony. 3: "Narciarstwo" - obiekt utworzony. Z ostatniej chwili: Niech zyje bal! Temat dnia: Ferie tuz tuz... Wiadomosci sportowe: Narciarstwo Obiekt ciagu przekazany przez referencje: "Niech zyje bal!" Z ostatniej chwili: Niech zyje bal! Obiekt ciagu przekazany przez wartosc: "Ferie tuz tuz..." "Ferie tuz tuz..." - obiekt usuniety, sa jeszcze 2. Temat dnia: "Narciarstwo" - obiekt usuniety, sa jeszcze 1. "" - obiekt usuniety, sa jeszcze 0. "Niech zyje bal!" - obiekt usuniety, sa jeszcze -1.

17 Problem nr 1 Z jakiegos powodu przekazanie obiektu headline2 w argumencie funkcji callme2(headline2); powoduje wywołanie destruktora. Przekazanie przez wartość powinno zabezpieczać przed modyfikacja orginału, ale w naszym przypadku tak nie jest! Skad powyższe problemy: z automatycznego definiowania niejwnych funkcji składowych, których zachowanie nie jest zgodne z założeniami jakie - według programisty - powinna spełniać klasa. Dokładniej: Konstruktor kopiujący i Operator przypisania. Domyślny konstruktor kopiujacy nie zadbał o pole statyczne i wykonał tzw. kopiowanie płytkie. Domyślny operator przypisania również wykonał kopiowanie płytkie.

18 Konstruktor kopiujacy Postać: NazwaKlasy (const NazwaKlasy &); Zadaniem konstruktora kopiujacego jest kopiowanie obiektu istniejacego do obiektu nowo tworzonego. Konstrukora kopiujacego używa się w czasie inicjalizacji, ale nie używa się podczas zwykłego przypisania. Przykłady użycia: Dane jest: StringBad A( Niech zyje bal! ); StringBad B(A); StringBad B=A; StringBad B=StringBad(A); StringBad *B= new StringBad(A);

19 Częściowe rozwiazanie problemu #include <iostream> #ifndef STRNGBAD_H_ #define STRNGBAD_H_ class StringBad { private: char * str; // wskaznik ciagu int len; // dlugosc ciagu static int num_strings; // liczba obiektow public: StringBad(const char * s); // konstruktor StringBad(); // konstruktor domyslny StringBad(const StringBad &); // konstruktor kopiujacy ~StringBad(); // destruktor // funkcja zaprzyjazniona friend std::ostream & operator<<(std::ostream & os, const StringBad & st); ; #endif

20 Częściowe rozwiazanie problemu... StringBad::StringBad(const StringBad & st) { num_strings++; // aktualizacja skladowej statycznej... len = st.len; // ta sama dlugosc ciagu str = new char [len + 1]; // przydzial pamieci std::strcpy(str, st.str); // skopiowanie ciagu

21 Wykonanie Częściowe rozwiazanie problemu 1: "Niech zyje bal!" - obiekt utworzony. 2: "Ferie tuz tuz..." - obiekt utworzony. 3: "Narciarstwo" - obiekt utworzony. Z ostatniej chwili: Niech zyje bal! Temat dnia: Ferie tuz tuz... Wiadomosci sportowe: Narciarstwo Obiekt ciagu przekazany przez referencje: "Niech zyje bal!" Z ostatniej chwili: Niech zyje bal! Obiekt ciagu przekazany przez wartosc: "Ferie tuz tuz..." "Ferie tuz tuz..." - obiekt usuniety, sa jeszcze 3. Temat dnia: Ferie tuz tuz... "Narciarstwo" - obiekt usuniety, sa jeszcze 2. "Ferie tuz tuz..." - obiekt usuniety, sa jeszcze 1. "Niech zyje bal!" - obiekt usuniety, sa jeszcze 0. bws@bws:~/wstepdoprog2/wyklad8$

22 Konstruktor kopiujacy pozwala na rozwiazanie kolejnego problemu #include <iostream> using std::cout; #include "strngbad.h" void callme1(stringbad &); // obiekt przekazywany przez referencje void callme2(stringbad); // obiekt przekazywany przez wartosc int main() { using std::endl; StringBad headline1("niech zyje bal!"); StringBad headline2("ferie tuz tuz..."); StringBad sports("narciarstwo"); cout << "Z ostatniej chwili: " << headline1 << endl; cout << "Temat dnia: " << headline2 << endl; cout << "Wiadomosci sportowe: " << sports << endl; callme1(headline1); cout << "Z ostatniej chwili: " << headline1 << endl; callme2(headline2); cout << "Temat dnia: " << headline2 << endl cout << "Inicjalizacja obiektu ciagu innym obiektem:\n"; StringBad sailor = sports; cout << "Z kraju: " << sailor << endl; //... return 0;

23 Wszystko OK! 1: "Niech zyje bal!" - obiekt utworzony. 2: "Ferie tuz tuz..." - obiekt utworzony. 3: "Narciarstwo" - obiekt utworzony. Z ostatniej chwili: Niech zyje bal! Temat dnia: Ferie tuz tuz... Wiadomosci sportowe: Narciarstwo Obiekt ciagu przekazany przez referencje: "Niech zyje bal!" Z ostatniej chwili: Niech zyje bal! Obiekt ciagu przekazany przez wartosc: "Ferie tuz tuz..." "Ferie tuz tuz..." - obiekt usuniety, sa jeszcze 3. Temat dnia: Ferie tuz tuz... Inicjalizacja obiektu ciagu innym obiektem: Z kraju: Narciarstwo "Narciarstwo" - obiekt usuniety, sa jeszcze 3. "Narciarstwo" - obiekt usuniety, sa jeszcze 2. "Ferie tuz tuz..." - obiekt usuniety, sa jeszcze 1. "Niech zyje bal!" - obiekt usuniety, sa jeszcze 0. bws@bws:~/wstepdoprog2/wyklad8$

24 Konstruktor kopiujacy to jednak nie wszystko... #include <iostream> using std::cout; #include "strngbad.h" void callme1(stringbad &); // obiekt przekazywany przez referencje void callme2(stringbad); // obiekt przekazywany przez wartosc int main() { using std::endl; StringBad headline1("niech zyje bal!"); StringBad headline2("ferie tuz tuz..."); StringBad sports("narciarstwo"); cout << "Z ostatniej chwili: " << headline1 << endl; cout << "Temat dnia: " << headline2 << endl; cout << "Wiadomosci sportowe: " << sports << endl; callme1(headline1); cout << "Z ostatniej chwili: " << headline1 << endl; callme2(headline2); cout << "Temat dnia: " << headline2 << endl cout << "Inicjalizacja obiektu ciagu innym obiektem:\n"; StringBad sailor = sports; cout << "Z kraju: " << sailor << endl; cout << "Przypisanie obiektu do innego obiektu:\n"; StringBad knot; knot = headline1; cout << "Ze swiata: " << knot << endl; cout << "Koniec main()\n"; return 0;

25 Gdzie jest problem? 1: "Niech zyje bal!" - obiekt utworzony. 2: "Ferie tuz tuz..." - obiekt utworzony. 3: "Narciarstwo" - obiekt utworzony. Z ostatniej chwili: Niech zyje bal! Temat dnia: Ferie tuz tuz... Wiadomosci sportowe: Narciarstwo Obiekt ciagu przekazany przez referencje: "Niech zyje bal!" Z ostatniej chwili: Niech zyje bal! Obiekt ciagu przekazany przez wartosc: "Ferie tuz tuz..." "Ferie tuz tuz..." - obiekt usuniety, sa jeszcze 3. Temat dnia: Ferie tuz tuz... Inicjalizacja obiektu ciagu innym obiektem: Z kraju: Narciarstwo Przypisanie obiektu do innego obiektu: 5: "C++" - obiekt domyslny utworzony. Ze swiata: Niech zyje bal! Koniec main() "Niech zyje bal!" - obiekt usuniety, sa jeszcze 4. "Narciarstwo" - obiekt usuniety, sa jeszcze 3. "Narciarstwo" - obiekt usuniety, sa jeszcze 2. "Ferie tuz tuz..." - obiekt usuniety, sa jeszcze 1. "" - obiekt usuniety, sa jeszcze 0.

26 Gdzie jest problem? Instrukcja: knot = headline1; Dlaczego: wywołanie domyślnego operatora przypisania i zwiazane z tym Kopiowanie płytkie. Efekt: - obiekt usuniety, sa jeszcze 0., czyli pusty łańcuch zwiazany z obiektem headline2.

27 Rozwiazanie Przedefiniować własny operator przypisania. Pamiętaj może on być tylko przedefionowywany jako funkcja składowa! Pamiętaj aby zwracać referencje do obiektu. W przciwnym wypadku nie będzie można wykonywać instrukcji typu: A=B=C; StringBad & StringBad::operator=(const StringBad & st) { if (this == &st) return *this; delete [] str; len = st.len; str = new char[len + 1]; std::strcpy(str, st.str); return *this;

28 Potwierdzenie poprawności: 1: "Niech zyje bal!" - obiekt utworzony. 2: "Ferie tuz tuz..." - obiekt utworzony. 3: "Narciarstwo" - obiekt utworzony. Z ostatniej chwili: Niech zyje bal! Temat dnia: Ferie tuz tuz... Wiadomosci sportowe: Narciarstwo Obiekt ciagu przekazany przez referencje: "Niech zyje bal!" Z ostatniej chwili: Niech zyje bal! Obiekt ciagu przekazany przez wartosc: "Ferie tuz tuz..." "Ferie tuz tuz..." - obiekt usuniety, sa jeszcze 3. Temat dnia: Ferie tuz tuz... Inicjalizacja obiektu ciagu innym obiektem: Z kraju: Narciarstwo Przypisanie obiektu do innego obiektu: 5: "C++" - obiekt domyslny utworzony. Ze swiata: Niech zyje bal! Koniec main() "Niech zyje bal!" - obiekt usuniety, sa jeszcze 4. "Narciarstwo" - obiekt usuniety, sa jeszcze 3. "Narciarstwo" - obiekt usuniety, sa jeszcze 2. "Ferie tuz tuz..." - obiekt usuniety, sa jeszcze 1. "Niech zyje bal!" - obiekt usuniety, sa jeszcze 0.

29 Udoskonalona klasa String - interfejs #include <iostream> using namespace std; #ifndef STRING1_H_ #define STRING1_H_ class String { private: char * str; // wskaznik ciagu int len; // dlugosc ciagu static int num_strings; // liczba obiektów klasy static const int CINLIM = 80; // limit dlugosci ciagu na wejsciu public: String(const char * s); // konstruktor String(); // konstruktor domyslny String(const String &); // konstruktor kopiujacy ~String(); // destruktor int length () const { return len; String & operator=(const String &); // metody przeciazajace operatory String & operator=(const char *); char & operator[](int i); const char & operator[](int i) const; // funkcje zaprzyjaznione przeciazajace operatory friend bool operator<(const String &st, const String &st2); friend bool operator>(const String &st1, const String &st2); friend bool operator==(const String &st, const String &st2); friend ostream & operator<<(ostream & os, const String & st); friend istream & operator>>(istream & is, String & st); static int HowMany(); // metoda statyczna ; #endif

30 Udoskonalona klasa String - definicja #include <cstring> #include "string1.h" using std::cin; using std::cout; // inicjalizacja statycznej skladowej klasy int String::num_strings = 0; // metoda statyczna int String::HowMany() { return num_strings; String::String(const char * s) { // konstruuje obiekt String z ciagu C len = std::strlen(s); // ustawienie dlugosci ciagu str = new char[len + 1]; // przydzial pamieci std::strcpy(str, s); // inicjalizacja wskaznika ciagu num_strings++; // aktualizacja licznika obiektow

31 Udoskonalona klasa String - definicja String::String() // konstruktor domyslny { len = 4; str = new char[1]; str[0] = \0 ; // domyslny ciag obiektow klasy num_strings++; String::String(const String & st) { num_strings++; // aktualizacja skladowej statycznej len = st.len; // ta sama dlugosc ciagu str = new char [len + 1]; // przydzial pamieci std::strcpy(str, st.str); // skopiowanie ciagu String::~String() // destruktor (niezbedny) { --num_strings; // koniecznie delete [] str; // koniecznie

32 Udoskonalona klasa String - definicja // przypisywanie obiektu klasy String //do innego obiektu tej klasy String & String::operator=(const String & st) { if (this == &st) return *this; delete [] str; len = st.len; str = new char[len + 1]; std::strcpy(str, st.str); return *this; // przypisywanie ciagu C do obiektu klasy String String & String::operator=(const char * s) { delete [] str; len = std::strlen(s); str = new char[len + 1]; std::strcpy(str, s); return *this;

33 Udoskonalona klasa String - definicja // pelny dostep do znaków ciagu (dla obiektów zwyklych) char & String::operator[](int i){ return str[i]; // dostep (do odczytu) do znaków ciagu (dla obiektów const) const char & String::operator[](int i) const {return str[i]; // zaprzyjaznione funkcje przeciazajace operatory bool operator<(const String &st1, const String &st2) { return (std::strcmp(st1.str, st2.str) < 0); bool operator>(const String &st1, const String &st2) { return st2.str < st1.str; bool operator==(const String &st1, const String &st2) { return (std::strcmp(st1.str, st2.str) == 0);

34 Udoskonalona klasa String - definicja // wyprowadzenie ciagu na wyjscie ostream & operator<<(ostream & os, const String & st) { os << st.str; return os; // wczytywanie ciagu z wejscia (uproszczone) istream & operator>>(istream & is, String & st) { char temp[string::cinlim]; is.get(temp, String::CINLIM); if (is) st = temp; while (is && is.get()!= \n ) continue; return is;

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

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27 Programowanie w C++ Wykład 12 Katarzyna Grzelak 28 maja 2018 K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27 Klasy cd K.Grzelak (Wykład 12) Programowanie w C++ 2 / 27 Klasy - powtórzenie Klasy typy definiowane

Bardziej szczegółowo

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

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30 Programowanie w C++ Wykład 11 Katarzyna Grzelak 13 maja 2019 K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30 Klasy cd K.Grzelak (Wykład 11) Programowanie w C++ 2 / 30 Klasy - powtórzenie Klasy typy definiowane

Bardziej szczegółowo

Niejawne funkcje składowe

Niejawne funkcje składowe Niejawne funkcje składowe W języku C++ automatycznie tworzone są następujące funkcje składowe (o ile nie zostaną one jawnie zdefiniowane): konstruktor domyślny konstruktor kopiujący operator przypisania

Bardziej szczegółowo

Konstruktor kopiujący

Konstruktor kopiujący Konstruktor kopiujący Konstruktor kopiujący jest wywoływany wtedy, kiedy nowo tworzony obiekt jest inicjowany już istniejącym obiektem tej samej klasy: inicjujemy nowy obiekt istniejącym obiektem Punkt

Bardziej szczegółowo

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

Składnia C++ Programowanie Obiektowe Mateusz Cicheński Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Konstruktory i destruktory

Bardziej szczegółowo

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

Programowanie obiektowe Wykład 3. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Przydzielanie pamięci Poniżej przedstawiono w C++ dwie klasy obrazujące sposób rezerwacji pamięci. class Osoba char imie[30];

Bardziej szczegółowo

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

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016 Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,

Bardziej szczegółowo

Projektowanie klas c.d. Projektowanie klas przykład

Projektowanie klas c.d. Projektowanie klas przykład Projektowanie klas c.d. ogólne wskazówki dotyczące projektowania klas: o wyodrębnienie klasy odpowiedź na potrzeby życia (obsługa rozwiązania konkretnego problemu) o zwykle nie uda się utworzyć idealnej

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 3

PARADYGMATY PROGRAMOWANIA Wykład 3 PARADYGMATY PROGRAMOWANIA Wykład 3 Definiowanie operatorów i ich przeciążanie Przykłady zastosowania operatorów: a) operator podstawienia ( = ) obiektów o złożonej strukturze, b) operatory działania na

Bardziej szczegółowo

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

Składnia C++ Programowanie Obiektowe Mateusz Cicheński Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Przeciążanie operatorów Słowo

Bardziej szczegółowo

Wstęp do Programowania 2

Wstęp do Programowania 2 Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 5 W programowaniu obiektowym programista koncentruje się na obiektach. Zadaje sobie pytania typu:

Bardziej szczegółowo

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

public: // interfejs private: // implementacja // składowe klasy protected: // póki nie będziemy dziedziczyć, // to pole nas nie interesuje Zbudujemy klasę Definicję klasy zapiszmy w pliku tstring.h #ifndef TSTRING_H #define TSTRING_H #include // w pliku nagłówkowym NIE // otwieramy przestrzeni std // interfejs private: // implementacja

Bardziej szczegółowo

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

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc Rok akademicki 2016/2017, Wykład nr 4 2/45 Plan wykładu nr 4 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia stacjonarne I stopnia Rok akademicki 2016/2017

Bardziej szczegółowo

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

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006) Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006) Część 1. Teoria Wyjaśnij pojęcia, podaj przykład: klasa obiekt konstruktor destruktor kapsułkowanie (hermetyzacja) wskaźnik this

Bardziej szczegółowo

Operatory na rzecz typu TString

Operatory na rzecz typu TString Operatory na rzecz typu TString Dopiszmy w definicji klasy operator[], dzięki któremu potraktujemy obiekt jak tablicę class TString { public: char& operator[]( size_t n ); const char& operator[]( size_t

Bardziej szczegółowo

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

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33 Programowanie w C++ Wykład 8 Katarzyna Grzelak 15 kwietnia 2019 K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe

Bardziej szczegółowo

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

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27 Programowanie w C++ Wykład 14 Katarzyna Grzelak 3 czerwca 2019 K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27 Na ostatnim wykładzie: Konstruktor standardowy (domyślny) to taki, który nie ma żadnych argumentów

Bardziej szczegółowo

Programowanie obiektowe w C++ Wykład 12

Programowanie obiektowe w C++ Wykład 12 Programowanie obiektowe w C++ Wykład 12 dr Lidia Stępień Akademia im. Jana Długosza w Częstochowie L. Stępień (AJD) 1 / 22 Zakresowe pętle for double tab[5] {1.12,2.23,3.33,4.12,5.22 for(double x: tab)

Bardziej szczegółowo

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

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30 Programowanie w C++ Wykład 9 Katarzyna Grzelak 14 maja 2018 K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe plus

Bardziej szczegółowo

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

Programowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody Programowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody Mirosław Głowacki 1 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej

Bardziej szczegółowo

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.

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 uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Obiektowość języka C++ ˆ Klasa (rozszerzenie struktury), obiekt instancją klasy, konstruktory i destruktory ˆ Enkapsulacja - kapsułkowanie,

Bardziej szczegółowo

Programowanie obiektowe i C++ dla matematyków

Programowanie obiektowe i C++ dla matematyków Programowanie obiektowe i C++ dla matematyków Bartosz Szreder szreder (at) mimuw... 10 I 2012 1 Zabronienie kopiowania Czasami nie ma sensu, żeby obiekty pewnego typu były kopiowane z innych obiektów.

Bardziej szczegółowo

Programowanie Obiektowew języku C++ Zadania L4

Programowanie Obiektowew języku C++ Zadania L4 Programowanie Obiektowew języku C++ Zadania L4 Mirosław Głowacki 1,2 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej Katedra Informatyki

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 2

PARADYGMATY PROGRAMOWANIA Wykład 2 PARADYGMATY PROGRAMOWANIA Wykład 2 Definiowanie klas w C++ - ciąg dalszy Lista inicjalizująca konstruktora Przeznaczenie - do inicjalizacji pól klasy z kwalifikatorem const i inicjalizacji obiektów składowych

Bardziej szczegółowo

Plik klasy. h deklaracje klas

Plik klasy. h deklaracje klas Plik klasy. h deklaracje klas KLASY DLA PRZYKŁADÓW Z POLIMORFIZMEM enum dim r1 = 1, r2, r3; class figura public: static int const maxliczbafigur; = 100; static int liczbafigur; dim rn; rodzaj przestrzeni

Bardziej szczegółowo

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

Programowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26 Programowanie w C++ Wykład 13 Katarzyna Grzelak 4 czerwca 2018 K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe

Bardziej szczegółowo

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

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : class nazwa_klasy prywatne dane i funkcje public: publiczne dane i funkcje lista_obiektów;

Bardziej szczegółowo

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

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this Wstęp do programowania obiektowego WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this 1 Nazwa typu Rozmiar Zakres Uwagi bool 1 bit wartości true albo false stdbool.h TYPY ZNAKOWE

Bardziej szczegółowo

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

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p. Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Abstrakcja funkcyjna Struktury Klasy hermetyzacja

Bardziej szczegółowo

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

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 20 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 32 Programowanie w C++ Wykład 12 Katarzyna Grzelak 20 maja 2019 K.Grzelak (Wykład 12) Programowanie w C++ 1 / 32 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe

Bardziej szczegółowo

Wykład 4: Klasy i Metody

Wykład 4: Klasy i Metody Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to

Bardziej szczegółowo

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

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi EGZAMIN PIERWSZY (25 CZERWCA 2013) JĘZYK C++ poprawiam ocenę pozytywną z egzaminu 0 (zakreśl poniżej x) 1. Wśród poniższych wskaż poprawną formę definicji

Bardziej szczegółowo

Programowanie Obiektowe i C++

Programowanie Obiektowe i C++ Programowanie Obiektowe i C++ Marcin Benke Instytut Informatyki UW 6.11.2006 Marcin Benke (IIUW) Programowanie Obiektowe i C++ 6.11.2006 1 / 138 Operator przypisania Jest czym innym niż konstruktor kopiujacy!

Bardziej szczegółowo

Wyliczanie wyrażenia obiekty tymczasowe

Wyliczanie wyrażenia obiekty tymczasowe Wyliczanie wyrażenia obiekty tymczasowe Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2013 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu

Bardziej szczegółowo

Język C++ Różnice między C a C++

Język C++ Różnice między C a C++ Język C++ Różnice między C a C++ Plan wykładu C a C++ Różnice ogólne Typy Deklaracje zmiennych C++ jako rozszerzenie C Domyślne argumenty funkcji Przeciążanie funkcji Referencje Dynamiczny przydział pamięci

Bardziej szczegółowo

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

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 4. Karol Tarnowski A-1 p. Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 4 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Przeciążanie operatorów Funkcje zaprzyjaźnione Na

Bardziej szczegółowo

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

Zajęcia nr 4 Programowanie obiektowe konstruktory. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Zajęcia nr 4 Programowanie obiektowe konstruktory dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Plan Klasy przypomnienie Konstruktory Destruktor Przeciążanie

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

Operator przypisania. Jest czym innym niż konstruktor kopiujący! Operator przypisania Jest czym innym niż konstruktor kopiujący! Domyślnie jest zdefiniowany jako przypisanie składowa po składowej (zatem niekoniecznie bajt po bajcie). Dla klasy X definiuje się jako X&

Bardziej szczegółowo

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

Zaawansowane programowanie w języku C++ Klasy w C++ Zaawansowane programowanie w języku C++ Klasy w C++ Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka bez ograniczeń

Bardziej szczegółowo

Konstruktor kopiujacy

Konstruktor kopiujacy Konstruktor kopiujacy Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego. Jest on udostępniony

Bardziej szczegółowo

Programowanie obiektowe i C++ dla matematyków

Programowanie obiektowe i C++ dla matematyków Programowanie obiektowe i C++ dla matematyków Bartosz Szreder szreder (at) mimuw... 22 XI 2011 Uwaga! Ponieważ już sobie powiedzieliśmy np. o wskaźnikach i referencjach, przez które nie chcemy przegrzebywać

Bardziej szczegółowo

Informatyka 2. Wykład nr 3 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

Informatyka 2. Wykład nr 3 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia stacjonarne I stopnia Rok akademicki 2008/2009 Wykład nr 3 (05.11.2008) Rok akademicki 2008/2009, Wykład

Bardziej szczegółowo

KLASY cz4. Dorota Pylak. destruktory składowe statyczne przeciążanie operatorów. wskaźniki

KLASY cz4. Dorota Pylak. destruktory składowe statyczne przeciążanie operatorów. wskaźniki KLASY cz4. destruktory składowe statyczne przeciążanie operatorów Dorota Pylak wskaźniki 2 Klasy - podsumowanie poznanych wiadomości Deklaracja klasy może zawierać pola, konstruktory oraz metody. W deklaracji

Bardziej szczegółowo

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 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 i obiekty Programowanie i obiekty uzupełnienie notatek: dr Jerzy Białkowski i obiekty 1 2 3 4 i obiekty Obiektowość języka C++ Na tym wykładzie poznamy: ˆ Klasa (w języku C++ rozszerzenie struktury, typ

Bardziej szczegółowo

Podstawy Programowania Obiektowego

Podstawy Programowania Obiektowego Podstawy Programowania Obiektowego Pojęcie struktury i klasy. Konstruktor i destruktor. Spotkanie 08 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Spotkanie 08 Klasy: definicja a deklaracja klasy dane składowe

Bardziej szczegółowo

Programowanie Obiektowe i C++

Programowanie Obiektowe i C++ Programowanie Obiektowe i C++ Marcin Benke Instytut Informatyki UW 30.10.2006 Marcin Benke (IIUW) Programowanie Obiektowe i C++ 30.10.2006 85 / 112 Zgodność typów Rozważmy klasy class A { //... }; class

Bardziej szczegółowo

Programowanie Obiektowo Zorientowane w języku c++ Konstruktory

Programowanie Obiektowo Zorientowane w języku c++ Konstruktory Programowanie Obiektowo Zorientowane w języku c++ Konstruktory Mirosław Głowacki 1 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej Katedra

Bardziej szczegółowo

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

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie

Bardziej szczegółowo

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

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016 Wykład 2 17 marca 2016 Dziedziczenie Klasy bazowe i potomne Dziedziczenie jest łatwym sposobem rozwijania oprogramowania. Majac klasę bazowa możemy ja uszczegółowić (dodać nowe pola i metody) nie przepisujac

Bardziej szczegółowo

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec PROE wykład 3 klasa string, przeciążanie funkcji, operatory dr inż. Jacek Naruniec Przypomnienie z ostatnich wykładów Konstruktory/destruktory i kolejność ich wywołania w złożonej klasie. Referencja Obiekty

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe 10.04.2017 W slajdach są materiały zapożyczone z https://www.ii.uni.wroc.pl/~prz/2012lato/cpp/slajdy/cpp5.ppt Przykład wykorzystania obiektu Obiekt X jest instancją klasy Y Obiekt

Bardziej szczegółowo

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec PROE wykład 2 operacje na wskaźnikach dr inż. Jacek Naruniec Zmienne automatyczne i dynamiczne Zmienne automatyczne: dotyczą kontekstu, po jego opuszczeniu są usuwane, łatwiejsze w zarządzaniu od zmiennych

Bardziej szczegółowo

dr inż. Jarosław Forenc

dr inż. Jarosław Forenc Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2011/2012 Pracownia nr 9 (20.01.2012) dr inż. Jarosław Forenc Rok

Bardziej szczegółowo

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

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float

Bardziej szczegółowo

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

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 uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Historia C++ został zaprojektowany w 1979 przez Bjarne Stroustrupa jako rozszerzenie języka C o obiektowe mechanizmy abstrakcji danych i

Bardziej szczegółowo

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

it = 0; memset((void *)ptr, 0, items*sizeof(double)); cout << Konstruktor sparametryzowany  << title <<  adres:  << ptr << \n; // W7.cpp : Defines the en point for the console application. // Konstruktor kopiujacy. Funkcje zwraca obiekt klasy. // Przeciazenie operatora przypisania 1 #include "stdafx.h" #include #include

Bardziej szczegółowo

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

Owad():waga(1),jadowitosc(false) {cout<<konstruktor domyslny owada\n;} // Wskaźniki #include using namespace std; class Owad int waga; bool jadowitosc; Owad():waga(1),jadowitosc(false) cout

Bardziej szczegółowo

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

Operacje wejścia/wyjścia (odsłona druga) - pliki Operacje wejścia/wyjścia (odsłona druga) - pliki Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały

Bardziej szczegółowo

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.: Program przedmiotu Programowanie Obiektowe (język C++) Wykład 1. Definiowanie prostych klas. Przykłady. Przypomnienie: typy referencyjne, domyślne wartości argumentów, przeciąŝanie funkcji. Konstruktory,

Bardziej szczegółowo

Programowanie obiektowe w języku C++ Zarządzanie procesami. dr inż. Jarosław Forenc. Przeładowanie (przeciążanie) operatorów

Programowanie obiektowe w języku C++ Zarządzanie procesami. dr inż. Jarosław Forenc. Przeładowanie (przeciążanie) operatorów Rok akademicki 2016/2017, Wykład nr 5 2/40 Plan wykładu nr 5 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia stacjonarne I stopnia Rok akademicki 2016/2017

Bardziej szczegółowo

Język C++ wykład VIII

Język C++ wykład VIII Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Obiektowość języka C++ ˆ Klasa (rozszerzenie struktury), obiekt instancją klasy, konstruktory i destruktory ˆ Enkapsulacja - kapsułkowanie,

Bardziej szczegółowo

Szablony klas, zastosowanie szablonów w programach

Szablony klas, zastosowanie szablonów w programach Szablony klas, zastosowanie szablonów w programach 1. Szablony klas i funkcji 2. Szablon klasy obsługującej uniwersalną tablicę wskaźników 3. Zastosowanie metody zwracającej przez return referencję do

Bardziej szczegółowo

Informacja o programowaniu w c++ Dr Maciej Bobrowski

Informacja o programowaniu w c++ Dr Maciej Bobrowski Informacja o programowaniu w c++ Dr Maciej Bobrowski mate@mif.pg.gda.pl 27 kwietnia 2016 CZEGO NAM NA POTRZEBA Napisanie programu: Edytor, na przykład: vi, vim, joe, xedit, pico, notatnik (na przykład

Bardziej szczegółowo

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

PROGRAMOWANIE OBIEKTOWE W C++ cz. 2. Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów. PROGRAMOWANIE OBIEKTOWE W C++ cz. 2 Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów. Dziedziczenie Dziedziczenie jest to technika pozwalaj c na definiowanie nowej klasy przy wykorzystaniu

Bardziej szczegółowo

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

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 4. Karol Tarnowski A-1 p. Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni Wykład 4 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Dziedziczenie Przestrzenie nazw Na podstawie: A.

Bardziej szczegółowo

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

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? 1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? a) konstruktor b) referencje c) destruktor d) typy 2. Które z poniższych wyrażeń są poprawne dla klasy o nazwie

Bardziej szczegółowo

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

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie

Bardziej szczegółowo

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

string Rodzaj[4]= {TV , wieza , DVD , kino }; string Producent[4]={Phillips, Sony , Sanyo , Samsung }; // Referencja #include #include using namespace std; string Rodzaj[4]= "TV ", "wieza ", "DVD ", "kino "; string Producent[4]="Phillips", "Sony ", "Sanyo ", "Samsung "; class Sprzet_AV

Bardziej szczegółowo

TEMAT : KLASY POLIMORFIZM

TEMAT : KLASY POLIMORFIZM TEMAT : KLASY POLIMORFIZM 1. Wprowadzenie do polimorfizmu i funkcji wirtualnych w języku C++ Język C++ zakłada, że w pewnych przypadkach uzasadnione jest tworzenie klas, których reprezentanci w programie

Bardziej szczegółowo

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

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki int getmax (int a, int b) { return (a > b? a : b); float getmax (float a, float b) { return (a > b? a : b); long getmax (long a, long b)

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 4

PARADYGMATY PROGRAMOWANIA Wykład 4 PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej

Bardziej szczegółowo

Dziedziczenie & W slajdach są materiały zapożyczone z https://www.ii.uni.wroc.pl/~prz/2012lato/cpp/slajdy/cpp5.

Dziedziczenie & W slajdach są materiały zapożyczone z https://www.ii.uni.wroc.pl/~prz/2012lato/cpp/slajdy/cpp5. Dziedziczenie 27.04.2016 & 04.05.2016 W slajdach są materiały zapożyczone z https://www.ii.uni.wroc.pl/~prz/2012lato/cpp/slajdy/cpp5.ppt class A{ private: int x, y; public: void setvaluex(); void setvaluey();

Bardziej szczegółowo

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18 Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18 Literatura Języki i paradygmaty programowania Wykład 2 1. C. S. Horstman, G. Cornell, core Java 2 Podstawy, Helion 2003

Bardziej szczegółowo

Programowanie Obiektowew języku C++ Zadania L4

Programowanie Obiektowew języku C++ Zadania L4 Programowanie Obiektowew języku C++ Zadania L4 Mirosław Głowacki 1,2 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej Katedra Informatyki

Bardziej szczegółowo

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d. Dr hab. inż. Lucyna Leniowska, prof. UR, Zakład Mechatroniki, Automatyki i Optoelektroniki, IT Programowanie obiektowe, wykład nr 7 Przegląd typów strukturalnych - klasy i obiekty - c.d. Klasa - powtórzenie

Bardziej szczegółowo

dr inż. Jarosław Forenc

dr inż. Jarosław Forenc Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2012/2013 Wykład nr 6 (07.12.2012) dr inż. Jarosław Forenc Rok

Bardziej szczegółowo

Wstęp do programowania obiektowego. Przekazywanie parametrów do funkcji w C++ Metody i funkcje operatorowe Strumienie: standardowe, plikowe, napisowe

Wstęp do programowania obiektowego. Przekazywanie parametrów do funkcji w C++ Metody i funkcje operatorowe Strumienie: standardowe, plikowe, napisowe Wstęp do programowania obiektowego Przekazywanie parametrów do funkcji w C++ Metody i funkcje operatorowe Strumienie: standardowe, plikowe, napisowe 1 PRZEKAZYWANIE PARAMETRÓW DO FUNKCJI W C++ 2 W C++

Bardziej szczegółowo

Operacje wejścia/wyjścia odsłona pierwsza

Operacje wejścia/wyjścia odsłona pierwsza Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.

Bardziej szczegółowo

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

Dzisiejszy wykład. Klasa string. wersja prosta wersja ze zliczaniem odwołań. Wyjątki Specyfikator volatile Semafory Dzisiejszy wykład Klasa string wersja prosta wersja ze zliczaniem odwołań Wyjątki Specyfikator volatile Semafory 1 Klasa string Przetwarzanie tekstów jest powszechną dziedziną zastosowań komputerów W języku

Bardziej szczegółowo

Materiały do zajęć VII

Materiały do zajęć VII Spis treści I. Klasy Materiały do zajęć VII II. III. Konstruktor Właściwości i indeksatory Klasy Programowanie obiektowe wiadomości wstępne Paradygmat programowania obiektowego Abstrakcja Hermetyzacja

Bardziej szczegółowo

Przeciążenie operatorów

Przeciążenie operatorów Przeciążenie operatorów W C++ można przeciążyć większość operatory tak, żeby wykonywali zadania, charakterystyczne dla danej klasy Po przeciążeniu odpowiednich operatorów można posługiwać się obiektami

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019 Wykład 3 22 marca 2019 Klasy wewnętrzne Klasa wewnętrzna class A {... class B {... }... } Klasa B jest klasa wewnętrzna w klasie A. Klasa A jest klasa otaczajac a klasy B. Klasy wewnętrzne Właściwości

Bardziej szczegółowo

Wykład 9 2014-06-20 09:37 PP2_W9

Wykład 9 2014-06-20 09:37 PP2_W9 Wykład 9 Przykłady programów z wykorzystaniem klas - przykład funkcji operatorowych - obiektowa implementacja listy jednokierunkowej kopiowanie obiektów - klasa "latający napis" Pozycjonowanie w plikach

Bardziej szczegółowo

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

2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy 2.4 Dziedziczenie Poprzednie dwa rozdziały które dotyczyły zagadnienia automatów komórkowych na przykładach programów w C++. Mogłyby one sugerować że niekoniecznie trzeba programować obiektowo aby napisać

Bardziej szczegółowo

Laboratorium 2. Funkcje wirtualne

Laboratorium 2. Funkcje wirtualne Laboratorium 2 Funkcje wirtualne Zadanie 1. Zapoznaj się z programem z pliku lab2-p1.cpp. Czy program działa prawidłowo? Dlaczego funkcja rachunek() jest zdefiniowana jako virtual? Co się stanie jeśli

Bardziej szczegółowo

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost; Klasy w C++ są bardzo ważnym narzędziem w rękach programisty. Klasy są fundamentem programowania obiektowego. Z pomocą klas będziesz mógł tworzyć lepszy kod, a co najważniejsze będzie on bardzo dobrze

Bardziej szczegółowo

Wstęp do Programowania 2

Wstęp do Programowania 2 Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 1 Literatura Literatura podstawowa: Prata Stephen. Szkoła programowania. Język C++. Wydanie V. Helion,

Bardziej szczegółowo

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

Programowanie 2. Język C++. Wykład 3. 3.1 Programowanie zorientowane obiektowo... 1 3.2 Unie... 2 3.3 Struktury... 3 3.4 Klasy... 4 3.5 Elementy klasy... 5 3.6 Dostęp do elementów klasy... 7 3.7 Wskaźnik this... 10 3.1 Programowanie zorientowane

Bardziej szczegółowo

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

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne Tematyka wykładów 1. Wprowadzenie. Klasy cz. 1 - Język C++. Programowanie obiektowe - Klasy i obiekty - Budowa i deklaracja klasy. Prawa dostępu - Pola i funkcje składowe - Konstruktor i destruktor - Tworzenie

Bardziej szczegółowo

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

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej Wykład I - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Zaliczenie przedmiotu Do zaliczenia przedmiotu niezbędne jest

Bardziej szczegółowo

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

Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać) Języki i Paradygmaty Programowania Laboratorium 1 Obiekty i klasy C++ Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać) UWAGA! Umiejętność tworzenia

Bardziej szczegółowo

Rozdział 4 KLASY, OBIEKTY, METODY

Rozdział 4 KLASY, OBIEKTY, METODY Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej

Bardziej szczegółowo

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

#include stdafx.h #include <iostream> #include windows.h using namespace std; // W8_3.cpp : Defines the entry point for the console application. // Przeciazenie operatorow new, delete // Przeciazenie globalne: przeciazone operatory new, delete // dzialaja dla danych dowolnych //

Bardziej szczegółowo

Wykład 8: klasy cz. 4

Wykład 8: klasy cz. 4 Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD

Bardziej szczegółowo

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

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki zaprojektowany jako rozszerzenie języka C o obiektowe mechanizmy abstrakcji danych jest to język pozwalający na programowanie zarówno proceduralne

Bardziej szczegółowo

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

Programowanie obiektowe Wykład 1. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20 Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20 O mnie prowadzący wykład: Dariusz Wardowski pokój: A334 dyżur: środa, godz. 10.00 12.00 e-mail: wardd@math.uni.lodz.pl

Bardziej szczegółowo

TEMAT : KLASY DZIEDZICZENIE

TEMAT : KLASY DZIEDZICZENIE TEMAT : KLASY DZIEDZICZENIE Wprowadzenie do dziedziczenia w języku C++ Język C++ możliwa tworzenie nowej klasy (nazywanej klasą pochodną) w oparciu o pewną wcześniej zdefiniowaną klasę (nazywaną klasą

Bardziej szczegółowo

Programowanie obiektowe język C++

Programowanie obiektowe język C++ Programowanie obiektowe język C++ Dr inż. Sławomir Samolej D108A, tel: 865 1486, email: ssamolej@prz-rzeszow.pl WWW: ssamolej.prz-rzeszow.pl Podziękowanie: Chcę podziękować dr inż.. Grzegorzowi Hałdasiowi

Bardziej szczegółowo