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

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

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

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

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

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

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

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

Wykład 8: klasy cz. 4

Przeciążenie operatorów

Wykład 4: Klasy i Metody

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

Dziedziczenie. Ogólna postać dziedziczenia klas:

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

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

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

TEMAT : KLASY POLIMORFIZM

Wstęp do Programowania 2

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

PARADYGMATY PROGRAMOWANIA Wykład 4

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

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

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

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

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

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

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

Podstawy Programowania Obiektowego

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

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

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

Wstęp do programowania

Materiały do zajęć VII

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

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

Tablice (jedno i wielowymiarowe), łańcuchy znaków

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

Wstęp do programowania

Do czego służą klasy?

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

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

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

Rozdział 4 KLASY, OBIEKTY, METODY

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

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

Mechanizm dziedziczenia

Podstawy programowania skrót z wykładów:

referencje Wykład 2. Programowanie (język C++) Referencje (1) int Num = 50; zdefiniowano zmienną Num (typu int) nadając jej wartość początkową 50.

Przekazywanie argumentów wskaźniki

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

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

Projektowanie klas c.d. Projektowanie klas przykład

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

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13

Ok. Rozbijmy to na czynniki pierwsze, pomijając fragmenty, które już znamy:

TEMAT : KLASY DZIEDZICZENIE

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

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

Wykład 5: Klasy cz. 3

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Podstawy Programowania Obiektowego

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.

Do czego służą klasy?

Część 4 życie programu

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

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

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

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Programowanie - wykład 4

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.

Szablony klas, zastosowanie szablonów w programach

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

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

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

Programowanie obiektowe w C++ Wykład 12

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

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

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

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

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

KLASY cz.1. Dorota Pylak

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

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

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

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

Plik klasy. h deklaracje klas

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

Język C++ zajęcia nr 2

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

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

Przeciążenie (przeładowanie nazw) funkcji

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

I - Microsoft Visual Studio C++

Globalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2)

Programowanie w języku C++

Programowanie komputerowe. Zajęcia 7

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Wskaźniki. Informatyka

Transkrypt:

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; Tu lista obiektów może być pominięta. nazwa_klasy staje nowym typem danych i jest używane dla deklaracji obiektów klasy. Zmienne i funkcje, które są zadeklarowane wewnątrz klasy, nazywamy elementami lub składowymi (members) klasy. Funkcje, zadeklarowane wewnątrz klasy, nazywamy jeszcze metodami klasy. Domyślnie wszystkie składowe klasy są prywatne. To oznacza, że bezpośredni dostęp do tych składowych jest wzbroniony. Na tym polega hermetyzacja danych i funkcji. 1

Kluczowe słowo public oznacza, że odpowiednie zmienne i funkcje są publiczne dostępne bezpośrednio. Przykład W01. class MY_CLASS int i; //zmienna prywatna public: int k; //zmienna publiczna int get_i(); //funkcja publiczna - zwraca wartosc zmiennej prywatnej void set_i(int ii); //funkcje publiczna - ustawia wartosc zmiennej prywatnej void disp(); ; int _tmain(int argc, _TCHAR* argv[]) MY_CLASS ob1; //dostep bezposredni do elementow prywatnych klasy jest wzbroniony //ob1.i = 10; //blad kompilacji ob1.set_i(10); //OK //bezposredni dostep do skaladowych publicznych - OK ob1.k = 20;... 2

Definicje funkcji-elementu klasy: Typ_danych NAZWA_KLASY :: nazwa_funkcji(lista_argumentów_formalnych) :: - operator zakresu int k; //zmienna głobalna void fun() int k; k = 10; //odwołanie do zmiennej lokalnej :: k = 10; //odwołanie do zmiennej globalnej Lepiej dla zmiennych lokalnych i globalnych używać różne nazwy! void MY_CLASS::disp() //wewnatrz klasy dostep do danych prywatnych i danych publicznych jest zezwolony cout << "obiekt MY_CLASS:" << endl; cout << "private i = " << i << endl; cout << "public k = " << k << endl; 3

