Przeciążenie operatorów
|
|
- Łukasz Baran
- 7 lat temu
- Przeglądów:
Transkrypt
1 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 tych klas tak samo jak typami wbudowanymi C++. Operator można przeciążyć, tworząc funkcje operatora. Funkcje operatora wyznacza, jakie operacje na obiektach wskazanej klasy ma wykonywać operator. Do tworzenia funkcji operatora służy słowo kluczowe operator. Funkcja operatora może być składową klasy (a może i nie być). Najczęściej funkcja operatora, która nie jest składową klasy, jest funkcją zaprzyjaźnioną do tej klasy. Funkcja operatora składowej klasy zwrac_typ nazwa_klasy :: operator # (lista_argumentów) //operacje 1
2 Często typem wartości zwracanej funkcji operatora jest klas, dla którego ta funkcja jest wyznaczona. Znak # oznacza działanie operatora, który przeciążamy. Ograniczenia na przeciążenie operatorów: o Nie wolno zmieniać priorytet operatorów o Nie wolno zmieniać ilość operandów operatora o Nie wolno przeciążać operatory:. ::.*? Operator funkcje, za wyjątkiem operatora =, dziedziczy się klasą pochodną. Dla klasy pochodnej można przeciążyć dowolny operator, nawet te operatory, który już byli przeciążone w klasie bazowej. Funkcje operatory należy używać odpowiednio ich przeznaczeniu. Operatory funkcje nie mogą mieć parametrów domyślnych 2
3 Przeciążenie operatorów binarnych To jest taki operator, który ma dwa operandy Operator funkcje ma tylko jeden parametr dostanie ten obiekt, który jest umieszczony z prawej strony od operatora. Obiekt z lewej strony od operatora generuje wywołanie operator funkcji i będzie przekazany przez wskaźnik this. Dla napisania operatorów funkcji istnieje wielu sposobów Przykład W8_0_0. Przeciążenie operatorów + - * \ = dla klasy coord coord coord::operator + (const coord&praw) const coord ret; ret.x = x+praw.x; ret.y = y+praw.y; return ret; o Funkcja operator + zwraca obiekt typu coord. Wewnątrz tej funkcji 3
4 tworzymy pomocniczy obiekt res. Nadaję to możliwość używać ten operator w wyrażeniach złożonych jako a+b+c, dla tego że a+b+c = (a+b)+c i pierwszą sumę trzeba umieścić w pamięci tak, żeby nie zmienić żaden z składników. Dla tego i używamy tą funkcje, która zwraca obiekt. Prawy operand przekazujemy przez referencje, żeby przyspieszyć wykonanie i uniknąć tworzenia kopii obiektu, charakternego przy przekazani samego obiektu, a później zniszczenia tej kopii przez wywołanie destruktora. coord coord::operator -(const coord&praw) const coord ret; ret.x = x-praw.x; ret.y = y-praw.y; return ret; o Tu sytuacje jest podobna do przeciążenia operatora +, tylko trzeba dokładnie pamiętać o kolejności operandu z lewej strony (jest przekazany przez this) i z prawej strony (jest przekazany jako argument). 4
5 double coord::operator * ( const coord&praw) const /*================================================================== dot_prod ====================================================================*/ doubleret= 0.0; ret = x*praw.x+y*praw.y; return ret; o Wynikiem iloczynu skalarnego jest wartość rzeczywista operator funkcja zwraca wartość typu double. Pierwszy wektor (lewostronni operand) będzie pobrany przez wskaźnik this, a prawostronni operand przekazany jako parametr referencyjny. coord coord::operator * (const double alpa) const /*================================================================== mnozenie wektora przez skalar alpa ====================================================================*/ coord ret; ret.x = x*alpa; ret.y = y*alpa; return ret; o Wynikiem jest wektor (obiekt klasy coord, a skalar jest przekazywany jako parameter. 5
6 coord coord::operator / (const double alpa) const /*================================================ dzielenie wektora 2D przez skalar alpa =================================================*/ coord res; res.x = x/alpa; res.y = y/alpa; return res; o Wynikiem jest wektor (obiekt klasy coord, a skalar jest przekazywany jako parameter Jeśli prawy operand jest skalarem, to funkcji operatorowi trzeba przekazać skalar. Odwrotnie (lewy operand skalar) jest nie możliwe lewostronni operator generuje wywołanie operatora funkcji i przekazanie wskaźnika this powinien być obiektem klasy, odnośnie do której przeciążamy operator. 6
7 Przeciążenie operatora przypisania coord & coord::operator = (const coord &praw) /*================================================= Przyciazenie operatora przypisania: zwraca referencje do obiektu ==================================================*/ x = praw.x; y = praw.y; return *this; o Zwraca referencje do obiektu lewostronni operand jest L-value, w dodatek do tego po przypisani zwykłe się zmienia. Funkcja zwraca *this pobiera wartość po wskaźniku this i zwraca referencje. To nadaje możliwość używać kolejki a = b = c; To oznacza, że najpierw obiektowi b będzie przypisane wartości odpowiednich składowych obiektu c (b = c), a później wartości składowych obiektu b zastąpią odpowiedni wartości składowych obiektu a ( a = b). o Parametrem operator-funkcji = jest referencja do obiektu - operandu prawostronnego. Przekazywanie funkcji parametru referencyjnego nie powoduje tworzenia kopii obiektu jest istotnie szybsze od przekazywania obiektu i nie powoduje efektów ubocznych o Przykład W7 7
8 Przeciążenie operatorów relacyjnych i logicznych Operatory relacyjne i logiczne zwracają 0 (false) lub!0 (true), więc typem wartości zwracanej może być int lub bool. Operatory relacyjne i logiczne mogą się spotkać w wyrażeniach skomplikowanych, które zawierają dane innych typów Przykład W8_1_0 class coord double x; double y; public: coord(double xx, double yy) x = xx; y = yy; coord() x = 0.0; y = 0.0; void set(double xx, double yy) x = xx; y = yy; coord get() return *this; int operator == (coord &praw); //relacje == int operator > (coord &praw); //relacje > int operator && (coord &praw); //logichny koniunkcji int operator (coord &praw); //logichny alternatywy void disp(char *tit) cout << tit << ": " << x << " " << y << endl; ; 8
9 Przeciążenie operatora == odnośnie klasy coord. Lewostronni operand jest obiektem klasy coord, generuje wywołanie operator-funkcji i jest przekazywany przez this. Prawostronni operand jest również obiektem klasy coord i przekazywany przez referencje. Dane klasy są składowymi wektora, dwa wektora jest równe, jeśli są równe każda z odpowiednich składowych. int coord::operator == (coord &praw) return (x == praw.x && y == praw.y); Przeciążenie operatora > odnośnie klasy coord. Definiujemy dla obiektu danej klasy: relacje >, <, >=, <= są wyznaczone na podstawie porównywania module tych wektorów (norma 2 wektora). (Przecież to nie oznacza, że taka definicja jest jednoznaczna, można by było porównywać na podstawie normy lub inaczej to zależy od tego, którą normę dla podanego zagadnienia uważamy bardziej reprezentatywnej). int coord::operator > (coord &praw) double ro_lew, ro_praw; ro_lew = x*x+y*y; ro_praw = praw.x*praw.x+praw.y*praw.y; return (ro_lew > ro_praw); 9
10 Przeciążenie operatorów unarnych Funkcja-operator przy przeciążeni operatora unarnego nie potrzebuje przekazywania obiektu unarny operator ma tylko jeden operand, który generuje wywołanie tej funkcji i jest przekazywany przez this. Przykład W8_1_1 class scr_coord int x; int y; public: scr_coord(int xx, int yy) x = xx; y = yy; scr_coord() x = 0; y = 0; void set(int xx, int yy) x = xx; y = yy; scr_coord get() return *this; void disp(char *tit) cout << tit << ": " << x << " " << y << endl; scr_coord operator ++ (); //prefiksowa forma: ++ob; scr_coord operator ++ (int notused); //postfiksowa forma: ob++ ; 10
11 scr_coord scr_coord::operator ++ () //prefiksowa forma ++ob - najpierw inkrementujemy // - poznej - przepisyjemy ++x; ++y; return *this; scr_coord scr_coord::operator ++ (int notused) //postfiksowa forma ob()++ - najpierw przypisujemy, //pozniej - inkrementujemy //uwaga! dane klasy scr_coord nie //zawieraja wskaznikow, plikow,... //dla tego mozna nie przeciazac konstruktor kopiujacy //(inicjowanie obiektem *this, funkcje zwraca obiekt klasy) //i nie przyciazac operator = (ob = ob1++;) scr_coord ret = *this; x++; y++; return ret; Operator ++ zwiększa wartości składowych obiektu zmienia obiekt. Oprócz tego, może być używany w postaci ob = ++ob1. Dla tego zwraca obiekt klasy, żeby można było wykorzystywać w konstrukcjach złożonych. 11
12 Przy prefiksowej formie operatora ++ lista argumentów formalnych jest pusta. Dla odróżnienia od formy prefiksowej forma postfiksowa ma argument int notused. Dla zachowania analogii z typami danych wbudowanych C++ przy użyci operatora ++ w kontekście ob = ob1++ dane obiektu ob nie powinni być zmienione. Dla tego postfiksowa forma operatora ++ zwraca obiekt, który zawiera dane przed inkrementowaniem. Operator-funkcje zaprzyjaźnione Istnieje możliwość przeciążenia operator-funkcji odnośnie klasy podanej, używając nie funkcje - metodą klasy, a funkcje zaprzyjaźnioną. Dla funkcji zaprzyjaźnionych wskaźnik this nie jest przekazywany musimy przekazywać jawnie i operator lewostronni, i operator prawostronni (dla operatorów binarnych). Inne cechę przeciążenia operatorów dla funkcji zaprzyjaźnionych pozostają takie same, jak i dla operator funkcji składowych klasy. 12
13 Dla przeciążenia operatora przypisania (=), a również operatora [ ], można używać tylko operator funkcje składową klasy (nie wolno używać operator funkcje zaprzyjaźnione do klasy). Deklaracja operator-funkcji zaprzyjaźnionej do klasy: friend wart_zwrac operator # (typ_lew lewy_operand, typ_praw prawy operand); Definicja operator-funkcji nie składowej klasy (operator binarny): wart_zwrac operator # (typ_lew lewy_operand, typ_praw prawy operand) W liście argumentów na pierwszym miejscu stoi lewostronni operand, a na prawym prawostronni. Dla operator-funkcji składowych klasy lewostronni operand jest przekazywany niejawnie przez wskaźnik this to oznacza, że lewostronni operand mysi mieć typ obiektu klasy. Na przykład: 13
14 class coord double x, y; public: coord operator + (double aa); ; coord coord::operator + (double aa) coord tmp; tmp.x = x+aa; tmp.y = y+aa; return tmp; int main() coord ob( ), res; res = ob ; res = ob; return 0; //OK, lewostronni operand ma typ coord //!OK, lewostronni operand nie jest typu coord 14
15 Ten problem może być rozwiązany przy użycji operator-funkcji zaprzyjaźnionych do klasy: class coord double x, y; public:. coord operator + (double aa); friend coord operator + (double lew, coord praw); ; coord operator + (double lew, coord praw) coord tmp; tmp.x = lew+praw.x; tmp.y = lew+praw.y; return tmp; int main() coord ob( ), res; res = ob ; res = ob; return 0; //OK, lewostronni operand ma typ coord //!OK, lewostronni operand nie jest typu coord Przykład W8_1_2. 15
16 Przeciążenie operatorów unarnych ++, -- na podstawie operator-funkcji zaprzyjaźnionych. Operatory ++, -- zmieniają wartości składowych obiektu. Dla przyspieszenia działania warto przekazywać referencje do obiektów: class scr_coord int x; int y; public: friend scr_coord operator ++ (scr_coord &ob); //prefiksowa forma friend scr_coord operator ++ (scr_coord &ob, int notused); //postfiksowa forma: ob++ ; Przeciążenie operatora indeksu tablicy [ ]. W języku C++ operator [ ] jest operatorem binarnym, przy czym jego można przeciążyć tylko jako funkcjeskładową klasy. zwrac_typ & nazwa_klasy :: operator [ ] (int indeks) //.. Operator [ ] zwraca element tablicy o podanym indeksie typ wartości zwracanej referencje do zwracanego obiektu. To nadaje możliwość używać ob[i] = z lewej strony operatora przypisania. 16
17 Lewostronni operand obiekt klasy, prawostronni indeks elementu tablicy Przykład: class s_array double *arr; public: s_array(int ndim); //konstruktor: alokuje pamięć dla tablicy arr o ndim elementów ~s_array(); //destruktor: zwalnia tą pamięć double &operator[](int i); void put(double a, int i) arr[i] = a; double get(int i) return arr[i]; ; double & s_array::operator [] (int i) return arr[i]; int _tmain(int argc, _TCHAR* argv[]) int ii; s_array aa(10); //teraz można odwołowywac do obiektu klasy s_array tak, jako do zwyklej tablicy aa[0] = 100.0; //tu [] jest użyty jako L-value aa[1] = aa[0]+100.0;. 17
18 Bezpieczna tablica - przykład W8_1 Tablica bezpieczna wymaga dość istotnego nakładu pracy, powoduje to znaczny spadek wydajności obliczeń. Dla tego w języku C++ granicy tablic nie są kontrolowane. Przecież w wersji debagowej można zastosować tablicy bezpieczne, a w wersji release usunąć ich. Przeciążenie operatorów new, delete. Przeciążenie lokalne funkcje-operatory new, delete są składowymi danej klasy. Obiekty danej klasy będą alokowane przez przeciążone operatory new, delete, a obiekty innych typów - przez standardowe operatory new, delete. Przeciążenie globalne - funkcje-operatory new, delete są zdefiniowane w pliku globalnie poza deklaracją jakieś klasy (prototypy trzeba usunąć). Obiekty wszystkich typów będą alokowane przez przeciążone operatory new, delete. Przykład W8_3. 18
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;
Funkcje przeciążone, konstruktory kopiujące, argumenty domyślne
Funkcje przeciążone, konstruktory kopiujące, argumenty domyślne Przeciążenie funkcji polega na użyciu funkcji z tą samą nazwą, które mają różne listy argumentów(różne typy, różna ilość lub to i inne).
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,
Zwracanie obiektu. Funkcja może zwracać obiekty: #include"stdafx.h #include <iostream> using namespace std; class samp { inti; public:
Zwracanie obiektu Funkcja może zwracać obiekty: #include"stdafx.h #include using namespace std; class samp ; inti; samp(char *title); voidset_i(intii) i = ii; intget_i() return i; ~samp(); samp::samp(char
Dziedziczenie. Ogólna postać dziedziczenia klas:
Dziedziczenie Ogólna postać dziedziczenia klas: class nazwa_clasy_pochodnej : specyfikator_dostępu nazwa_clasy_bazowej specyfikator_dostępu : public private protected Specyfikator dostępu definiuje, w
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
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
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
C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów
Operatory są elementami języka C++. Istnieje zasada, że z elementami języka, takimi jak np. słowa kluczowe, nie można dokonywać żadnych zmian, przeciążeń, itp. PRZECIĄŻANIE OPERATORÓW Ale dla operatorów
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
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
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];
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
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ą
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,
C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE
WSKAŹNIKI KLASOWE Wskaźniki klasowe Każdy obiekt zajmuje fragment pamięci i wszystkie obiekty tego samego typu zajmują fragmenty pamięci tej samej długości początek miejsca w pamięci zajmowanego przez
Przeciążanie operatorów
Instrukcja laboratoryjna nr 4 Programowanie w języku C 2 (C++ poziom zaawansowany) Przeciążanie operatorów dr inż. Wilk-Jakubowski Jacek mgr inż. Lasota Maciej dr inż. Kaczmarek Tomasz Wprowadzenie Oprócz
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
Wykład 5: Klasy cz. 3
Programowanie obiektowe Wykład 5: cz. 3 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD - podstawy Konstruktor i destruktor (część I) 2 Konstruktor i destruktor KONSTRUKTOR Dla przykładu
Obsługa wyjątków. Język C++ WW12
Obsługa wyjątków Pozwala zarządzać błędami wykonania w uporządkowany sposób. Umożliwia automatyczne wywołanie części kodu, funkcji, metod klas, który trzeba wykonać przy powstaniu błędów. try //blok try
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
Laboratorium nr 10. Temat: Funkcje cz.2.
Zakres laboratorium: Laboratorium nr 10 Temat: Funkcje cz.2. przeciążanie nazw funkcji argumenty domyślne funkcji przekazywanie danych do funkcji przez wartość, wskaźnik i referencję przekazywanie tablic
Programowanie, część I
11 marca 2010 Kontakt Wstęp Informacje organizacyjne Materiał na ćwiczenia Plan wykładu http://www.fuw.edu.pl/~rwys/prog rwys@fuw.edu.pl tel. 22 55 32 263 Materiał na ćwiczenia Informacje organizacyjne
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
Lab 9 Podstawy Programowania
Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany
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
Tbli Tablice obiektów biktó są tworzone dokładnie d tak samo, jak i tablice, składające się z elementów innego typu
Tablice, wskaźniki, referencje 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 using namespace std; class cl int
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.
Programowanie (język C++) referencje Wykład 2. Referencje (1) Referencja (odnośnik) jest zmienną identyfikującą inną zmienną. Wykonanie operacji na referencji ma taki sam skutek, jak wykonanie tejŝe operacji
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
Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np
Klasy Klasa jest nowym typem danych zdefiniowanym przez użytkownika Wartości takiego typu nazywamy obiektami Najprostsza klasa jest po prostu strukturą, np struct Zespolona { Klasy jako struktury z operacjami
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&
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
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
Programowanie, część I
Programowanie, część I Rafał J. Wysocki Instytut Fizyki Teoretycznej, Wydział Fizyki UW 22 lutego 2011 Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 22 lutego 2011 1 / 80 Wstęp Informacje organizacyjne
Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.
Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice
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
Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.
Struktura programu Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem. W ostatnich latach najbardziej używanym stylem oprogramowania
Podstawy programowania skrót z wykładów:
Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace
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
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)
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
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
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
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:
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,
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
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
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
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
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!
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
Język C++ umożliwia przeciążanie operatora, tzn. zmianę jego znaczenia na potrzeby danej klasy. W tym celu definiujemy funkcję o nazwie:
Rozdział 10 Przeciążanie operatorów 10.1 Definicje Język C++ umożliwia przeciążanie operatora, tzn. zmianę jego znaczenia na potrzeby danej klasy. W tym celu definiujemy funkcję o nazwie: operator op gdzie
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)
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
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
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
Szablony funkcji i szablony klas
Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2011 Bogdan Kreczmer Niniejszy dokument
Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),
Tworzenie obiektów Dostęp do obiektów jest realizowany przez referencje. Obiekty w języku Java są tworzone poprzez użycie słowa kluczowego new. String lan = new String( Lancuch ); Obszary pamięci w których
EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi
EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi 1. Napisz wskaźnik do funkcji fun tak zdeklarowanej: T* fun( int, double const& ) const; definicja wskaźnika musi być precyzyjna, inaczej
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
Algorytmy i Struktury Danych. Anna Paszyńska
Algorytmy i Struktury Danych Anna Paszyńska Tablica dynamiczna szablon Array Zbiory Zbiory template class Container {public: virtual ~Container() { }; virtual int Count() const = 0;
C++ Przeładowanie operatorów i wzorce w klasach
C++ i wzorce w klasach Andrzej Przybyszewski numer albumu: 89810 14 listopada 2009 Ogólnie Przeładowanie (przeciążanie) operatorów polega na nadaniu im nowych funkcji. Przeładowanie operatora dokonuje
Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {
Przeciążanie a dziedziczenie class Integer2: public Integer Operatory, z wyjątkiem operatora przypisania są automatycznie dziedziczone w klasach pochodnych. Integer2(int i): Integer(i) Automatyczne tworzenie
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
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
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
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
4. Funkcje. Przykłady
4. Funkcje Przykłady 4.1. Napisz funkcję kwadrat, która przyjmuje jeden argument: długość boku kwadratu i zwraca pole jego powierzchni. Używając tej funkcji napisz program, który obliczy pole powierzchni
operator zmiany znaku operatory mnożenia, dzielenia, dzielenia modulo operatory dodawania, odejmowania
http://torus.uck.pk.edu.pl/~fialko Operatory, wyrażenia, instrukcja przypisania Operatory arytmetyczne * / + - % operator zmiany znaku operatory mnożenia, dzielenia, dzielenia modulo operatory dodawania,
Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {
Przeciążanie operatorów [] Przykład: klasa reprezentująca typ tablicowy. Obiekt ma reprezentować tablicę, do której można się odwoływać intuicyjnie, np. Tab[i] Ma być też dostępnych kilka innych metod
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
Podstawy Programowania Obiektowego
Podstawy Programowania Obiektowego Wprowadzenie do programowania obiektowego. Pojęcie struktury i klasy. Spotkanie 03 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Idea programowania obiektowego Definicja
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
Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);
Przeciążanie operatorów [] Przykład: klasa reprezentująca typ tablicowy. Obiekt ma reprezentować tablicę, do której można się odwoływać intuicyjnie, np. Tab[i] Ma być też dostępnych kilka innych metod
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
Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz
Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz Zagadnienia 1. Delegaty wiązane, właściwości indeksowane 2. Delegaty niewiązane 3. Nowa wersja kalkulatora, delegaty
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
Funkcje wirtualne. Wskaźniki do klas pochodnych są podstawą dla funkcji wirtualnych i polimorfizmu dynamicznego.
Funkcje wirtualne W C++ polimorfizm jest zrealizowany w dwa sposoby: na etapie kompilacji i na etapie wykonania. Na etapie kompilacji polimorfizm jest zrealizowany poprzez przeciążenie funkcji i operatorów.
Język C zajęcia nr 11. Funkcje
Język C zajęcia nr 11 Funkcje W języku C idea podprogramów realizowana jest wyłącznie poprzez definiowanie i wywołanie funkcji. Każda funkcja musi być przed wywołaniem zadeklarowana. Deklaracja funkcji
Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.
M. Trzebiński C++ 1/14 Podstawy języka C++ Maciej Trzebiński Instytut Fizyki Jądrowej Polskiej Akademii Nauk Praktyki studenckie na LHC IVedycja,2016r. IFJ PAN Przygotowanie środowiska pracy Niniejsza
Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018
Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy
.NET Klasy, obiekty. ciąg dalszy
.NET Klasy, obiekty ciąg dalszy Przeciążanie operatorów 1 W języku C# istnieje możliwość zdefiniowania funkcjonalności dużej części operatorów dla typów stworzonych przez użytkownika. Dzięki takiemu zabiegowi,
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
#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 //
Wprowadzenie do szablonów szablony funkcji
Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.
Język C++ zajęcia nr 2
Język C++ zajęcia nr 2 Inicjalizacja Definiowanie obiektu może być połączone z nadaniem mu wartości początkowej za pomocą inicjalizatora, który umieszczany jest po deklaratorze obiektu. W języku C++ inicjalizator
JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6
JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 6 1 SPECYFIKATOR static Specyfikator static: Specyfikator ten powoduje, że zmienna lokalna definiowana w obrębie danej funkcji nie jest niszczona
Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska
Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego Iwona Kochaoska Programowanie Obiektowe Programowanie obiektowe (ang. object-oriented programming) - metodyka tworzenia programów komputerowych,
Java - tablice, konstruktory, dziedziczenie i hermetyzacja
Java - tablice, konstruktory, dziedziczenie i hermetyzacja Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU zmienne tablicowe konstruktory klas dziedziczenie hermetyzacja
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
Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:
Wskaźniki są nieodłącznym elementem języka C. W języku C++ także są przydatne i korzystanie z nich ułatwia pracę, jednak w odróżnieniu do C wiele rzeczy da się osiągnąć bez ich użycia. Poprawne operowanie
Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji
Politechnika Białostocka Wydział Elektryczny Katedra Telekomunikacji i Aparatury Elektronicznej Instrukcja do pracowni specjalistycznej z przedmiotu Obiektowe programowanie aplikacji Kod przedmiotu: TS1C410201
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
Wprowadzenie do szablonów szablony funkcji
Wprowadzenie do szablonów szablony funkcji Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do
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 8 Przykład realizowany na wykładzie Klasy StringBad i String. Wstępne pliki załaczone jako źródła.
Definiowanie własnych klas
Programowanie obiektowe Definiowanie własnych klas Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski @ pwr.wroc.pl Definiowanie własnych klas Autor:
Część 4 życie programu
1. Struktura programu c++ Ogólna struktura programu w C++ składa się z kilku części: część 1 część 2 część 3 część 4 #include int main(int argc, char *argv[]) /* instrukcje funkcji main */ Część
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
Zaawansowane programowanie w C++ (PCP)
Zaawansowane programowanie w C++ (PCP) Wykład 6 - szablony. dr inż. Robert Nowak - p. 1/15 Kolekcje i algorytmy» Deklaracja szablonu y Pojęcia niezależne od typu: kolekcje (np. listy) algorytmy (np. znajdowania
1 Wskaźniki. 1.1 Główne zastosowania wskaźników
1 Wskaźniki Wskaźnik (ang. pointer) jest obiektem (zmienną) przechowującym adres pamięci. Definiowanie wskaźników: typ *nazwa wskaznika; np.: int *wsk na x;, double *xxx;, char *znak;. Aby można było pracować