02 klasy metody


Zapis operacji na strumieniu standardowym
Definicje metod i przeciążeń operatorów
Metody i funkcje rozwijane w linii
Definicje struktur złożonych, zależności
Od struktury i funkcji do klasy i metody
Bogdan Kreczmer
bogdan.kreczmer@pwr.wroc.pl
Zakład Podstaw Cybernetyki i Robotyki
Instytut Informatyki, Automatyki i Robotyki
Politechnika Wrocławska
Kurs: Programowanie obiektowe
Copyright©2010 Bogdan Kreczmer
Niniejszy dokument zawiera materiały do wykładu dotyczącego programowania obiektowego. Jest on
udostępniony pod warunkiem wykorzystania wyłącznie do własnych prywatnych potrzeb i może on być kopiowany
wyłącznie w całości, razem z niniejszą stroną tytułową.
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Definicje metod i przeciążeń operatorów
Metody i funkcje rozwijane w linii
Definicje struktur złożonych, zależności
Niniejsza prezentacja została wykonana przy użyciu sys-
A
temu składu LTEX oraz stylubeamer, którego autorem
jest Till Tantau.
Strona domowa projektuBeamer:
http://latex-beamer.sourceforge.net
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Definicje metod i przeciążeń operatorów
Metody i funkcje rozwijane w linii
Definicje struktur złożonych, zależności
1
Zapis operacji na strumieniu standardowym
Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++
Wejście standardowe i strumień wejściowy
Strumienie standardowe, przeciążanie operacji na strumieniach
2
Definicje metod i przeciążeń operatorów
Metody klasy
Przeciążanie operatorów
Przeciążąnie operatorów w klasie i na zewnątrz niej
3
Metody i funkcje rozwijane w linii
Metody rozwijane w linii
Funkcje rozwijane w linii
Podsumowanie
4
Definicje struktur złożonych, zależności
Od struktury do klasy
Reprezentacja w języku UML
Sekcje definicji klasy
Konstruktor bezparametryczny
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Wyświetlenie prostego komunikatu
Język C Język C++
#include #include
int main( ) int main( )
{
{
printf( Hejka!!!\n );
std::cout<< Hejka!!! <return 0;
}
}
Funkcja main w języku C++ domyślnie zwraca wartość 0. Operacje
wyjścia są realizowane na obiekcie cout z wykorzystaniem przeciążenia
operatora lewostronnego przesunięcia bitowego<<
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Wyświetlenie prostego komunikatu
Język C Język C++
#include #include
using namespace std;
int main( ) int main( )
{
{
printf( Hejka!!!\n );
std::cout<< Hejka!!! <return 0;
}
}
Użycie dyrektyw using namespace pozwala pominąć przedrostek
przestrzeni nazwstd
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Wyświetlenie prostego komunikatu
Język C Język C++
#include #include
using namespace std;
int main( ) int main( )
{
{
printf( %6s ,  Hejka!!!\n );
std::cout<< Hejka!!! <return 0;
}
}
Język C umożliwia formatowanie wyświetlanych danych poprzez
zastosowanie sekwencji formatujÄ…cych.
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Wyświetlenie prostego komunikatu
Język C Język C++
#include #include
#include
using namespace std;
int main( )
{
int main( )
printf( %6s ,  Hejka!!!\n );
{
return 0;
cout<}
<< Hejka!!! <}
W języku C++ do formatowania wykorzystujemy manipulatory. Ich użycie
wymaga wcześniejszego dołączenia plikuiomanip.
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Formatowanie strumienia wyjściowego
Język C Język C++
printf( Napis ); cout<<  Napis ;
printf( Napis\n ); cout<<  Napis\n ;
cout<<  Napis << endl;
const char "wNap =  Napis ; const char "wNap =  Napis ;
printf( %s , wNap); cout<< wNap;
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Formatowanie strumienia wyjściowego
Język C Język C++
printf( Napis ); cout<<  Napis ;
printf( Napis\n ); cout<<  Napis\n ;
cout<<  Napis << endl;
const char "wNap =  Napis ; const char "wNap =  Napis ;
printf( %s , wNap); cout<< wNap;
printf( %c ,  a ); cout<<  a ;
char Znak =  a ; char Znak =  a ;
printf( %c , Znak); cout<< Znak;
printf( \n ); cout<<  \n ;
cout<<  \n ;
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Przykład użycia poleceń
#include
using namespace std;
int main( )
{
const char "wNapis =  Napis ;
cout<< wNapis;
cout<<  y ;
cout<< endl;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Formatowanie strumienia wejściowego
Język C Język C++
int ZmInt; int ZmInt;
scanf( %i , &ZmInt); cin>> ZmInt;
float ZmFloat; float ZmFloat;
scanf( %f , &ZmFloat); cin>> ZmFloat;
double ZmDouble; double ZmDouble;
scanf( %lf , &ZmDouble); cin>> ZmDouble;
int ZmInt; int ZmInt;
float ZmFloat; float ZmFloat;
scanf( %i%f , &ZmInt, &ZmFloat); cin>> ZmInt>> ZmFloat;
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Przykład użycia poleceń
#include
using namespace std;
int main( )
{
int ZmInt;
float ZmFloat;
cin>> ZmInt;
cin>> ZmFloat;
cout<< ZmInt<< endl;
cout<< ZmFloat<< endl;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Formatowanie strumienia wejściowego
Język C Język C++
char Znak; int Znak;
scanf( %c , &Znak); cin>> Znak;
char Tab[10000]; char Tab[10000];
scanf( %s , Tab); cin>> Tab;
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Formatowanie strumienia wejściowego
Język C Język C++
char Znak; int Znak;
scanf( %c , &Znak); cin>> Znak;
char Tab[10000]; char Tab[10000];
scanf( %s , Tab); cin>> Tab;
Tak można, ale mimo to tak nie należy robić !!! (niebezpieczeństwo
niekontrolowanego przepełnienia)
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Formatowanie strumienia wejściowego
Język C Język C++
char Tab[10]; char Tab[10];
scanf( %10s , Tab); cin>> setw(sizeof(Tab))>> Tab;
char Znak, Tab[10]; char Znak, Tab[10];
scanf( %c%10s , &Znak, Tab); cin>> Znak>> setw(sizeof(Tab))
>> Tab;
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Formatowanie strumienia wejściowego
Język C Język C++
Wczytywanie bez pomijania znaków białych
int KodZnaku; char Znak;
scanf( %c , &Znak); cin>> noskipws>> Znak;
Wymuszenie pomijania znaków białych
char Znak; char Znak;
scanf( %c , &Znak); cin>> skipws>> Znak;
Odrzucenie znaku
int KodZnaku; char Znak;
KodZnaku = getchar( ); cin.get(Znak);
ungetc(KodZnaku, stdin); cin.unget( );
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Zestawienie dostępnych strumieni
Język C Język C++
fprintf(stderr, Komunikat o błędzie ... ); cerr<<  Komunikat o błędzie ... ;
Predefiniowane strumienie wejścia/wyjścia
FILE" stdin istream cin
FILE" stdout ostream cout
FILE" stderr ostream cerr
ostream clog
Deklaracje plików nagłówkowych dla operacji wejścia/wyjścia
#include #include
#include
using namespace std;
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Lewostronna łączność operatora
cout<< Napis ;
Operacje wejścia/wyjścia są zdefiniowane w oparciu o standardowe
mechanizmy dostępne na poziomie języka C++. W tym sensie biblioteka
standardowa nie wykorzystuje żadnych dodatkowych mechanizmów, które
byłyby spoza definicji jęzka, tak jak to ma miejsce np. w Pascalu.
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Lewostronna łączność operatora
cout<< Napis ;
cout.operator <<( Napis );
Operacje wejścia/wyjścia są zdefiniowane w oparciu o standardowe
mechanizmy dostępne na poziomie języka C++. W tym sensie biblioteka
standardowa nie wykorzystuje żadnych dodatkowych mechanizmów, które
byłyby spoza definicji jęzka, tak jak to ma miejsce np. w Pascalu.
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Lewostronna łączność operatora
cout<< Napis ;
cout.operator <<( Napis );
cout<< Napis <Operacje wejścia/wyjścia są zdefiniowane w oparciu o standardowe
mechanizmy dostępne na poziomie języka C++. W tym sensie biblioteka
standardowa nie wykorzystuje żadnych dodatkowych mechanizmów, które
byłyby spoza definicji jęzka, tak jak to ma miejsce np. w Pascalu.
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Lewostronna łączność operatora
cout<< Napis ;
cout.operator <<( Napis );
cout<< Napis <(cout.operator <<( Napis ) ).operator <<(endl);
Operacje wejścia/wyjścia są zdefiniowane w oparciu o standardowe
mechanizmy dostępne na poziomie języka C++. W tym sensie biblioteka
standardowa nie wykorzystuje żadnych dodatkowych mechanizmów, które
byłyby spoza definicji jęzka, tak jak to ma miejsce np. w Pascalu.
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Wyświetlanie z wykorzystaniem funkcji
. . .
enum Element { a, b, c };
void Wyswietl( Element x)
{
const char "Nazwa =  abc ;
cout<}
int main( )
{
Element x = a;
cout<<  Wartosc zmiennej x:  ;
Wyswietl( x );
cout<}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Wyświetlanie z wykorzystaniem funkcji
. . .
enum Element { a, b, c };
void Wyswietl( Element x)
{
const char "Nazwa =  abc ;
cout<Tworzenie specjalizowanej funkcji do
}
wyświetlania wartości zmiennej danego typu
jest podejściem właściwym dla języka C (gdyż
int main( )
nie ma tam innej możliwości). Oczywistą wadą
{
Element x = a;
takiego podejścia jest brak elastyczności.
cout<<  Wartosc zmiennej x:  ;
Wyswietl( x );
cout<}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Przeciążenie operacji dla strumienia wyjściowego
enum Element { a, b, c };
ostream & operator <<( ostream & StrmWy, Element x )
{
StrmWy<< abc [x];
return StrmWy;
}
int main( )
{
Element Zm = a;
cout<<  Wartosc zmiennej z:  <}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Przeciążenie operacji dla strumienia wyjściowego
enum Element { a, b, c };
ostream & operator <<( ostream & StrmWy, Element x )
{
StrmWy<< abc [x];
return StrmWy;
}
int main( )
{
Element Zm = a;
cout<<  Wartosc zmiennej z:  <}
Przy definiowaniu przeciążenia muszą być spełnione dwa warunki:
1. Pierwszy parametr musi być klasy ostream i musi on być przekazywany przez referencję.
2. Przeciążenie operatora musi zwracać referencję do pierwszego parametru klasy ostream.
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Przeciążenie operacji dla strumienia wyjściowego
enum Element { a, b, c };
ostream & operator <<( ostream & StrmWy, Element x )
{
return StrmWy<< abc [x];
}
int main( )
{
Element Zm = a;
cout<<  Wartosc zmiennej z:  <}
Dzięki temu, że przeciążęnie operatora<< zwraca zawsze referencję do obiektu ostream,
możliwy jest znacznie bardziej zwarty zapis.
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Operacje wyświetlania dla dowolnego typu wyliczeniowego
enum Stan { Uspienie, Czuwanie, Aktywny };
ostream & operator <<( ostream & StrmWy, Stan x )
{
const char "Nazwa[ ] = {  Uspienie ,  Czuwanie ,  Aktywny };
return StrmWy<}
int main( )
{
Stan Zm = Czuwanie;
cout<<  Wartosc zmiennej z:  <}
Tłumaczenie wartości stanu na nazwę można łatwo zrealizować wykorzystując tablicę
napisów.
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Przeciążenie operacji dla strumienia wejściowego
enum Element { a, b, c };
int main( )
{
Element Zm;
cin>> Zm;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Przeciążenie operacji dla strumienia wejściowego
enum Element { a, b, c };
istream & operator >>( istream & StrmWe, Element & WczytSym )
{
. . .
}
int main( )
{
Element Zm;
cin>> Zm;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Przeciążenie operacji dla strumienia wejściowego
enum Element { a, b, c };
istream & operator >>( istream & StrmWe, Element & WczytSym )
{
Przy definiowaniu przeciążenia muszą być spełnione dwa warunki:
1
Pierwszy parametr musi być klasy istream i musi on być przekazywany
przez referencjÄ™.
2
Przeciążenie operatora musi zwracać referencję do pierwszego
parametru klasy istream.
3
Drugi parametr musi być przekazany przez referencję.
}
int main( )
{
Element Zm;
cin>> Zm;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Przeciążenie operacji dla strumienia wejściowego
enum Element { a, b, c };
istream & operator >>( istream & StrmWe, Element & WczytSym )
{
Element TabSymboli[ ] = { a, b, c };
char ZnakSymbolu;
}
int main( )
{
Element Zm;
cin>> Zm;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Przeciążenie operacji dla strumienia wejściowego
enum Element { a, b, c };
istream & operator >>( istream & StrmWe, Element & WczytSym )
{
Element TabSymboli[ ] = { a, b, c };
char ZnakSymbolu;
StrmWe>>ZnakSymbolu;
}
int main( )
{
Element Zm;
cin>> Zm;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Przeciążenie operacji dla strumienia wejściowego
enum Element { a, b, c };
istream & operator >>( istream & StrmWe, Element & WczytSym )
{
Element TabSymboli[ ] = { a, b, c };
char ZnakSymbolu;
StrmWe>>ZnakSymbolu;
if (!strchr( abc ,ZnakSymbolu)) { . . .; exit(1); }
}
int main( )
{
Element Zm;
cin>> Zm;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Przeciążenie operacji dla strumienia wejściowego
enum Element { a, b, c };
istream & operator >>( istream & StrmWe, Element & WczytSym )
{
Element TabSymboli[ ] = { a, b, c };
char ZnakSymbolu;
StrmWe>>ZnakSymbolu;
if (!strchr( abc ,ZnakSymbolu)) { . . .; exit(1); }
WczytSym = TabSymboli[ZnakSymbolu- a ];
}
int main( )
{
Element Zm;
cin>> Zm;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Przeciążenie operacji dla strumienia wejściowego
enum Element { a, b, c };
istream & operator >>( istream & StrmWe, Element & WczytSym )
{
Element TabSymboli[ ] = { a, b, c };
char ZnakSymbolu;
StrmWe>>ZnakSymbolu;
if (!strchr( abc ,ZnakSymbolu)) { . . .; exit(1); }
WczytSym = TabSymboli[ZnakSymbolu- a ];
return StrmWe;
}
int main( )
{
Element Zm;
cin>> Zm;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Przeciążenie operacji dla strumienia wejściowego
enum Element { a, b, c };
istream & operator >>( istream & StrmWe, Element & WczytSym )
{
Element TabSymboli[ ] = { a, b, c };
char ZnakSymbolu;
StrmWe>>ZnakSymbolu;
if (!strchr( abc ,ZnakSymbolu)) { . . .; exit(1); }
WczytSym = TabSymboli[ZnakSymbolu- a ];
return StrmWe;
Mają zdefiniowne przeciążenie jak wczytać
}
zapis operacji z wejścia standardowego:
int main( )
a+c
{
Element Zm;
cin>> Zm;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Przeciążenie operacji dla strumienia wejściowego
enum Element { a, b, c };
istream & operator >>( istream & StrmWe, Element & WczytSym )
{
Element TabSymboli[ ] = { a, b, c };
char ZnakSymbolu;
a+c
. . .
Operacja staje siÄ™ bardzo prosta. Wczytujemy pierwszy
argument jako symbol, znak operatora, a następnie
}
drugi argument także jako symbol.
int main( )
{
Element Arg1, Oper, Arg2;
char Oper;
cin>> Arg1>> Oper>> Arg2;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Przeciążenie operacji dla strumienia wejściowego
enum Element { a, b, c };
istream & operator >>( istream & StrmWe, Element & WczytSym )
{
Element TabSymboli[ ] = { a, b, c };
char ZnakSymbolu;
A jak przeczytać napis:
. . .
 a+c
}
int main( )
{
Element Arg1, Oper, Arg2;
char Oper;
cin>> Arg1>> Oper>> Arg2;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Przeciążenie operacji dla strumienia wejściowego
enum Element { a, b, c };
istream & operator >>( istream & StrmWe, Element & WczytSym )
{
Element TabSymboli[ ] = { a, b, c };
char ZnakSymbolu;
Można do tego celu wykorzystać strumień napisowy.
Nasze przeciążenie będzie działało również w tym
. . .
} przypadku, gdyż klasa istringstream dziedziczy klasę
istream.
int main( )
{
Element Arg1, Oper, Arg2;
char Oper;
istringstream StrmNap;
StrmNap.str( a+b );
StrmNap>> Arg1>> Oper>> Arg2;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Podstawowe operacje
Definicje metod i przeciążeń operatorów Formatowanie strumieni standardowych - porównanie C i C++
Metody i funkcje rozwijane w linii Wejście standardowe i strumień wejściowy
Definicje struktur złożonych, zależności Strumienie standardowe, przeciążanie operacji na strumieniach
Przeciążenie operacji dla strumienia wejściowego
enum Element { a, b, c };
istream & operator >>( istream & StrmWe, Element & WczytSym )
{
Element TabSymboli[ ] = { a, b, c };
char ZnakSymbolu;
Aby wszystko zadziałało trzeba pamiętać aby wcześniej
dołączyć plik nagłówkowysstream, tzn.
. . .
}
#include
W nim znajduje siÄ™ definicja klasy istringstream.
int main( )
{
Element Arg1, Oper, Arg2;
char Oper;
istringstream StrmNap;
StrmNap.str( a+b );
StrmNap>> Arg1>> Oper>> Arg2;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Od funkcji do metody
Jeszcze funkcja Już metoda
struct LZespolona {
struct LZespolona {
float re;
float re; float im;
float im;
void Sprzezenie( );
};
};
void LZespolona::Sprzezenie( )
void sprzezenie( LZespolona "wLZesp )
{
{
im =  im;
wLZesp >im =  wLZesp >im;
}
}
int main( )
int main( )
{
{
LZespolona LZesp;
LZespolona LZesp;
LZesp.re = 5; LZesp.im = -6;
LZesp.re = 5; LZesp.im = -6;
LZesp.Sprzezenie( );
sprzezenie(&LZesp);
}
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Model obiektu
Struktura i funkcja Struktura i metoda
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Funkcja działająca na strukturze
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona dodaj( LZespolona Z1, LZespolona Z2 )
{
Z2.re += Z1.re; Z2.im += Z1.im;
return Z2;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = dodaj( lz1, lz2 );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Funkcja działająca na strukturze
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona dodaj( LZespolona Z1, LZespolona Z2 )
{
Z2.re += Z1.re; Z2.im += Z1.im;
return Z2;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = dodaj( lz1, lz2 );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Funkcja działająca na strukturze
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona dodaj( LZespolona Z1, LZespolona Z2 )
{
Z2.re += Z1.re; Z2.im += Z1.im;
return Z2;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = dodaj( lz1, lz2 );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Od funkcji do metody
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona dodaj( LZespolona Z1, LZespolona Z2 )
{
Z2.re += Z1.re; Z2.im += Z1.im;
return Z2;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = dodaj( lz1, lz2 );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Od funkcji do metody
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
LZespolona dodaj( LZespolona Z2 );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona dodaj( LZespolona Z1, LZespolona Z2 )
{
Z2.re += Z1.re; Z2.im += Z1.im;
return Z2;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = dodaj( lz1, lz2 );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Od funkcji do metody
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
LZespolona dodaj( LZespolona Z2 );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona dodaj( LZespolona Z1, LZespolona Z2 )
{
Z2.re += Z1.re; Z2.im += Z1.im;
return Z2;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = dodaj( lz1, lz2 );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Od funkcji do metody
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
LZespolona dodaj( LZespolona Z2 );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona LZespolona::dodaj( LZespolona Z2 )
{
Z2.re += re; Z2.im += im;
return Z2;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = dodaj( lz1, lz2 );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Od funkcji do metody
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
LZespolona dodaj( LZespolona Z2 );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona LZespolona::dodaj( LZespolona Z2 )
{
Z2.re += re; Z2.im += im;
return Z2;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = dodaj( lz1, lz2 );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Od funkcji do metody
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
LZespolona dodaj( LZespolona Z2 );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona LZespolona::dodaj( LZespolona Z2 )
{
Z2.re += re; Z2.im += im;
return Z2;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = lz1.dodaj( lz2 );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Od funkcji do metody
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
LZespolona dodaj( LZespolona Z2 );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona LZespolona::dodaj( LZespolona Z2 )
{
Z2.re += this  >re; Z2.im += this  >im;
return Z2;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = lz1.dodaj( lz2 );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Od metody do funkcji w C
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona LZespolona::dodaj( LZespolona Z2 )
{
Z2.re += this  >re; Z2.im += this  >im;
return Z2;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = lz1.dodaj( lz2 );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Od metody do funkcji w C
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona dodaj( LZespolona *this, LZespolona Z2 )
{
Z2.re += this >re; Z2.im += this >im;
return Z2;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = lz1.dodaj( lz2 );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Od metody do funkcji w C
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona dodaj( LZespolona *this, LZespolona Z2 )
{
Z2.re += this >re; Z2.im += this >im;
return Z2;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = dodaj( &lz1, lz2 );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Ten sam zapis w C++
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
LZespolona dodaj( LZespolona Z2 );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona LZespolona::dodaj( LZespolona Z2 )
{
Z2.re += this  >re; Z2.im += this  >im;
return Z2;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = lz1.dodaj( lz2 );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Ten sam zapis w C++
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
LZespolona dodaj( LZespolona Z2 );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona LZespolona::dodaj( LZespolona Z2 )
{
Z2.re += re; Z2.im += im;
return Z2;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = lz1.dodaj( lz2 );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Od funkcji do operatora
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona dodaj( LZespolona Z1, LZespolona Z2 )
{
Z2.re += Z1.re; Z2.im += Z1.im;
return Z2;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = dodaj( lz1, lz2 );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Od funkcji do operatora
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona dodaj( LZespolona Z1, LZespolona Z2 )
{
Z2.re += Z1.re; Z2.im += Z1.im;
return Z2;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = dodaj( lz1, lz2 );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Od funkcji do operatora
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona operator + ( LZespolona Z1, LZespolona Z2 )
{
Z2.re += Z1.re; Z2.im += Z1.im;
return Z2;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = dodaj( lz1, lz2 );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Od funkcji do operatora
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona operator + ( LZespolona Z1, LZespolona Z2 )
{
Z2.re += Z1.re; Z2.im += Z1.im;
return Z2;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = dodaj( lz1, lz2 );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Od funkcji do operatora
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona operator + ( LZespolona Z1, LZespolona Z2 )
{
Z2.re += Z1.re; Z2.im += Z1.im;
return Z2;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = lz1 + lz2;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Od funkcji do operatora
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona operator + ( LZespolona Z1, LZespolona Z2 )
{
Z2.re += Z1.re; Z2.im += Z1.im;
return Z2;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = lz1 + lz2 + lz1;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Od funkcji do operatora
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona operator + ( LZespolona Z1, LZespolona Z2 )
{
Z2.re += Z1.re; Z2.im += Z1.im;
return Z2;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = lz1 + lz2 + lz1+ (lz1 = l2 + lz1);
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Od funkcji do operatora
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona operator + ( LZespolona Z1, LZespolona Z2 )
{
Z2.re += Z1.re; Z2.im += Z1.im;
return Z2;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = lz1 + lz2;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Od funkcji do operatora
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
LZespolona operator + ( LZespolona Z2 );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona operator + ( LZespolona Z1, LZespolona Z2 )
{
Z2.re += Z1.re; Z2.im += Z1.im;
return Z2;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = lz1 + lz2;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Od funkcji do operatora
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
LZespolona operator + ( LZespolona Z2 );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona operator + ( LZespolona Z1, LZespolona Z2 )
{
Z2.re += Z1.re; Z2.im += Z1.im;
return Z2;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = lz1 + lz2;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Od funkcji do operatora
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
LZespolona operator + ( LZespolona Z2 );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona LZespolona::operator + ( LZespolona Z2 )
{
Z2.re += re; Z2.im += im;
return Z2;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = lz1 + lz2;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Od funkcji do operatora
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
LZespolona operator + ( LZespolona Z2 );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona LZespolona::operator + ( LZespolona Z2 )
{
Z2.re += re; Z2.im += im;
return Z2;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = lz1 + lz2;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Od funkcji do operatora
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
LZespolona operator + ( LZespolona Z2 );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona LZespolona::operator + ( LZespolona Z2 )
{
re += Z2.re; im += Z2.im;
return "this ;
}
int main( )
A czy tak będzie dobrze?
{
LZespolona lz1, lz2, lz3;
lz3 = lz1 + lz2;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Od funkcji do operatora
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
LZespolona operator + ( LZespolona Z2 );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona LZespolona::operator + ( LZespolona Z2 )
{
re += Z2.re; im += Z2.im;
return "this ;
}
int main( )
Nie jest to poprawna implementacja, gdyż
{
przy okazji obliczenia sumy zmieniana jest
LZespolona lz1, lz2, lz3;
zawartość obiektu i jest ona widoczna  na
lz3 = lz1 + lz2;
zewnÄ…trz .
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Operatory dla różnych argumentów
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
LZespolona operator + ( LZespolona Z2 );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona LZespolona::operator " ( float liczba )
{
LZespolona Z;
Z.re = re " liczba; Z.im = im " liczba;
return Z;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = lz1 " 3;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Operatory dla różnych argumentów
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
LZespolona operator " ( float liczba );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona LZespolona::operator " ( float liczba )
{
LZespolona Z;
Z.re = re " liczba; Z.im = im " liczba;
return Z;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = lz1 " 3;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Operatory dla różnych argumentów
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
LZespolona operator " ( float liczba );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona LZespolona::operator " ( float liczba )
{
LZespolona Z;
Z.re = re " liczba; Z.im = im " liczba;
return Z;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = lz1 " 3;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Operatory dla różnych argumentów
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
LZespolona operator " ( float liczba );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona LZespolona::operator " ( float liczba )
{
LZespolona Z;
Z.re = re " liczba; Z.im = im " liczba;
return Z;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = lz1 " 3;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Operatory dla różnych argumentów
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
LZespolona operator " ( float liczba );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona LZespolona::operator " ( float liczba )
{
LZespolona Z;
Z.re = re " liczba; Z.im = im " liczba;
return Z;
}
int main( )
Czy ta operacjalz2 = 3 " lz1
{
jest poprawna?
LZespolona lz1, lz2, lz3;
lz3 = 3 " lz1;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Operatory dla różnych argumentów
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona operator " ( LZespolona Z, float liczba )
{
Z.re = re " liczba; Z.im = im " liczba;
return Z;
}
int main( )
Czy ta operacjalz3 = 3 " lz1
{
jest poprawna?
LZespolona lz1, lz2, lz3;
lz3 = 3 " lz1;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Operatory dla różnych argumentów
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona operator " ( LZespolona Z, float liczba )
{
Z.re = re " liczba; Z.im = im " liczba;
return Z;
}
int main( )
Czy ta operacjalz3 = 3 " lz1
{
jest poprawna?
LZespolona lz1, lz2, lz3;
lz3 = operator " ( 3, lz1 );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Operatory dla różnych argumentów
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona operator " ( LZespolona Z, float liczba )
{
Z.re = re " liczba; Z.im = im " liczba;
return Z;
}
int main( )
Operacja nie jest poprawna, gdyż
{
brak jest zgodności typów
LZespolona lz1, lz2, lz3;
poszczególnych argumentów.
lz3 = operator " ( 3, lz1 );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Przemienność operatorów
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona operator " ( float liczba, LZespolona Z )
{
Z.re = re " liczba; Z.im = im " liczba;
return Z;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = operator " ( 3, lz1 );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Przemienność operatorów
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona operator " ( float liczba, LZespolona Z )
{
Z.re = re " liczba; Z.im = im " liczba;
return Z;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = 3 " lz1;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Przemienność operatorów
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona operator " ( float liczba, LZespolona Z )
{
Z.re = re " liczba; Z.im = im " liczba;
return Z;
}
int main( )
{
LZespolona lz1, lz2, lz3; A czy teraz wszystko będzie dobrze?
lz3 = 3 " lz1 " 5;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Przemienność operatorów
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona operator " ( float liczba, LZespolona Z )
{
Z.re = re " liczba; Z.im = im " liczba;
return Z;
}
int main( )
{
LZespolona lz1, lz2, lz3; Aby wszystko było dobrze należy zapewnić
przemienność operacji mnożenia.
lz3 = 3 " lz1 " 5;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Przemienność operatorów
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
LZespolona operator " ( float liczba );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona operator " ( float liczba, LZespolona Z )
{
Z.re = re " liczba; Z.im = im " liczba;
return Z;
}
int main( )
{
LZespolona lz1, lz2, lz3;
lz3 = 3 " lz1 " 5;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Przemienność operatorów
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
LZespolona operator " ( float liczba );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona LZespolona::operator " ( float liczba )
{ . . . }
LZespolona operator " ( float liczba, LZespolona Z )
{ . . . }
int main( )
{
LZespolona lz1, lz2, lz3; Teraz jest już dobrze.
lz3 = 3 " lz1 " 5;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Przemienność operatorów
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona operator " ( LZespolona Z, float liczba )
{ . . . }
LZespolona operator " ( float liczba, LZespolona Z )
{ . . . }
int main( )
{
LZespolona lz1, lz2, lz3; Teraz jest również dobrze.
lz3 = 3 " lz1 " 5;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Przeciążanie na zewnątrz klasy
Kiedy należy definiować przeciążenie operatora zewnętrznie względem
danej klasy?
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Przeciążanie na zewnątrz klasy
Kiedy należy definiować przeciążenie operatora zewnętrznie względem
danej klasy?
Gdy pierwszym argumentem jest jeden z wbudowanych
typów prostych, np.int,char,char*, itd.
Gdy pierwszym argumentem jest klasa, której definicja
nie może być zmodyfikowana, np.std::ostream,
std::istreamitd.
Gdy przeciążenie ma mieć charakter lokalny, np. ma być
widoczne tylko w danym module. To znaczy, gdy nie
chcemy, aby przeciążenie to było trwałą własnością klasy.
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Przeciążanie na zewnątrz klasy
Kiedy należy definiować przeciążenie operatora zewnętrznie względem
danej klasy?
Gdy pierwszym argumentem jest jeden z wbudowanych
typów prostych, np.int,char,char*, itd.
Gdy pierwszym argumentem jest klasa, której definicja
nie może być zmodyfikowana, np.std::ostream,
std::istreamitd.
Gdy przeciążenie ma mieć charakter lokalny, np. ma być
widoczne tylko w danym module. To znaczy, gdy nie
chcemy, aby przeciążenie to było trwałą własnością klasy.
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Przeciążanie na zewnątrz klasy
Kiedy należy definiować przeciążenie operatora zewnętrznie względem
danej klasy?
Gdy pierwszym argumentem jest jeden z wbudowanych
typów prostych, np.int,char,char*, itd.
Gdy pierwszym argumentem jest klasa, której definicja
nie może być zmodyfikowana, np.std::ostream,
std::istreamitd.
Gdy przeciążenie ma mieć charakter lokalny, np. ma być
widoczne tylko w danym module. To znaczy, gdy nie
chcemy, aby przeciążenie to było trwałą własnością klasy.
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Przeciążanie na zewnątrz klasy
Kiedy należy definiować przeciążenie operatora zewnętrznie względem
danej klasy?
Gdy pierwszym argumentem jest jeden z wbudowanych
typów prostych, np.int,char,char*, itd.
Gdy pierwszym argumentem jest klasa, której definicja
nie może być zmodyfikowana, np.std::ostream,
std::istreamitd.
Gdy przeciążenie ma mieć charakter lokalny, np. ma być
widoczne tylko w danym module. To znaczy, gdy nie
chcemy, aby przeciążenie to było trwałą własnością klasy.
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Przeciążanie wewnątrz klasy
Kiedy należy definiować przeciążenie operatora jako metodę klasy?
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Przeciążanie wewnątrz klasy
Kiedy należy definiować przeciążenie operatora jako metodę klasy?
Gdy przeciążenie ma należeć do trwałych własności klasy.
Zdefiniowanie przeciążenia w klasie poprawia czytelność
dokumentacji kodu, jak też samego kodu.
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody klasy
Definicje metod i przeciążeń operatorów
Przeciążanie operatorów
Metody i funkcje rozwijane w linii
Przeciążąnie operatorów w klasie i na zewnątrz niej
Definicje struktur złożonych, zależności
Przeciążanie wewnątrz klasy
Kiedy należy definiować przeciążenie operatora jako metodę klasy?
Gdy przeciążenie ma należeć do trwałych własności klasy.
Zdefiniowanie przeciążenia w klasie poprawia czytelność
dokumentacji kodu, jak też samego kodu.
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Definiowanie metody na zewnÄ…trz definicji klasy
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
void Sprzezenie( );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona LZespolona::Sprzezenie( )
{
im =  im;
}
int main( )
{
LZespolona lz1;
lz1.Sprzezenie( );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Definiowanie metody na zewnÄ…trz definicji klasy
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
void Sprzezenie( );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona LZespolona::Sprzezenie( )
{
im =  im;
}
int main( )
{
LZespolona lz1;
lz1.Sprzezenie( );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Definiowanie metody na zewnÄ…trz definicji klasy
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
void Sprzezenie( );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona LZespolona::Sprzezenie( )
{
im =  im;
}
int main( )
{
LZespolona lz1;
lz1.Sprzezenie( );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Definiowanie metody na zewnÄ…trz definicji klasy
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
void Sprzezenie( );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona LZespolona::Sprzezenie( )
{
im =  im;
}
int main( )
{
LZespolona lz1;
lz1.Sprzezenie( );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Definiowanie metody na zewnÄ…trz definicji klasy
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
void Sprzezenie( );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LZespolona LZespolona::Sprzezenie( )
{
im =  im;
}
int main( )
{
LZespolona lz1;
lz1.Sprzezenie( );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Definiowanie metod wewnÄ…trz definicji klasy
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
void Sprzezenie( )
{
im =  im;
}
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
LZespolona lz1;
lz1.Sprzezenie( );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Definiowanie metod wewnÄ…trz definicji klasy
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
void Sprzezenie( ) { im =  im; }
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
LZespolona lz1;
lz1.Sprzezenie( );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Definiowanie metod wewnÄ…trz definicji klasy
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
void Sprzezenie( ) { im =  im; }
LZespolona operator + ( LZespolona Z2 )
{
Z2.re += re; Z2.im += im;
return Z2;
}
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
LZespolona lz1;
lz1.Sprzezenie( );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Definiowanie metod wewnÄ…trz definicji klasy
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
void Sprzezenie( ) { im =  im; }
LZespolona operator + ( LZespolona Z2 )
{
Z2.re += re; Z2.im += im;
return Z2;
}
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
LZespolona lz1;
lz1.Sprzezenie( );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Definiowanie metod wewnÄ…trz definicji klasy
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
void Sprzezenie( ) { im =  im; }
LZespolona operator + ( LZespolona Z2 )
{
Z2.re += re; Z2.im += im;
return Z2;
}
float re;
float im;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
LZespolona lz1;
lz1.Sprzezenie( );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Definiowanie metod wewnÄ…trz definicji klasy
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
void Sprzezenie( ) { im =  im; }
LZespolona operator + ( LZespolona Z2 )
{
Z2.re += re; Z2.im += im;
return Z2;
}
float re;
float im;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
W ciele definicji klasy kolejność deklaracji
LZespolona lz1;
pól i definicji metod nie ma znaczenia.
lz1.Sprzezenie( );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Definiowanie metod wewnÄ…trz definicji klasy
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
void Sprzezenie( ) { im =  im; }
LZespolona operator + ( LZespolona Z2 )
{
Z2.re += re; Z2.im += im;
return Z2;
}
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
LZespolona lz1;
lz1.Sprzezenie( );
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Definiowanie metod wewnÄ…trz definicji klasy
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
void Sprzezenie( ) { im =  im; }
LZespolona operator + ( LZespolona Z2 )
{
Z2.re += re; Z2.im += im;
return Z2;
}
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
Kod metody definiowanej w ciele klasy
LZespolona lz1;
domyślnie rozwijany jest przez kompilator w
lz1.Sprzezenie( );
miejscu wywołania metody.
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Definiowanie metod wewnÄ…trz definicji klasy
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
void Sprzezenie( ) { im =  im; }
LZespolona operator + ( LZespolona Z2 )
{
Z2.re += re; Z2.im += im;
return Z2;
}
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
Domyślne zachowanie kompilatora może
LZespolona lz1;
zostać jednak zmienione poprzez użycie
lz1.Sprzezenie( );
odpowiednich opcji, np. dlag++jest to
}
-fno-default-inline.
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Definiowanie metod wewnÄ…trz definicji klasy
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
inline void Sprzezenie( ) { im =  im; }
inline LZespolona operator + ( LZespolona Z2 )
{
Z2.re += re; Z2.im += im;
return Z2;
}
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
Chcąc uniezależnić się od ustawień
LZespolona lz1;
kompilatora można użyć słowa kluczowe
lz1.Sprzezenie( );
inline.
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Definiowanie metod wewnÄ…trz definicji klasy
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
inline void Sprzezenie( ) { im =  im; }
inline LZespolona operator + ( LZespolona Z2 )
{
Z2.re += re; Z2.im += im;
return Z2;
}
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
Użycieinlinenie gwarantuje rozwinięcia
LZespolona lz1;
kodu. Jest ono traktowane jedynie jako
lz1.Sprzezenie( );
zalecenie. Kompilator sam podejmuje
}
decyzję, czy kod można rozwinąć.
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Definiowanie metod inline na zewnÄ…trz definicji klasy
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
inline void Sprzezenie( ) { im =  im; }
inline LZespolona operator + ( LZespolona Z2 );
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
inline LZespolona LZespolona::operator + ( LZespolona Z2 )
{
Z2.re += re; Z2.im += im;
return Z2;
}
int main( )
{
Metody typu inline mogą być definiowane
LZespolona lz1;
również poza ciałem klasy. Jednak wtedy
lz1.Sprzezenie( );
koniecznie należy użyć modyfikatora
}
inline.
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Funkcje typu inline
inline double Poteguj( double Wykladnik, unsigned int Potega )
{
double Wynik = 1;
for (; Potega; --Potega) Wynik "= Wykladnik;
return Wynik;
}
int main( )
{
double Wynik = Poteguj(4,3);
cout<< Wynik<< endl;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Funkcje typu inline
inline double Poteguj( double Wykladnik, unsigned int Potega )
{
return Potega == 0 ? 1 : Wykladnik"Poteguj(Wykladnik,Potega  1);
}
int main( )
{
double Wynik = Poteguj(4,3);
cout<< Wynik<< endl;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Funkcje typu inline
inline double Poteguj( double Wykladnik, unsigned int Potega )
{
return Potega == 0 ? 1 : Wykladnik"Poteguj(Wykladnik,Potega  1);
}
int main( )
{
double Wynik = Poteguj(4,3);
cout<< Wynik<< endl;
}
Sposób rozwinięcia kodu zależy odinteligencjikompilatora. Dla
przedstawionego wywołania może ono mieć postać4"Poteguj(4,2),
albo też może ono sprowadzić się do zapisu64.
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Funkcje typu inline
modul.cpp
inline double Poteguj( double Wykladnik, unsigned int Potega )
{
return Potega == 0 ? 1 : Wykladnik"Poteguj(Wykladnik,Potega  1);
}
program.cpp
int main( )
{
double Wynik = Poteguj(4,3);
cout<< Wynik<< endl;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Funkcje typu inline
modul.cpp
inline double Poteguj( double Wykladnik, unsigned int Potega )
{
return Potega == 0 ? 1 : Wykladnik"Poteguj(Wykladnik,Potega  1);
}
program.cpp
inline double Poteguj( double Wykladnik, unsigned int Potega );
int main( )
{
double Wynik = Poteguj(4,3);
cout<< Wynik<< endl;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Funkcje typu inline
modul.cpp
inline double Poteguj( double Wykladnik, unsigned int Potega )
{
return Potega == 0 ? 1 : Wykladnik"Poteguj(Wykladnik,Potega  1);
}
program.cpp
inline double Poteguj( double Wykladnik, unsigned int Potega );
int main( )
{
double Wynik = Poteguj(4,3);
cout<< Wynik<< endl;
}
Odwołanie do funkcji rozwijanej w linii może być zrealizowane tylko i
wyłącznie w tej samej jednostce translacyjnej, w której jest ona zdefiniowana.
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Funkcje typu inline
modul.cpp
inline double Poteguj( double Wykladnik, unsigned int Potega )
{
return Potega == 0 ? 1 : Wykladnik"Poteguj(Wykladnik,Potega  1);
}
program.cpp
inline double Poteguj( double Wykladnik, unsigned int Potega );
int main( )
{
double Wynik = Poteguj(4,3);
cout<< Wynik<< endl;
}
Konsolidacja tego kodu zakończy się niepowodzeniem. Linker zgłosi brak kodu
funkcjiPoteguj.
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Funkcje typu inline
modul.hh
inline double Poteguj( double Wykladnik, unsigned int Potega )
{
return Potega == 0 ? 1 : Wykladnik"Poteguj(Wykladnik,Potega  1);
}
program.cpp
#include  modul.hh
int main( )
{
double Wynik = Poteguj(4,3);
cout<< Wynik<< endl;
}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Funkcje typu inline
modul.hh
inline double Poteguj( double Wykladnik, unsigned int Potega )
{
return Potega == 0 ? 1 : Wykladnik"Poteguj(Wykladnik,Potega  1);
}
program.cpp
#include  modul.hh
int main( )
{
double Wynik = Poteguj(4,3);
cout<< Wynik<< endl;
}
Funkcje rozwijane w linii, które są eksportowane do innych modułów muszą
być definiowane w plikach nagłówkowych.
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Uwarunkowania rozwinięć kodu
Specyfikator inline nie jest dla kompilatora poleceniem
rozwinięcia funkcji lub metody w linii wywołania. Pełni on
jedynie rolę zalecenia, które powinno być w miarę
możliwości uwzględnione.
Kompilator przy podejmowaniu decyzji o rozwinięciu kodu
funkcji kierować się może heurystycznymi ocenami
uzwględniającymi, np. rozmiar kodu rozwijanej funkcji i/lub
ilość dokonanych rozwinięć w aktualnie kompilowanej
funkcji.
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Uwarunkowania rozwinięć kodu
Specyfikator inline nie jest dla kompilatora poleceniem
rozwinięcia funkcji lub metody w linii wywołania. Pełni on
jedynie rolę zalecenia, które powinno być w miarę
możliwości uwzględnione.
Kompilator przy podejmowaniu decyzji o rozwinięciu kodu
funkcji kierować się może heurystycznymi ocenami
uzwględniającymi, np. rozmiar kodu rozwijanej funkcji i/lub
ilość dokonanych rozwinięć w aktualnie kompilowanej
funkcji.
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Uwarunkowania rozwinięć kodu
Specyfikator inline nie jest dla kompilatora poleceniem
rozwinięcia funkcji lub metody w linii wywołania. Pełni on
jedynie rolę zalecenia, które powinno być w miarę
możliwości uwzględnione.
Kompilator przy podejmowaniu decyzji o rozwinięciu kodu
funkcji kierować się może heurystycznymi ocenami
uzwględniającymi, np. rozmiar kodu rozwijanej funkcji i/lub
ilość dokonanych rozwinięć w aktualnie kompilowanej
funkcji.
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Konsekwencje rozwinięcia kodu
Rozwinięcie funkcji nie zawsze musi oznaczać zwiększenie
rozmiaru kodu (aczkolwiek zazwyczaj tak jest).
Stosowanie częstych rozwinięć funkcji nie zawsze musi
oznaczać przyśpieszenie wykonywania kodu (aczkolwiek
zazwyczaj tak jest).
Specyfikator inline nie wpływa na znaczenie funkcji;
funkcja rozwijana w miejscu wywołania nadal ma
unikatowy adres.
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Konsekwencje rozwinięcia kodu
Rozwinięcie funkcji nie zawsze musi oznaczać zwiększenie
rozmiaru kodu (aczkolwiek zazwyczaj tak jest).
Stosowanie częstych rozwinięć funkcji nie zawsze musi
oznaczać przyśpieszenie wykonywania kodu (aczkolwiek
zazwyczaj tak jest).
Specyfikator inline nie wpływa na znaczenie funkcji;
funkcja rozwijana w miejscu wywołania nadal ma
unikatowy adres.
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Konsekwencje rozwinięcia kodu
Rozwinięcie funkcji nie zawsze musi oznaczać zwiększenie
rozmiaru kodu (aczkolwiek zazwyczaj tak jest).
Stosowanie częstych rozwinięć funkcji nie zawsze musi
oznaczać przyśpieszenie wykonywania kodu (aczkolwiek
zazwyczaj tak jest).
Specyfikator inline nie wpływa na znaczenie funkcji;
funkcja rozwijana w miejscu wywołania nadal ma
unikatowy adres.
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Metody rozwijane w linii
Definicje metod i przeciążeń operatorów
Funkcje rozwijane w linii
Metody i funkcje rozwijane w linii
Podsumowanie
Definicje struktur złożonych, zależności
Konsekwencje rozwinięcia kodu
Rozwinięcie funkcji nie zawsze musi oznaczać zwiększenie
rozmiaru kodu (aczkolwiek zazwyczaj tak jest).
Stosowanie częstych rozwinięć funkcji nie zawsze musi
oznaczać przyśpieszenie wykonywania kodu (aczkolwiek
zazwyczaj tak jest).
Specyfikator inline nie wpływa na znaczenie funkcji;
funkcja rozwijana w miejscu wywołania nadal ma
unikatowy adres.
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Od struktury do klasy
Definicje metod i przeciążeń operatorów Reprezentacja w języku UML
Metody i funkcje rozwijane w linii Sekcje definicji klasy
Definicje struktur złożonych, zależności Konstruktor bezparametryczny
Równoważność definicjistructiclass
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
void Sprzezenie( ) { im =  im; }
LZespolona operator + (LZespolona Z2);
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Od struktury do klasy
Definicje metod i przeciążeń operatorów Reprezentacja w języku UML
Metody i funkcje rozwijane w linii Sekcje definicji klasy
Definicje struktur złożonych, zależności Konstruktor bezparametryczny
Równoważność definicjistructiclass
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
void Sprzezenie( ) { im =  im; }
LZespolona operator + (LZespolona Z2);
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
class LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public:
float re;
float im;
void Sprzezenie( ) { im =  im; }
LZespolona operator + (LZespolona Z2);
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Od struktury do klasy
Definicje metod i przeciążeń operatorów Reprezentacja w języku UML
Metody i funkcje rozwijane w linii Sekcje definicji klasy
Definicje struktur złożonych, zależności Konstruktor bezparametryczny
Równoważność definicjistructiclass
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . .
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
class LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public:
. . .
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Od struktury do klasy
Definicje metod i przeciążeń operatorów Reprezentacja w języku UML
Metody i funkcje rozwijane w linii Sekcje definicji klasy
Definicje struktur złożonych, zależności Konstruktor bezparametryczny
Równoważność definicjistructiclass
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . .
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
class LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public:
. . .
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Od struktury do klasy
Definicje metod i przeciążeń operatorów Reprezentacja w języku UML
Metody i funkcje rozwijane w linii Sekcje definicji klasy
Definicje struktur złożonych, zależności Konstruktor bezparametryczny
Reprezentacja graficzna
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
void Sprzezenie( ) { im =  im; }
LZespolona operator + (LZespolona Z2);
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
class LZespolona { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public:
float re;
float im;
void Sprzezenie( ) { im =  im; }
LZespolona operator + (LZespolona Z2);
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Od struktury do klasy
Definicje metod i przeciążeń operatorów Reprezentacja w języku UML
Metody i funkcje rozwijane w linii Sekcje definicji klasy
Definicje struktur złożonych, zależności Konstruktor bezparametryczny
Reprezentacja graficzna
struct LZespolona { // . . . . . . . . . . . . . . . . . . . . . .
float re;
float im;
void Sprzezenie( ) { im =  im; }
LZespolona operator + (LZespolona Z2);
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
class LZespolona { // . . . . . . . . . . . . . . . . . . . . . . .
public:
float re;
float im;
void Sprzezenie( ) { im =  im; }
LZespolona operator + (LZespolona Z2);
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Od struktury do klasy
Definicje metod i przeciążeń operatorów Reprezentacja w języku UML
Metody i funkcje rozwijane w linii Sekcje definicji klasy
Definicje struktur złożonych, zależności Konstruktor bezparametryczny
Klasy złożone
class Prostokat { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public :
float x Rog GornyLewy;
float y Rog GornyLewy;
float x Rog DolnyPrawy;
float y Rog DolnyPrawy;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Od struktury do klasy
Definicje metod i przeciążeń operatorów Reprezentacja w języku UML
Metody i funkcje rozwijane w linii Sekcje definicji klasy
Definicje struktur złożonych, zależności Konstruktor bezparametryczny
Klasy złożone
class Wektor { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public :
float x;
float y;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
class Prostokat { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public :
float x Rog GornyLewy;
float y Rog GornyLewy;
float x Rog DolnyPrawy;
float y Rog DolnyPrawy;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Od struktury do klasy
Definicje metod i przeciążeń operatorów Reprezentacja w języku UML
Metody i funkcje rozwijane w linii Sekcje definicji klasy
Definicje struktur złożonych, zależności Konstruktor bezparametryczny
Klasy złożone
class Wektor { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public :
float x;
float y;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
class Prostokat { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public :
float x Rog GornyLewy;
float y Rog GornyLewy;
float x Rog DolnyPrawy;
float y Rog DolnyPrawy;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Od struktury do klasy
Definicje metod i przeciążeń operatorów Reprezentacja w języku UML
Metody i funkcje rozwijane w linii Sekcje definicji klasy
Definicje struktur złożonych, zależności Konstruktor bezparametryczny
Klasy złożone
class Wektor { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public :
float x;
float y;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
class Prostokat { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public :
float x Rog GornyLewy;
float y Rog GornyLewy;
float x Rog DolnyPrawy;
float y Rog DolnyPrawy;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Od struktury do klasy
Definicje metod i przeciążeń operatorów Reprezentacja w języku UML
Metody i funkcje rozwijane w linii Sekcje definicji klasy
Definicje struktur złożonych, zależności Konstruktor bezparametryczny
Klasy złożone
class Wektor { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public :
float x;
float y;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
class Prostokat { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
public :
Wektor Rog GornyLewy;
Wektor Rog DolnyPrawy;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Od struktury do klasy
Definicje metod i przeciążeń operatorów Reprezentacja w języku UML
Metody i funkcje rozwijane w linii Sekcje definicji klasy
Definicje struktur złożonych, zależności Konstruktor bezparametryczny
Klasy złożone
class Wektor { // . . . . . . . . . . . . . . .
public :
float x;
float y;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
class Prostokat { // . . . . . . . . . . . . .
public :
Wektor Rog GornyLewy;
Wektor Rog DolnyPrawy;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Od struktury do klasy
Definicje metod i przeciążeń operatorów Reprezentacja w języku UML
Metody i funkcje rozwijane w linii Sekcje definicji klasy
Definicje struktur złożonych, zależności Konstruktor bezparametryczny
Dostęp do komponentów klasy
struct Kalkulator { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float Mnoz(float Arg1, float Arg2) { return Wynik = Arg1 " Arg2; }
float Wynik;
float Pamiec;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
Kalkulator Kalk;
Kalk.Mnoz( 7, 9 );
. . .
. . .
. . .
cout<}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Od struktury do klasy
Definicje metod i przeciążeń operatorów Reprezentacja w języku UML
Metody i funkcje rozwijane w linii Sekcje definicji klasy
Definicje struktur złożonych, zależności Konstruktor bezparametryczny
Dostęp do komponentów klasy
struct Kalkulator { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float Mnoz(float Arg1, float Arg2) { return Wynik = Arg1 " Arg2; }
float Wynik;
float Pamiec;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
Kalkulator Kalk;
Kalk.Mnoz( 7, 9 );
. . .
. . .
. . .
cout<}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Od struktury do klasy
Definicje metod i przeciążeń operatorów Reprezentacja w języku UML
Metody i funkcje rozwijane w linii Sekcje definicji klasy
Definicje struktur złożonych, zależności Konstruktor bezparametryczny
Dostęp do komponentów klasy
struct Kalkulator { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float Mnoz(float Arg1, float Arg2) { return Wynik = Arg1 " Arg2; }
float Wynik;
float Pamiec;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
Kalkulator Kalk;
Kalk.Mnoz( 7, 9 );
. . .
. . .
. . .
cout<}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Od struktury do klasy
Definicje metod i przeciążeń operatorów Reprezentacja w języku UML
Metody i funkcje rozwijane w linii Sekcje definicji klasy
Definicje struktur złożonych, zależności Konstruktor bezparametryczny
Dostęp do komponentów klasy
struct Kalkulator { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float Mnoz(float Arg1, float Arg2) { return Wynik = Arg1 " Arg2; }
float Wynik;
float Pamiec;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
Kalkulator Kalk;
Jeżeli nie zostanie wywołana więcej razy
Kalk.Mnoz( 7, 9 );
metodaMnoz, to jaka zawartość pola
. . .
Wynikzostanie wyświetlona za pomocą
. . .
ostatniej instrukcji?
. . .
cout<}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Od struktury do klasy
Definicje metod i przeciążeń operatorów Reprezentacja w języku UML
Metody i funkcje rozwijane w linii Sekcje definicji klasy
Definicje struktur złożonych, zależności Konstruktor bezparametryczny
Dostęp do komponentów klasy
struct Kalkulator { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float Mnoz(float Arg1, float Arg2) { return Wynik = Arg1 " Arg2; }
float Wynik;
float Pamiec;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
Kalkulator Kalk;
Tego nikt nie wie ... :(
Kalk.Mnoz( 7, 9 );
. . .
. . .
. . .
cout<}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Od struktury do klasy
Definicje metod i przeciążeń operatorów Reprezentacja w języku UML
Metody i funkcje rozwijane w linii Sekcje definicji klasy
Definicje struktur złożonych, zależności Konstruktor bezparametryczny
Dostęp do komponentów klasy
struct Kalkulator { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float Mnoz(float Arg1, float Arg2) { return Wynik = Arg1 " Arg2; }
float Wynik;
float Pamiec;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
Kalkulator Kalk;
Do pola Wynikmożna dostać się w
Kalk.Mnoz( 7, 9 );
dowolnym miejscu programu i zmienić
. . .
jego zawartość niezależnie od wywołania
Kalk. Wynik = 5;
metodyMnoz.
. . .
cout<}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Od struktury do klasy
Definicje metod i przeciążeń operatorów Reprezentacja w języku UML
Metody i funkcje rozwijane w linii Sekcje definicji klasy
Definicje struktur złożonych, zależności Konstruktor bezparametryczny
Dostęp do komponentów klasy
struct Kalkulator { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float Mnoz(float Arg1, float Arg2) { return Wynik = Arg1 " Arg2; }
private:
float Wynik;
float Pamiec;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
Kalkulator Kalk;
A czy teraz coÅ› siÄ™ zmieni?
Kalk.Mnoz( 7, 9 );
. . .
Kalk. Wynik = 5;
. . .
cout<}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Od struktury do klasy
Definicje metod i przeciążeń operatorów Reprezentacja w języku UML
Metody i funkcje rozwijane w linii Sekcje definicji klasy
Definicje struktur złożonych, zależności Konstruktor bezparametryczny
Dostęp do komponentów klasy
struct Kalkulator { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float Mnoz(float Arg1, float Arg2) { return Wynik = Arg1 " Arg2; }
private:
float Wynik;
float Pamiec;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
Kalkulator Kalk;
TAK !!! Dostęp do pola Wynikpoza
Kalk.Mnoz( 7, 9 );
metodami klasyKalkulatornie będzie
. .
. możliwy.












Kalk.
Wynik
= 5;







. . .






Wynik





cout<< <Kalk.






}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Od struktury do klasy
Definicje metod i przeciążeń operatorów Reprezentacja w języku UML
Metody i funkcje rozwijane w linii Sekcje definicji klasy
Definicje struktur złożonych, zależności Konstruktor bezparametryczny
Dostęp do komponentów klasy
struct Kalkulator { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float Mnoz(float Arg1, float Arg2) { return Wynik = Arg1 " Arg2; }
private:
float Wynik;
float Pamiec;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
Kalkulator Kalk;
Jak w takim razie odczytać wartość pola
Kalk.Mnoz( 7, 9 );
Wynik?
. .
.












Kalk.
Wynik
= 5;







. . .






Wynik





cout<< <Kalk.






}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Od struktury do klasy
Definicje metod i przeciążeń operatorów Reprezentacja w języku UML
Metody i funkcje rozwijane w linii Sekcje definicji klasy
Definicje struktur złożonych, zależności Konstruktor bezparametryczny
Dostęp do komponentów klasy
struct Kalkulator { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float Mnoz(float Arg1, float Arg2) { return Wynik = Arg1 " Arg2; }
float WezWynik( ) { return Wynik; }
private:
float Wynik;
float Pamiec;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
Kalkulator Kalk;
Można to zrobić tworząc metodę
Kalk.Mnoz( 7, 9 );
udostępniającą wartość tego pola, która
. .
. będzie zdefiniowana w części publicznej.












Kalk.
Wynik
= 5;







. . .
cout<}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Od struktury do klasy
Definicje metod i przeciążeń operatorów Reprezentacja w języku UML
Metody i funkcje rozwijane w linii Sekcje definicji klasy
Definicje struktur złożonych, zależności Konstruktor bezparametryczny
Dostęp do komponentów klasy
struct Kalkulator { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float Mnoz(float Arg1, float Arg2) { return Wynik = Arg1 " Arg2; }
float WezWynik( ) { return Wynik; }
private:
float Wynik;
float Pamiec;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
Kalkulator Kalk;
Jeżeli nie zostanie wywołana więcej razy
Kalk.Mnoz( 7, 9 );
metodaMnoz, to jaka zawartość pola
. . .
Wynikzostanie wyświetlona za pomocą
. . .
ostatniej instrukcji?
. . .
cout<}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Od struktury do klasy
Definicje metod i przeciążeń operatorów Reprezentacja w języku UML
Metody i funkcje rozwijane w linii Sekcje definicji klasy
Definicje struktur złożonych, zależności Konstruktor bezparametryczny
Inicjalizacja komponentów
struct Kalkulator { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float Mnoz(float Arg1, float Arg2) { return Wynik = Arg1 " Arg2; }
float WezWynik( ) { return Wynik; }
private:
float Wynik;
float Pamiec;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
Kalkulator Kalk;
Jak jednak zainicjalizować pole Wynik?
Kalk.Mnoz( 7, 9 );
. . .
. . .
. . .
cout<}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Od struktury do klasy
Definicje metod i przeciążeń operatorów Reprezentacja w języku UML
Metody i funkcje rozwijane w linii Sekcje definicji klasy
Definicje struktur złożonych, zależności Konstruktor bezparametryczny
Inicjalizacja komponentów
struct Kalkulator { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Kalkulator( ){ Wynik = Pamiec = 0; }
float Mnoz(float Arg1, float Arg2) { return Wynik = Arg1 " Arg2; }
float WezWynik( ) { return Wynik; }
private:
float Wynik;
float Pamiec;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
Kalkulator Kalk;
Do tego celu możemy wykorzystać
Kalk.Mnoz( 7, 9 );
specjalny rodzaj metody zwanej
. . .
konstruktorem.
. . .
. . .
cout<}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Od struktury do klasy
Definicje metod i przeciążeń operatorów Reprezentacja w języku UML
Metody i funkcje rozwijane w linii Sekcje definicji klasy
Definicje struktur złożonych, zależności Konstruktor bezparametryczny
Inicjalizacja komponentów
struct Kalkulator { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Kalkulator( ){ Wynik = Pamiec = 0; }
float Mnoz(float Arg1, float Arg2) { return Wynik = Arg1 " Arg2; }
float WezWynik( ) { return Wynik; }
private:
float Wynik;
float Pamiec;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
Kalkulator Kalk;
Konstruktor jest wywoływany niejawnie
Kalk.Mnoz( 7, 9 );
w momencie utworzenia obiektu.
. . .
. . .
. . .
cout<}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Od struktury do klasy
Definicje metod i przeciążeń operatorów Reprezentacja w języku UML
Metody i funkcje rozwijane w linii Sekcje definicji klasy
Definicje struktur złożonych, zależności Konstruktor bezparametryczny
Inicjalizacja komponentów
struct Kalkulator { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Kalkulator( ){ Wynik = Pamiec = 0; }
float Mnoz(float Arg1, float Arg2) { return Wynik = Arg1 " Arg2; }
float WezWynik( ) { return Wynik; }
private:
float Wynik;
float Pamiec;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
Kalkulator Kalk( );
Konstruktor można wywołać w sposób
Kalk.Mnoz( 7, 9 );
jawny.
. . .
. . .
. . .
cout<}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym Od struktury do klasy
Definicje metod i przeciążeń operatorów Reprezentacja w języku UML
Metody i funkcje rozwijane w linii Sekcje definicji klasy
Definicje struktur złożonych, zależności Konstruktor bezparametryczny
Inicjalizacja komponentów
struct Kalkulator { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
float Mnoz(float Arg1, float Arg2) { return Wynik = Arg1 " Arg2; }
float WezWynik( ) { return Wynik; }
private:
float Wynik;
float Pamiec;
}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
int main( )
{
Kalkulator Kalk( );
A czy tak będzie dobrze?
Kalk.Mnoz( 7, 9 );
. . .
. . .
. . .
cout<}
Programowanie obiektowe Od struktury i funkcji do klasy i metody
Zapis operacji na strumieniu standardowym
Definicje metod i przeciążeń operatorów
Metody i funkcje rozwijane w linii
Definicje struktur złożonych, zależności
To już koniec :(.
Programowanie obiektowe Od struktury i funkcji do klasy i metody


Wyszukiwarka

Podobne podstrony:
02 Specjalne metody elektrostatyki
07 02 2016 Metody obliczeniowe
Bezpieczeństwo Ataki typu DoS Anatomia zagrożenia i metody obrony 02 2005
02 Metody dystansowe
Pszczoły innowacyjne metody Lipsko 27 02 2011
2008 Metody obliczeniowe 02 D 2008 10 1 21 28 5
17 02 Metodyka oceny ryzyka
Margit Sandemo Cykl Saga o czarnoksiężniku (02) Blask twoich oczu
t informatyk12[01] 02 101
introligators4[02] z2 01 n
02 martenzytyczne1

więcej podobnych podstron