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

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

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

Podstawy Programowania Obiektowego

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 2.

Dziedziczenie. Ogólna postać dziedziczenia klas:

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

Programowanie, część I

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

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

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

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

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

Programowanie obiektowe w języku

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

Dziedziczenie jednobazowe, poliformizm

PARADYGMATY PROGRAMOWANIA Wykład 4

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

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

Programowanie obiektowe w C++ Wykład 12

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

Programowanie obiektowe język C++

Programowanie, część I

Materiały do zajęć VII

Wprowadzenie do szablonów szablony funkcji

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

Wprowadzenie do szablonów szablony funkcji

Zaawansowane programowanie w języku C++ Programowanie obiektowe

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

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

Wykład 8: klasy cz. 4

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

Zaawansowane programowanie w C++ (PCP)

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

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

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

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

Konstruktor kopiujacy

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

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

Programowanie Obiektowe i C++

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

Pola i metody statyczne. Klasy zawierające pola i metody statyczne

Nowe słowa kluczowe. Komentarze. Wskaźniki typu void. class, delete, new, friend,... /* Komentarz w C i C++ */ // Komentarz w C++ (do końca wiersza)

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

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

Abstrakcyjny typ danych

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

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

PODEJŚCIE OBIEKTOWE. Przykład 1 metody i atrybuty statyczne

Programowanie Obiektowe i C++

PARADYGMATY PROGRAMOWANIA Wykład 2

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

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

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

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

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.

Szablony funkcji i szablony klas

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

TEMAT : KLASY DZIEDZICZENIE

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

C++ - [4-7] Polimorfizm

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

Technologie i usługi internetowe cz. 2

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

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

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

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Języki i paradygmaty programowania

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.

Podstawy programowania w języku C++ Zadania - dziedziczenie i polimorfizm

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

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

Enkapsulacja, dziedziczenie, polimorfizm

dr inż. Jarosław Forenc

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

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Do czego służą klasy?

PARADYGMATY PROGRAMOWANIA Wykład 3

Podstawy Programowania Obiektowego

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

Język C++ Programowanie obiektowe

Zaawansowane programowanie w C++ (PCP)

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

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

Programowanie obiektowe

Wstęp do Programowania 2

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

Plik klasy. h deklaracje klas

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Języki Programowania. Prowadząca: dr inż. Hanna Zbroszczyk. tel: Konsultacje: piątek:

Typy zmiennych proste i złożone. Programowanie komputerów. Tablica. Złożone typy zmiennych. Klasa. Struktura

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

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

Wyliczanie wyrażenia obiekty tymczasowe

10.1 Szablony Szablony funkcji Szablony klas Szablony jako wstęp do biblioteki STL... 10

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

Wykład 5: Klasy cz. 3

Transkrypt:

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 obiektowo Zorientowane obiektowo programowanie (object-oriented programming) opiera się na trzech podstawowych koncepcjach: abstrakcyjnych typów danych, dziedziczenia, wiązań dynamicznych. Polimorfizm, wiele form, oznacza, Ŝe obiekty, operacje zachowują się w róŝnych sposób w zaleŝności od kontekstu. Przykłady typów polimorficznych: zmienne które przyjmują róŝne typy w zaleŝności od kontekstu, przeładowane funkcje, metody, operatory, typy danych które są w relacji dziedziczenia. Obiekt (definicja Ecma/TC39-TG5/2004/25) - jest instancją typu. Obiekt (definicja ISO/IEC 14882:2003(E)) jest to obszarem pamięci. Obiekt jest tworzony za pomocą definicji, wyraŝenia new, lub implementacji. Obiekt ma nazwę, czas Ŝycia, typ. Uwaga: Funkcja nie jest obiektem, chociaŝ zajmuje obszar w pamięci. 1

