OOPC++ - operatory1 Operatory class complex { private: double re, im; public: complex (double r, double i = 0) { re = r; im = i; } friend complex operator+

Slides:



Advertisements
Podobne prezentacje
Session 6 Case Study – Elektrim SA Saturday, January 15, 2011 SAL Wroclaw Lectures on Corporate Governance Geoffrey Mazullo Principal Emerging Markets.
Advertisements


C++ w Objectivity Marcin Michalak s1744. Pomocne pakiety: Data Definition Language (DDL). Standard Template Library (STL). Active Schema.
Java vs C# Michał Prządka Tomasz Nowak
PRZYPOMNIENIE!!!!!! Używamy mówiąc o warunku i skutkach jego spełnienia, które są zawsze prawdziwe If + Present Simple,+ Present Simple lub czasownik.
GUI Struktury Spotkanie integracyjne Nazwa wydziału: EAIiE Nazwa katedry: Informatyka Miejsce i data prezentacji: Kraków,
1 Przestrzenie nazw. 2 Globalna przestrzeń nazw jest jedna W programach pisanych przez wiele osób, lub korzystających z bibliotek napisanych przez innych,
Router(config)# access-list 1 permit ale można również: Router(config)# access-list 1 permit any.
Testowanie oprogramowania metodą badania pokrycia kodu
Współprogramy Plan: Motywacja Składnia Scenariusz obiektu współprogramu Przykłady Producent – konsument ( instrukcja attach ) Czytelnik -pisarze ( instukcja.
142 JAVA – sterowanie i wątki public class A20 extends javax.swing.JApplet implements ActionListener { private int licznik = 0; private JTextField t =
Aplikacje sieciowe Obiekty typu Socket. ServerSocket ClientSocket Socket ClientSocket Socket.
Przestrzeń System podstawowe klasy i klasy bazowe.
REKURENCJA.
Krzysztof Manuszewski
db4o Kacper Skory Marcin Talarek
Dziękuję Ci Ojcze Święty z wyrazami największego szacunku
Czyli jak zrobić prezentację komputerową?
Zastosowanie osi symetrii i wielokątów w przyrodzie
FIZYKA na służbie b’Rowersa ...krótki kurs.
Dzień Jak będzie ładna pogoda, to zbiórka jest pod tunelem z rowerami o 9:40 Jeżeli pogoda nie dopisze, to zbiórka jest pod moim domofonem.
DYFRAKCJA ŚWIATŁA NA SIATCE DYNAMICZNEJ
Analiza matematyczna III. Funkcje Funkcje I – własności podstawowe
Krzysztof Kucab Rzeszów, 2012
Analiza matematyczna III. Funkcje Funkcje II – własności podstawowe
III. Proste zagadnienia kwantowe
PIO 2_2, Zofia Kruczkiewicz1 Wykład 2 – część druga Iteracyjno-rozwojowy cykl oprogramowania 2.
PIO. Autor -Zofia Kruczkiewicz1 Wykład 1-część druga Wstęp do inżynierii oprogramowania. Cykle rozwoju oprogramowania (część biznesowa aplikacji) iteracyjno-rozwojowy.
PIO. Autor -Zofia Kruczkiewicz1 Wykład 1-część druga Wstęp do inżynierii oprogramowania. Cykle rozwoju oprogramowania (część biznesowa aplikacji) iteracyjno-rozwojowy.
Każde twierdzenie można zapisać w postaci: "Jeśli a to b". a – nazywamy założeniem twierdzenia, b – nazywamy tezą twierdzenia. Jeśli zamienimy b z a miejscami,
Przeglądanie inOrder function BSTinorder(BSTNode root) if root NOT NULL BSTinorder(root.left) Print(root) BSTinorder(root.right) 2, 4, 6, 8, 9, 10, 12,
Podstawy programowania
Owoce i warzywa.
Prawa Dziecka.
Nieformalne miejsca spotkań. ANKIETY Przeprowadziliśmy wśród uczniów gimnazjum ankietę na temat nieformalnych miejsc spotkań. Przedstawimy przykładowe.
Ach te baby... Ach te baby....
W jaki sposób uczniowie ZSE mogą działać na rzecz ekorozwoju lokalnego?
Chwila zadumy ! Moi drodzy, Wysyłam te słowa do wielu osób nie bacząc, czy ktoś jest wierzący czy nie... Dla mnie jest to przesłanie do Wszystkich......
Wykonała Sylwia Kozber
Cz.8 Zdarzenia. Refleksja – przypomnienie Event Programowanie zdarzeniowe Do dzieła!
Antonie de Saint-Exupery
Odpowiedzialność prawna rodziców i opiekunów. Przepisy Art PRD Dziecko w wieku do 7 lat może korzystać z drogi tylko pod opieką osoby, która osiągnęła.
Pęd Wielkością charakteryzującą ruch ciała jest prędkość. Zmiana ruchu, tzn. zmiana prędkości, wymaga pokonania oporu bezwładności. Miarą bezwładności.
Czym jest i dokąd prowadzi.
xHTML jako rozszerzenie HTML
HTML Podstawy języka hipertekstowego Damian Urbańczyk.
XHTML Odsyłacze tekstowe i graficzne Damian Urbańczyk.
PATOLOGIE SPOŁECZNE. Ubóstwo i bezrobocie SPOSOBY ZWALCZANIA UBÓSTWA I BEZROBOCIA System opieki społecznej Programy aktywneProgramy pasywne.
Filozofia kultury i naturalizm Piotr Makowski Instytut Filozofii Uniwersytet im. Adama Mickiewicza w Poznaniu.
Jak się uchronić przed zagrożeniami wynikającymi z użytkowania sieci?
„Musicie być mocni mocą miłości, która jest potężniejsza niż śmierć”
Następstwa ODD ODD może przekształcić się w Zespół Zaburzenia Zachowania tj. CD (Conduct Disorder), Dzieci z tym zespołem to jednostki niedostosowane społecznie!
Warsztaty C# Część 3 Grzegorz Piotrowski Grupa.NET PO
To śmieszne...
Objawienie Pańskie Oto dzisiaj jest Objawienie Pańskie, sam Jezus chce ukazać się nam po to, abyśmy oświeceni przez Niego i pełni Jego Miłości, stali się.
Gumowy Surowiec.
Biznes Społecznie Odpowiedzialny My też mamy coś do powiedzenia! Ogólnopolski Konkurs CSR Biznes Społecznie Odpowiedzialny My też mamy coś do powiedzenia!
Prostokątny układ współrzędnych na płaszczyźnie
Co robisz jak zobaczysz samochód którego szyby są całe pokryte kurzem lub brudem ? ( ) piszesz BRUDAS ( ) piszesz jakieś..... ( ) robisz mały rysuneczek.
JAKIE SA RÓŻNICE POMIĘDZY KOBIETAMI W WIEKU : 8, 18, 28, 38, 48, 58, 68 I 78 ?
Grupa młodych kobiet dociera na miejsce swoich wymarzonych wakacji…. Zaczynają poszukiwania jakiegoś hotelu i bardzo szybko znajdują pięciopiętrowy z napisem.
Temat 5: Elementy meta.
Sprowadzanie rodziny według reguł EOG Ole Andreas Blikken, starszy konsulent, UDI 28 listopada 2008.
Instrukcja switch switch (wyrażenie) { case wart_1 : { instr_1; break; } case wart_2 : { instr_2; break; } … case wart_n : { instr_n; break; } default.
Obsługa strumienia wejścia/wyjścia /zajęcia nr 2/ printf – wyświetlanie scanf – ??? dla printf: \n - nowa linia \t - tabulator poziomy \b - znak cofania.
Pozyskiwanie partnerów. Model popytowego podejścia do tworzenia innowacji Definicja Dwa podejścia do UDI –Głos konsumenta –Przewodnictwo konsumenta Cechy.
w/g Grzegorz Gadomskiego
TYPY KOBIET WEDŁUG INTERNAUTÓW.
Czyli zmora pracowników
Wydział Elektroniki Kierunek: AiR Zaawansowane metody programowania Wykład 6.
Zapis prezentacji:

OOPC++ - operatory1 Operatory class complex { private: double re, im; public: complex (double r, double i = 0) { re = r; im = i; } friend complex operator+ (complex, complex); friend complex operator*(complex, complex); complex& operator += (complex); }; void f() { complex a = complex (1.3, 4); complex b = complex(3); complex c(0); c = b + a; c = b+c * a; c = b + 10; // poprawne - nastąpi niejawna konwersja } Można definiować operatory dla: + - * / % & | ! itd. = += itd. > && || itd. [ ] ( ) new delete Nie można zmienić arności ani priorytetów operatorów. Operatory są z definicji przeciążone.

OOPC++ - operatory2 Zasada: operator musi mieć co najmniej 1 argument będący obiektem klasy (nie dotyczy new i delete). Zwykle operator jest albo funkcją składową jakiejś klasy, albo jej funkcją zaprzyjaźnioną. będzie dwuargumentowym operatorem. Musi być albo jednoargumentową funkcją składową (niejawnym pierwszym argumentem jest obiekt, w którym wykonywana jest metoda), albo dwuargumentową funkcją zaprzyjaźnioną (pierwszy argument jest jawny). b jest interpretowane jako (b) lub (a, b) jest jednoargumentowym operatorem, a jest interpretowane jako () lub (a) complex operator+ (complex a, complex b) { return complex (a.re + b.re, a.im + b.im); } // i analogicznie operator* inline complex& complex::operator+= (complex a) { re += a.re; im += a.im; return *this; }

OOPC++ - operatory3 Przeciążenie operatora << class ostream { //.... public: ostream& operator<< (char*); ostream& operator<< (int i); //... }; Możemy przeciążyć ten operator. Na przykład: class complex { private: double re, im; public: //.... friend ostream& operator<< (ostream& os, complex& c); }; ostream& operator<< (ostream& os, complex& c) { os << ( << c.re <<, << c.im << ); return os; } Można teraz napisać: complex c = complex (3.5, 6.7); cout << c; Uwaga: operator << nie może być metodą klasy complex, ponieważ jego pierwszym argumentem ma być strumień, a nie obiekt complex.

OOPC++ - operatory4 Przeciążanie operatora [ ] Wyrażenie x [ i ] jest interpretowane jako x. operator [ ] ( i ). Operator [ ] musi być funkcją składową. Przykład: dynamiczna tablica indeksowana napisami, służąca do zliczania słów z pliku (coś w rodzaju słownika, o kluczach będących napisami i wartościach będących liczbami). struct pair { char *index; int val; }; class assoc_array { private: ::pair *vec;// tablica par, :: bo w std też jest pair int max, free;// free - pierwsze wolne miejsce public: assoc_array (int);// konstruktor int& operator [ ] (char *);// ma dać drugi element pary void print_all ( ); }; assoc_array :: assoc_array (int s) { max = (s > 16) ? s : 16; free = 0; vec = new ::pair[max]; } Przykład użycia: char buf [MAX]; assoc_array table (512); while (cin >> word) table [word] +;// table[word] jest referencją do val

OOPC++ - operatory5 int& assoc_array :: operator [ ] (char *s) // Szuka pary o kluczu p; jeśli nie ma, to tworzy. Zwraca referencję do // wartości (drugiego elementu pary) { ::pair *pp; for (pp = &vec [free-1]; vec <= pp; pp--) if (strcmp (s, pp -> index) == 0) return (pp -> val); if (free == max ) // przepełnienie { ::pair* nvec = new ::pair [max * 2]; for (int i = 0; i < max; i++) nvec [ i ] = vec [ i ]; delete[] vec; vec = nvec; max = 2 * max; } pp = &vec [free ++]; pp -> index = new char [strlen (s) + 1]; strcpy ( pp -> index, s); pp -> val = 0; return (pp -> val); } void assoc_array :: print_all () { for (int i = 0; i < free; i++) cout << endl << vec [i].index << : << vec [i].val; }

OOPC++ - operatory6 Przeciążanie operatora () Jest to przeciążenie wywoływania funkcji, czyli wyrażenia postaci wyr (lista_wyr) gdzie wyr jest pierwszym argumentem operatora (), a lista_wyr drugim. Przykład - iterator dla assoc_array. Do deklaracji klasy assoc_array dodajemy friend class iterator_assoc; class iterator_assoc { private: const assoc_array& tab;// iterowana tablica int i;// bieżący indeks public: iterator_assoc (const assoc_array& s) : tab(s) { i = 0; } ::pair* operator () () // operator () { return (i < tab.free) ? &tab.vec[i++] : 0; } }; main () // program liczy liczbę wystąpień słów na wejściu { const MAX = 256; char buf [MAX]; assoc_array liczniki (512); while (cin >> buf) liczniki [buf]++; iterator_assoc nast (liczniki);// inicjalizacja iteratora ::pair * p; while (p = nast () ) cout index val << endl; }

OOPC++ - operatory7 Konwersje typów - operatory konwersji X :: operator T () definiuje konwersję z X do T class String { public:..... operator char* () { return tablica; } private: char* tablica; int dlugosc; }; String s =...; char *p = s; // konwersja z typu String do char* Przeciążanie operatora = Problem ten sam, co z konstruktorem kopiującym. class Napis { private: char *ptr; size_t len; public: Napis () { ptr = NULL; len = 0; } // konstruktor kopiujący: Napis (const Napis& n ) {ptr = strdup(n.ptr); len = strlen(ptr);} Napis& operator= (const Napis& n); virtual ~Napis () { /*if (ptr != NULL)*/ delete ptr; } }; Napis& Napis :: operator= (const Napis& n) { if (this != &n) {delete ptr; ptr = new char [len = n.len]; strcpy (ptr, n.ptr); } return *this; }

OOPC++ - operatory8 class String { public: // Konstruktory/Destruktory String() {character_array = new char[1]; character_array[0] = '\0';} String(char* new_string); String(String& new_string);// konstruktor kopiujący String(int integer_to_convert); String(float float_to_convert); ~String() { } // Funkcje implementujące operacje size_t size() {return string_length;} String& copy(); int as_integer(); float as_float(); String& read_up_to (char delimiter); String& break_at (char delimiter); bool contains_string (char* a_character_array); int locate_string (char* a_character_array); String& copy_sequence (int sequence_start, int sequence_end); // Operatory String& operator+ (String& a_string); String& operator+= (String& a_string); String& operator= (String& a_string); String& operator= (const char* a_character_array); int operator< (String& a_string); int operator> (String& a_string); int operator== (String& a_string); operator char* () {return character_array; } // konwersja friend ostream& operator<< (ostream& os, String& a_string); private: char* character_array; size_t string_length; };

OOPC++ - operatory9 String& String::operator+ (String& a_string) { size_t total_size = string_length + strlen(a_string) + 1; char* temp_array = new char[total_size]; char* char_array = a_string; strcpy(temp_array, character_array); strcat(temp_array, char_array); String* new_string = new String(temp_array); delete temp_array; return *new_string; } String& String::operator= (String& a_string) { char* new_char_array = a_string; delete character_array; character_array = new char[strlen(new_char_array) + 1]; strcpy(character_array, new_char_array); string_length = strlen(character_array); return *this; } String& String::operator= (const char* a_character_array) { delete character_array; character_array = new char[strlen(a_character_array) + 1]; strcpy(character_array, a_character_array); string_length = strlen(character_array); return *this; } int String::operator==(String& a_string) { return(strcmp(character_array, (char*) a_string) == 0); } ostream& operator<< (ostream& os, String& a_string) { os << a_string.character_array; return os; }

OOPC++ - operatory10 String::String(char* new_string) { character_array = strdup(new_string); string_length = strlen(character_array); }

OOPC++ - operatory11 Niebezpieczna czwórka Konstruktor bezargumentowy Konstruktor kopiujący Destruktor Operator przypisania