Funkcje disp nic nie zwraca, jest w zakresie klasy MY_CLASS i ma puste listę argumentów formalnych. Dostęp do publicznych składowych obiektu klasy (funkcji, danych): nazwa_klasy nazwa_obiektu; //deklaracje obiektu klasy... nazwa_obiektu.nazwa_funkcji(lista_argumentów_faktycznych); nazwa_obiektu.nazwa_zmiennej = Deklaracje klasy zadaje nowy typ danych, to jest logiczna abstrakcja. Deklaracje obiektu tworzy sam obiekt powoduje wydzielenie pamięci. Każdy obiekt klasy ma swoją własną kopie wszystkich zmiennych, zadeklarowanych wewnątrz klasy. MY_CLASS ob1, ob2; Dane obiektów ob1, ob2 są umieszczone w różnych adresach pamięci, więc ob1.k i ob2.k to są różne dane. Przykład W1: 4

Funkcje przeciążone W C++ wielu różnych funkcji mogą mieć tą same nazwę pod warunkiem, że mają oni różną listę argumentów (różne ilość lub typy, ilość i typy). Takie funkcje nazywamy funkcjami przeciążonymi, a procedurę ich tworzenia przeciążeniem funkcji. Jest to jeden ze sposobów realizacji polimorfizmu w C++. Przykład 1: W02 Rozpoznanie, która z trzech podanych funkcji z nazwą jednakową ma być wywołana, odbywa się na etapie kompilacji. Kompilator na podstawie typu danych argumentu faktycznego podejmuje tą decyzje. Przeciążenie funkcji nadaje możliwość tworzenia zestawu funkcji o tej samej nazwie. Logicznie te funkcje muszą wykonywać ogólną akcje pobranie wartości bezwzględnej, przecież ze względu na różne typy danych to są funkcje różne. 5

Dla programów o dużym rozmiarze jest bardzo ważne zastosowanie koncepcji jeden interfejs różne realizacje. Na przykład, w języku C było by koniecznie napisanie trzech różnych funkcji o trzech różnych nazwach. Przez cały czas życia tego kodu programowego programista musi trzymać w głowie te trzy różne nazwy. Dla dużych programów to istotnie komplikuje napisanie, debagowanie, czytanie i konserwację tego kodu. Przykład 2 #include <iostream> using namespace std; void f1(int a); void f1(int a, int b); int main() f1(10); f1(10, 20); return 0; 6

void f1(int a) cout << Funkcje f1(int a) << endl; void f1(int a, int b) cout << Funkcje f1(int a, int b) << endl; Jeśli różnica dwóch (lub więcej) funkcji o tej samej nazwie dotyczy tylko typów, które zwracają te funkcje (listę argumentów formalnych są takie same), kompilator nie w stanie odróżnić, którą funkcje ma wywołać. //to jest błąd int f1(int a); double f1(int a);... f1(10); //którą z tych funkcji wywołać? 7

W C++ można przeciążać nie tylko funkcje, a i operatory. Przeciążenie operatorów będziemy rozważali później. 8

Konstruktory i destruktory Często się zdarza, że pewna cześć obiektu musi przed użyciem być zainicjowana. W C++ automatyczne inicjowanie obiektu w chwili utworzenia wykonuje konstruktor. Konstruktor to specjalna funkcja składowa, której nazwa jest taka sama jak nazwa klasy. #include <iostream> using namespace std; class myclass int a; public: myclass(); //konstruktor void show(); ; 9

myclass::myclass() cout << Konstruktor\n ; a = 10; void myclass::show() cout << a = << a << endl; int main() myclass ob; ob.show(); return 0; Wydruk: Konstruktor a = 10 10

Konstruktor wywołuje się przy tworzeni obiektu, więc przy deklaracji obiektu ob. W C++ instrukcje, dokonującą deklaracje, może powodować akcje zmienna, którą deklarujemy, może mieć konstruktor. Konstruktor nie zwraca żadnej wartości. Dla obiektów globalnych oraz obiektów static konstruktor się wywołuje tylko jeden raz. Dla lokalnych obiektów przy każdej deklaracji obiektu. Destruktory Destruktor służy dla wykonania szeregu akcji przy zniszczeniu obiektu. Obiekty lokalne są tworzone przy wejściu do zawierającego ich bloku, a niszczone pod czas jego opuszczania. Obiekty globalne i lokalne klasa pamięci static, są niszczone gdy kończy się program. 11