3.2 Unie Programowanie 2. Język C++. Wykład 3. union <nazwaunii> <elementyunii> ; Własności: 1. Unie moŝna definiować bez nazwy (anonimowe). Anonimowe unie nie mogą mieć elementów private, protected, zawierać metod. 2. Unie nie mogą dziedziczyć od klas, struktur. 3. Domyślny typ dostępu do elementów unii jest public. 4. Atrybuty unii nie mogą być inicjowane w unii. Inicjowanie atrybutów moŝe odbywać za pomocą konstruktorów. 5. Unia nie moŝe zawierać referencji, obiektów. 6. Wielkość unii określona jest przez wielkość największego jej elementu. Przykład 1. Definicja, wielkość unii (w03-01-uniadefinicja.cpp). union unia char ch; float f; double d; ; void main() unia x; unia * wsk; cout << "sizeof(x.ch) = " << sizeof(x.ch) << endl; cout << "sizeof(x.d) = " << sizeof(x.d) << endl; cout << "sizeof(unia) = " << sizeof(unia) << endl << endl; wsk = &x; cout << "&x cout << "wsk = " << (long)&x << endl; = " << (long)&wsk << endl << endl; x.ch = 'c'; cout << "x.ch = " << x.ch << endl; cout << "wsk->ch = " << wsk->ch << endl << endl; 2

3.3 Struktury Programowanie 2. Język C++. Wykład 3. struct <nazwa struktury> <elementy struktury> ; Własności: 1. Domyślny typ dostępu do elementów struktury jest public. 2. Struktura moŝe zawierać konstruktora, destruktora. 3. Struktura moŝe dziedziczyć od struktury, klasy. 4. W strukturze nie moŝna inicjować zmiennych. 5. W strukturze moŝna inicjować zmienne typu static const. Przykład 1. Definicja struktury (w3-02-strukturadefinicja.cpp). #include<iostream> struct S char c; char f(); ; char S :: f() c = 'a'; return c; typedef struct char c; ts; void main() S s; s.i = 99; char cc; cc = s.f(); cout <<"s.f() = " << cc << endl; ts s1; ts *ps = &s1; ps->c = 'a'; ps->i = 10; cout << "ps->c = " << ps->c << endl; cout << "ps->i = " << ps->i << endl; cout << "&ps = " << &ps << endl; 3

3.4 Klasy Programowanie 2. Język C++. Wykład 3. class <nazwa klasy> <elementy klasy> ; Własności: 1. Domyślny typ dostępu do elementów struktury jest private. 2. Klasa moŝe być wirtualna, abstrakcyjna. 3. Klasy moŝna zagnieŝdŝać. 4. W klasie moŝna inicjować tylko zmienne typu static const. Przykład 1. Definicja klasy, metody (w03-03-klasadefinicja.cpp). class A void fa(); protected: ; void A::fA() cout <<"fa()" << endl; void main() A a; a.fa(); A &ra = a; ra.fa(); A *pa = &a; pa->fa(); A *p = new A; p->fa(); (*p).fa(); delete p; 4

3.5 Elementy klasy W klasie moŝna definiować: atrybuty, czyli zmienne, wskaźniki, referencje, obiekty innych klas, metody, czyli funkcje w klasie, operatory, klasy, struktury, unie, konstruktory, destruktora. Konstruktor klasy jest to metoda która: ma taką samą nazwę jak klasa, nie moŝe nic zwracać moŝe być przeładowany, moŝe być wirtualny, moŝe być zdefiniowany w obszarze private. Konstruktor słuŝy do tworzenia i inicjowanie obiektów. Destruktor klasy to metoda która: ma taką samą nazwę jak klasa, nazwa poprzedzona jest znakiem ~, np. ~A(), gdzie A jest nazwą klasy, nie moŝe nic zwracać, nie moŝe mieć argumentów, musi być w obszarze public. Destruktor słuŝy do usuwania obiektów z pamięci. Przykład 1. Domyślny konstruktor, destruktor obiektu (w03-04-konstruktor.cpp). class A A() cout <<"A()" << endl; ~A() cout <<"~A()" << endl; void f() cout <<" f() w A" << endl; ; void main() A a; a.f(); A &r = a; r.f(); // wywoływany jest konstruktor A() // konstruktor A() nie jest wywoływany A *p = new A; // wywoływany jest konstruktor A() p->f(); delete p; 5

Przykład 2. Przeładowanie konstruktora (w03-05-konstruktorprzeladowany.cpp). #include<iostream> class A // A() cout << "A()" << endl; // domyślny konstruktor A(int x) : i(x) cout << "A(int)" << endl; ~A() cout << "~A()" << endl; void f() cout << this->i << endl; ; void main() // A a; // błąd C2512, brak domyślnego konstruktora A() A b(100); b.f(); // A *pa1 = new A; // błąd C2512, brak domyślnego konstruktora A() // delete pa1; A *pa2 = new A(200); pa2->f(); delete pa2; Przykład 3. Inicjowanie atrybutów klasy (w03-06-klasaatrybuty.cpp). class A // A() A(int x) : i(x+2) ii = x; ~A() void f(int); int g()return ii; int ii; ; void A :: f(int x) i = ii*x; void main() A a(200); cout << "a.i = " << a.i << endl; cout << "a.ii = " << a.g() << endl; a.i = 300; a.f(10); A b(300); cout << "b.i = " << b.i << endl; cout << "b.ii = " << b.g() << endl; 6

3.6 Dostęp do elementów klasy class <nazwa klasy> <elementy klasy private> <elementy klasy> protected: <elementy klasy> <elementy klasy> ; Typy dostępu do elementów klasy: Elementy klasy dostępne dla obiektów zdefiniowanych wewnątrz private klasy. protected public Elementy klasy dostępne dla obiektów zdefiniowanych wewnątrz klasy i obiektów klas dziedzicznych. Elementy klasy dostępne dla obiektów klasy i obiektów klas dziedzicznych. 7

Przykład 1. Dostęp do elementów klasy (w03-07-typdostepu.cpp). class A A() ia=99; void f1a(); protected: void f2a() cout << "protected f2a()" << endl; void f3a() cout << "private f3a()" << endl; int ia; ; void A::f1A() cout << "public f1a()" << endl; this->f3a(); // ok, f3a()jest private this->ia=100; // ok, ia jest private cout << ia << endl; class B : public A // musi być public void f1b() this->f2a(); //ok, f2a() jest proteced // void f2b() this->f3a(); // błąd, f3a() jest private protected: ; void main() B b; b.f1b(); b.f1a(); // B dziedziczy od A, f1a() public // b.f2a(); // błąd dostępu, f2a() protected A a; a.f1a(); //ok, f1a() jest public // a.f2a(); // błąd dostępu, f2a() protected // a.f3a(); // błąd dostępu, f3a() private // a.ia = 101; // błąd dostępu, ia private 8

Przykład 2. Dostęp do elementów klasy. Kompozycja, obiekty zagnieŝdŝone prywatnie. (w03-08-dostep.cpp). class A void fa() cout << "public fa()" << endl; ; class B void fb(); A a; ; void B::fB() cout << "public fb() "; a.fa(); void main() B b; b.fb(); Przykład 3. Dostęp do elementów protected (w03-09-dostepprotected.cpp). class A int fa() this->ia = 100; return this->ia; protected: int ia; ; class B : A int fb() this->ia = 200; return this->ia; ; void main() A a; B b; cout << a.fa() << endl; cout << b.fb() << endl; // cout << b.fa() << endl; // błąd, musi być class B : public A 9

3.7 Wskaźnik this Wskaźnik this wskazuje na obiekt danej klasy. SłuŜy do wywoływania metod, manipulowania atrybutami wewnątrz klasy. Przykład 1. UŜycie wskaźnika this ( w03-10-this.cpp). #include<iostream> class A A(int x) : i(x) void f1() const cout << i << endl; void f2() const; void f3(int); ; void A::f2() const f1(); cout << this->i << endl; // jawne uŝycie wskaźnika this this->f1(); void A::f3(int x) this->i = x; cout << i << endl; void main() A a(100); a.f1(); a.f2(); a.f3(200); 10