Destruktor (jeśli istnieje) jest automatycznie wywołany podczas niszczenia obiektu. Najczęściej destruktorzy są używane przy zwolnieni pamięci, alokowanej dynamicznie, przy zamknięci plików. Destruktor ma taką same nazwę, jak konstruktor, tylko poprzedzoną symbolem ~. Niemożliwe dostać adres ani konstruktora, ani destruktora Ani konstruktor, ani destruktor nie wywołują się jawnie Konstruktor, a również destruktor, mogą wykonywać dowolne akcje, na przykład, liczyć liczbę PI z dokładnością do 100 znaków, lub coś inne. Przecież w oprogramowaniu C++ jest przyjęte, że konstruktor jest używany wyłącznie dla inicjowania obiektu, a destruktor dla zniszczenia Przykład W1_1 Przykład W1_2 12

Konstruktory sparametryzowane Do konstruktora można przekazywać argumenty. Aby utworzyć sparametryzowany konstruktor, wystarczy uzupełnić go o parametry tak samo, jak się robi to w przypadku innych funkcji. Przy deklarowani obiektu parametry (argumenty formalne) trzeba zastąpić argumentami aktualnymi (faktycznymi). #include <iostream> #using namespace std; class myclass int a; public: myclass(int x); //konstruktor void show(); myclass::myclass(int x) a = x; //inicjowanie składowej prywatnej, używając parametry konstruktora 13

void myclass:: show() cout << a = << a << endl; int main() //utworzenie obiektu ob i przekazanie argumentu 4 do parametru x konstruktora //klasy myclass myclass ob(4); ob.show(); //wyprowadzenie składowej prywatnej obiektu od klasy myclass na monitor myclass t(12), rtu(25); t.show(); rtu.show(); Wydruk: return 0; a = 4 a = 12 a = 25 Uwaga! To są różne a! Pierwsze a to ob::a składowa obiektu ob. Drugie a to składowa obiektu t (t::a), a trzecie obiektu rtu (rtu::a). 14

Instrukcje myclass ob(4) powoduje tworzenie obiektu o nazwie ob klasy myklass i przekazanie argumentu aktualnego o wartości 4 do argumentu formalnego konstruktora klasy myclass. Przy tworzeniu obiektu wywołuje się konstruktor klasy, i składowej prywatnej o nazwie a będzie przypisana wartość 4 (inicjowanie składowej a). Instrukcje myclass ob(4) jest skrótem zapisu myclass ob = myclass(4); Przecież w języku C++ jest przyjęta pierwsza forma zapisu, i my dalej będziemy używali tylko formę skrótu: myclass ob(4); Na różnice od konstruktora destruktor nie może mieć parametrów brakuje mechanizm przekazania argumentów obiektowi, który jest zniszczony Przykład W1_2 (timer) Lista parametrów (argumentów formalnych) konstruktora może zawierać dowolną ilość parametrów. Na przykład: 15

class myclass int a; double b; char str[256]; public: myclass(int ii, double db, char *sss); ; myclass::myclass(int ii, double db, char *sss) a = ii; b = db; if(strlen(sss) < sizeof(str)) strcpy(str, sss); else //opracowanie błędu 16

int main() int i_a = - 24; double d_pi = 3.141593; char strr[] = Ania ma kota ; myclass tt(i_a, d_pi, strr); return 0; Klasa może mieć kilka konstruktorów konstruktory przeciążone: class myclass int a; public: myclass(); ; myclass(int ii); void set_a(int ii); void show(); //konstruktor z pustą listą parametrów //ten konstruktor ma listę parametrów 17

myclass::myclass() //konstruktor z pustą listą a = 0; ; myclass::myclass(int ii) //konstruktor z listą parametrów a = ii; ; void myclass::set_a(int ii) //przypisuje wartość ii składowej prywatnej a klasy myclass a = ii; void myclass::show() cout << a = << a << endl; 18

int main() myclass ob, tt(25); // ob.a = 0 tt.a = 25 tt.show(); ob.show(); ob.set_a(35); //ob.a = 35 ob.show(); return 0; Wydruk: 25 0 35 19