02 klasy metody

background image

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 c

°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

background image

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-
temu składu
L

A

TEX oraz stylu beamer, którego autorem

jest Till Tantau.

Strona domowa projektu Beamer:

http://latex-beamer.sourceforge.net

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

background image

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

Podstawowe operacje

Formatowanie strumieni standardowych - porównanie C i C++
Wejście standardowe i strumień wejściowy
Strumienie standardowe, przeciążanie operacji na strumieniach

Wyświetlenie prostego komunikatu

Język C

Język C++

#include

<

stdio.h

>

int main( )

{

printf(”Hejka!!!\n”);

return

0;

}

#include

<

iostream

>

int main( )
{

std::cout

<<

”Hejka!!!”

<<

std::endl;

}

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

background image

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

Podstawowe operacje

Formatowanie strumieni standardowych - porównanie C i C++
Wejście standardowe i strumień wejściowy
Strumienie standardowe, przeciążanie operacji na strumieniach

Wyświetlenie prostego komunikatu

Język C

Język C++

#include

<

stdio.h

>

int main( )

{

printf(”Hejka!!!\n”);

return

0;

}

#include

<

iostream

>

using namespace std;

int main( )
{

std::cout

<<

”Hejka!!!”

<<

std::endl;

}

Użycie dyrektyw using namespace pozwala pominąć przedrostek
przestrzeni nazw std

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Podstawowe operacje

Formatowanie strumieni standardowych - porównanie C i C++
Wejście standardowe i strumień wejściowy
Strumienie standardowe, przeciążanie operacji na strumieniach

Wyświetlenie prostego komunikatu

Język C

Język C++

#include

<

stdio.h

>

int main( )

{

printf(”%6s”, ”Hejka!!!\n”);

return

0;

}

#include

<

iostream

>

using namespace std;

int main( )
{

std::cout

<<

”Hejka!!!”

<<

std::endl;

}

Język C umożliwia formatowanie wyświetlanych danych poprzez
zastosowanie sekwencji formatujących.

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Podstawowe operacje

Formatowanie strumieni standardowych - porównanie C i C++
Wejście standardowe i strumień wejściowy
Strumienie standardowe, przeciążanie operacji na strumieniach

Wyświetlenie prostego komunikatu

Język C

Język C++

#include

<

stdio.h

>

int main( )

{

printf(

”%6s”

, ”Hejka!!!\n”);

return

0;

}

#include

<

iostream

>

#include

<

iomanip

>

using namespace std;

int main( )
{

cout

<<

setw(6)

<<

”Hejka!!!”

<<

endl;

}

W języku C++ do formatowania wykorzystujemy manipulatory. Ich użycie
wymaga wcześniejszego dołączenia pliku iomanip.

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Podstawowe operacje

Formatowanie strumieni standardowych - porównanie C i C++

Wejście standardowe i strumień wejściowy
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

background image

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

Podstawowe operacje

Formatowanie strumieni standardowych - porównanie C i C++

Wejście standardowe i strumień wejściowy
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

background image

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

Podstawowe operacje

Formatowanie strumieni standardowych - porównanie C i C++

Wejście standardowe i strumień wejściowy
Strumienie standardowe, przeciążanie operacji na strumieniach

Przykład użycia poleceń

#include

<

iostream

>

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

background image

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

Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++

Wejście standardowe i strumień wejściowy

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

background image

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

Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++

Wejście standardowe i strumień wejściowy

Strumienie standardowe, przeciążanie operacji na strumieniach

Przykład użycia poleceń

#include

<

iostream

>

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

background image

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

Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++

Wejście standardowe i strumień wejściowy

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

background image

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

Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++

Wejście standardowe i strumień wejściowy

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

background image

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

Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++

Wejście standardowe i strumień wejściowy

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

background image

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

Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++

Wejście standardowe i strumień wejściowy

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

background image

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

Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++
Wejście standardowe i strumień wejściowy

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

FILEstdin

istream

cin

FILEstdout

ostream

cout

FILEstderr

ostream

cerr

ostream

clog

Deklaracje plików nagłówkowych dla operacji wejścia/wyjścia

#include <stdio.h>

#include <iostream>
#include <iomanip>
using namespace std;

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++
Wejście standardowe i strumień wejściowy

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

background image

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

Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++
Wejście standardowe i strumień wejściowy

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

background image

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

Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++
Wejście standardowe i strumień wejściowy

Strumienie standardowe, przeciążanie operacji na strumieniach

Lewostronna łączność operatora

cout << ”Napis”;

cout.operator << (”Napis”);

cout << ”Napis” << 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

background image

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

Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++
Wejście standardowe i strumień wejściowy

Strumienie standardowe, przeciążanie operacji na strumieniach

Lewostronna łączność operatora

cout << ”Napis”;

cout.operator << (”Napis”);

cout << ”Napis” << endl;

(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

background image

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

Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++
Wejście standardowe i strumień wejściowy

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

<<

Nazwa[x];

}

int main( )

{

Element x = a;

cout

<<

”Wartosc zmiennej x: ”;

Wyswietl( x );
cout

<<

endl;

}

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++
Wejście standardowe i strumień wejściowy

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

<<

Nazwa[x];

}

int main( )

{

Element x = a;

cout

<<

”Wartosc zmiennej x: ”;

Wyswietl( x );
cout

<<

endl;

}

Tworzenie specjalizowanej funkcji do
wyświetlania wartości zmiennej danego typu
jest podejściem właściwym dla języka C (gdyż
nie ma tam innej możliwości). Oczywistą wadą
takiego podejścia jest brak elastyczności.

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++
Wejście standardowe i strumień wejściowy

Strumienie standardowe, przeciążanie operacji na strumieniach

Przeciążenie operacji dla strumienia wyjściowego

enum

Element { a, b, c };

int main( )

{

Element

Zm = a;

cout

<<

”Wartosc zmiennej z: ”

<<

Zm

<<

endl;

}

ostream & operator

<<

( ostream & StrmWy, Element x )

{

StrmWy

<<

”abc”[x];

return StrmWy;

}

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++
Wejście standardowe i strumień wejściowy

Strumienie standardowe, przeciążanie operacji na strumieniach

Przeciążenie operacji dla strumienia wyjściowego

enum

Element { a, b, c };

int main( )

{

Element

Zm = a;

cout

<<

”Wartosc zmiennej z: ”

<<

Zm

<<

endl;

}

ostream & operator << ( ostream & StrmWy, Element x )

{

StrmWy << ”abc”[x];
return StrmWy;

}

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

background image

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

Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++
Wejście standardowe i strumień wejściowy

Strumienie standardowe, przeciążanie operacji na strumieniach

Przeciążenie operacji dla strumienia wyjściowego

enum

Element { a, b, c };

int main( )

{

Element

Zm = a;

cout

<<

”Wartosc zmiennej z: ”

<<

Zm

<<

endl;

}

ostream & operator << ( ostream & StrmWy, Element x )

{

return

StrmWy << ”abc”[x]

;

}

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

background image

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

Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++
Wejście standardowe i strumień wejściowy

Strumienie standardowe, przeciążanie operacji na strumieniach

Operacje wyświetlania dla dowolnego typu wyliczeniowego

enum

Stan { Uspienie, Czuwanie, Aktywny };

int main( )

{

Stan

Zm = Czuwanie;

cout

<<

”Wartosc zmiennej z: ”

<<

Zm

<<

endl;

}

ostream & operator << ( ostream & StrmWy, Stan x )

{

const char Nazwa[ ] = { ”Uspienie”, ”Czuwanie”, ”Aktywny” };
return

StrmWy << Nazwa[x];

}

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

background image

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

Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++
Wejście standardowe i strumień wejściowy

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

background image

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

Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++
Wejście standardowe i strumień wejściowy

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

;

}

istream & operator

>>

( istream & StrmWe, Element & WczytSym )

{

. . .

}

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++
Wejście standardowe i strumień wejściowy

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

;

}

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

}

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++
Wejście standardowe i strumień wejściowy

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

;

}

istream & operator

>>

( istream & StrmWe, Element & WczytSym )

{

Element TabSymboli[ ] = { a, b, c };
char

ZnakSymbolu;

}

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++
Wejście standardowe i strumień wejściowy

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

;

}

istream & operator

>>

( istream & StrmWe, Element & WczytSym )

{

Element TabSymboli[ ] = { a, b, c };
char

ZnakSymbolu;

StrmWe

>>

ZnakSymbolu;

}

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++
Wejście standardowe i strumień wejściowy

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

;

}

istream & operator

>>

( istream & StrmWe, Element & WczytSym )

{

Element TabSymboli[ ] = { a, b, c };
char

ZnakSymbolu;

StrmWe

>>

ZnakSymbolu;

if (!strchr(“abc”,ZnakSymbolu)) { . . .; exit(1); }

}

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++
Wejście standardowe i strumień wejściowy

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

;

}

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’];

}

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++
Wejście standardowe i strumień wejściowy

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

;

}

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;

}

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++
Wejście standardowe i strumień wejściowy

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;

}

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:

a+c

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++
Wejście standardowe i strumień wejściowy

Strumienie standardowe, przeciążanie operacji na strumieniach

Przeciążenie operacji dla strumienia wejściowego

enum

Element { a, b, c };

int main( )

{

Element

Arg1, Oper, Arg2;

char

Oper;

cin

>>

Arg1

>>

Oper

>>

Arg2

;

}

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.

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++
Wejście standardowe i strumień wejściowy

Strumienie standardowe, przeciążanie operacji na strumieniach

Przeciążenie operacji dla strumienia wejściowego

enum

Element { a, b, c };

int main( )

{

Element

Arg1, Oper, Arg2;

char

Oper;

cin

>>

Arg1

>>

Oper

>>

Arg2;

}

istream & operator

>>

( istream & StrmWe, Element & WczytSym )

{

Element TabSymboli[ ] = { a, b, c };
char

ZnakSymbolu;

. . .

}

A jak przeczytać napis:

”a+c”

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++
Wejście standardowe i strumień wejściowy

Strumienie standardowe, przeciążanie operacji na strumieniach

Przeciążenie operacji dla strumienia wejściowego

enum

Element { a, b, c };

int main( )

{

Element

Arg1, Oper, Arg2;

char

Oper;

istringstream

StrmNap;

StrmNap.str(”a+b”);
StrmNap

>>

Arg1

>>

Oper

>>

Arg2

;

}

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.

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Podstawowe operacje
Formatowanie strumieni standardowych - porównanie C i C++
Wejście standardowe i strumień wejściowy

Strumienie standardowe, przeciążanie operacji na strumieniach

Przeciążenie operacji dla strumienia wejściowego

enum

Element { a, b, c };

int main( )

{

Element

Arg1, Oper, Arg2;

char

Oper;

istringstream

StrmNap;

StrmNap.str(”a+b”);
StrmNap

>>

Arg1

>>

Oper

>>

Arg2

;

}

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łówkowy sstream, tzn.

#include<sstream>

W nim znajduje się definicja klasy istringstream.

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Metody klasy

Przeciążanie operatorów
Przeciążąnie operatorów w klasie i na zewnątrz niej

Od funkcji do metody

Jeszcze funkcja

Już metoda

struct LZespolona {

float re;
float im;

};

void sprzezenie( LZespolona wLZesp )

{

wLZesp–

>

im = – wLZesp–

>

im;

}

int main( )

{

LZespolona

LZesp;

LZesp.re = 5;

LZesp.im = -6;

sprzezenie(&LZesp);

}

struct LZespolona {

float re;
float im;

void Sprzezenie( );

};

void LZespolona::Sprzezenie( )

{

im = – im;

}

int main( )

{

LZespolona

LZesp;

LZesp.re = 5;

LZesp.im = -6;

LZesp.Sprzezenie( );

}

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Metody klasy

Przeciążanie operatorów
Przeciążąnie operatorów w klasie i na zewnątrz niej

Model obiektu

Struktura i funkcja

Struktura i metoda

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Metody klasy

Przeciążanie operatorów
Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów
Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów
Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów
Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów
Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów
Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów
Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów
Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów
Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów
Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów
Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów
Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów
Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów
Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów
Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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( )

{

LZespolona

lz1, lz2, lz3;

lz3 = lz1 + lz2;

}

A czy tak będzie dobrze?

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Metody klasy

Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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( )

{

LZespolona

lz1, lz2, lz3;

lz3 = lz1 + lz2;

}

Nie jest to poprawna implementacja, gdyż
przy okazji obliczenia sumy zmieniana jest
zawartość obiektu i jest ona widoczna “na
zewnątrz”.

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Metody klasy

Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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 =

3 lz1

;

}

Czy ta operacja lz2 = 3 lz1
jest poprawna?

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Metody klasy

Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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( )

{

LZespolona

lz1, lz2, lz3;

lz3 =

3 lz1

;

}

Czy ta operacja lz3 = 3 lz1
jest poprawna?

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Metody klasy

Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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( )

{

LZespolona

lz1, lz2, lz3;

lz3 =

operator ( 3, lz1 )

;

}

Czy ta operacja lz3 = 3 lz1
jest poprawna?

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Metody klasy

Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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( )

{

LZespolona

lz1, lz2, lz3;

lz3 =

operator ( 3, lz1 )

;

}

Operacja nie jest poprawna, gdyż
brak jest zgodności typów
poszczególnych argumentów.

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Metody klasy

Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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 5

;

}

A czy teraz wszystko będzie dobrze?

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Metody klasy

Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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 5

;

}

Aby wszystko było dobrze należy zapewnić
przemienność operacji mnożenia.

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Metody klasy

Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy

Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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;

lz3 =

3 lz1 5

;

}

Teraz jest już dobrze.

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Metody klasy

Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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;

lz3 =

3 lz1 5

;

}

Teraz jest również dobrze.

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Metody klasy
Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy
Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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::istream itd.

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

background image

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

Metody klasy
Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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::istream itd.

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

background image

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

Metody klasy
Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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::istream itd.

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

background image

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

Metody klasy
Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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::istream itd.

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

background image

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

Metody klasy
Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy
Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody klasy
Przeciążanie operatorów

Przeciążąnie operatorów w klasie i na zewnątrz niej

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

background image

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

Metody rozwijane w linii

Funkcje rozwijane w linii
Podsumowanie

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

background image

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

Metody rozwijane w linii

Funkcje rozwijane w linii
Podsumowanie

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

background image

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

Metody rozwijane w linii

Funkcje rozwijane w linii
Podsumowanie

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

background image

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

Metody rozwijane w linii

Funkcje rozwijane w linii
Podsumowanie

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

background image

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

Metody rozwijane w linii

Funkcje rozwijane w linii
Podsumowanie

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

background image

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

Metody rozwijane w linii

Funkcje rozwijane w linii
Podsumowanie

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

background image

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

Metody rozwijane w linii

Funkcje rozwijane w linii
Podsumowanie

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

background image

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

Metody rozwijane w linii

Funkcje rozwijane w linii
Podsumowanie

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

background image

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

Metody rozwijane w linii

Funkcje rozwijane w linii
Podsumowanie

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

background image

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

Metody rozwijane w linii

Funkcje rozwijane w linii
Podsumowanie

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

background image

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

Metody rozwijane w linii

Funkcje rozwijane w linii
Podsumowanie

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( );

}

W ciele definicji klasy kolejność deklaracji
pól i definicji metod nie ma znaczenia.

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Metody rozwijane w linii

Funkcje rozwijane w linii
Podsumowanie

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

background image

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

Metody rozwijane w linii

Funkcje rozwijane w linii
Podsumowanie

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( );

}

Kod metody definiowanej w ciele klasy
domyślnie rozwijany jest przez kompilator w
miejscu wywołania metody.

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Metody rozwijane w linii

Funkcje rozwijane w linii
Podsumowanie

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( );

}

Domyślne zachowanie kompilatora może
zostać jednak zmienione poprzez użycie
odpowiednich opcji, np. dla g++ jest to
-fno-default-inline.

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Metody rozwijane w linii

Funkcje rozwijane w linii
Podsumowanie

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( )

{

LZespolona

lz1;

lz1.Sprzezenie( );

}

Chcąc uniezależnić się od ustawień
kompilatora można użyć słowa kluczowe
inline.

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Metody rozwijane w linii

Funkcje rozwijane w linii
Podsumowanie

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( )

{

LZespolona

lz1;

lz1.Sprzezenie( );

}

Użycie inline nie gwarantuje rozwinięcia
kodu. Jest ono traktowane jedynie jako
zalecenie. Kompilator sam podejmuje
decyzję, czy kod można rozwinąć.

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Metody rozwijane w linii

Funkcje rozwijane w linii
Podsumowanie

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( )

{

LZespolona

lz1;

lz1.Sprzezenie( );

}

Metody typu inline mogą być definiowane
również poza ciałem klasy. Jednak wtedy
koniecznie należy użyć modyfikatora
inline.

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Metody rozwijane w linii

Funkcje rozwijane w linii

Podsumowanie

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

background image

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

Metody rozwijane w linii

Funkcje rozwijane w linii

Podsumowanie

Funkcje typu inline

inline double Poteguj( double Wykladnik, unsigned int Potega )
{

return Potega == 0 ? 1 : WykladnikPoteguj(Wykladnik,Potega – 1);

}

int main( )

{

double Wynik =

Poteguj(4,3)

;

cout

<<

Wynik

<<

endl;

}

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Metody rozwijane w linii

Funkcje rozwijane w linii

Podsumowanie

Funkcje typu inline

inline double Poteguj( double Wykladnik, unsigned int Potega )
{

return Potega == 0 ? 1 : WykladnikPoteguj(Wykladnik,Potega – 1);

}

int main( )

{

double Wynik =

Poteguj(4,3)

;

cout

<<

Wynik

<<

endl;

}

Sposób rozwinięcia kodu zależy od inteligencji kompilatora. Dla
przedstawionego wywołania może ono mieć postać 4Poteguj(4,2),
albo też może ono sprowadzić się do zapisu 64.

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Metody rozwijane w linii

Funkcje rozwijane w linii

Podsumowanie

Funkcje typu inline

inline double Poteguj( double Wykladnik, unsigned int Potega )
{

return Potega == 0 ? 1 : WykladnikPoteguj(Wykladnik,Potega – 1);

}

int main( )

{

double Wynik =

Poteguj(4,3)

;

cout

<<

Wynik

<<

endl;

}

modul.cpp

program.cpp

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Metody rozwijane w linii

Funkcje rozwijane w linii

Podsumowanie

Funkcje typu inline

inline double Poteguj( double Wykladnik, unsigned int Potega )
{

return Potega == 0 ? 1 : WykladnikPoteguj(Wykladnik,Potega – 1);

}

int main( )

{

double Wynik =

Poteguj(4,3)

;

cout

<<

Wynik

<<

endl;

}

modul.cpp

program.cpp

inline double Poteguj( double Wykladnik, unsigned int Potega );

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Metody rozwijane w linii

Funkcje rozwijane w linii

Podsumowanie

Funkcje typu inline

inline double Poteguj( double Wykladnik, unsigned int Potega )
{

return Potega == 0 ? 1 : WykladnikPoteguj(Wykladnik,Potega – 1);

}

int main( )

{

double Wynik =

Poteguj(4,3)

;

cout

<<

Wynik

<<

endl;

}

modul.cpp

program.cpp

inline double Poteguj( double Wykladnik, unsigned int Potega );

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

background image

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

Metody rozwijane w linii

Funkcje rozwijane w linii

Podsumowanie

Funkcje typu inline

inline double Poteguj( double Wykladnik, unsigned int Potega )
{

return Potega == 0 ? 1 : WykladnikPoteguj(Wykladnik,Potega – 1);

}

int main( )

{

double Wynik =

Poteguj(4,3)

;

cout

<<

Wynik

<<

endl;

}

modul.cpp

program.cpp

inline double Poteguj( double Wykladnik, unsigned int Potega );

Konsolidacja tego kodu zakończy się niepowodzeniem. Linker zgłosi brak kodu
funkcji Poteguj.

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Metody rozwijane w linii

Funkcje rozwijane w linii

Podsumowanie

Funkcje typu inline

inline double Poteguj( double Wykladnik, unsigned int Potega )
{

return Potega == 0 ? 1 : WykladnikPoteguj(Wykladnik,Potega – 1);

}

int main( )

{

double Wynik =

Poteguj(4,3)

;

cout

<<

Wynik

<<

endl;

}

modul.hh

program.cpp

#include ”modul.hh”

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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

Metody rozwijane w linii

Funkcje rozwijane w linii

Podsumowanie

Funkcje typu inline

inline double Poteguj( double Wykladnik, unsigned int Potega )
{

return Potega == 0 ? 1 : WykladnikPoteguj(Wykladnik,Potega – 1);

}

int main( )

{

double Wynik =

Poteguj(4,3)

;

cout

<<

Wynik

<<

endl;

}

modul.hh

program.cpp

#include ”modul.hh”

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

background image

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

Metody rozwijane w linii
Funkcje rozwijane w linii

Podsumowanie

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

background image

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

Metody rozwijane w linii
Funkcje rozwijane w linii

Podsumowanie

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

background image

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

Metody rozwijane w linii
Funkcje rozwijane w linii

Podsumowanie

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

background image

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

Metody rozwijane w linii
Funkcje rozwijane w linii

Podsumowanie

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

background image

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

Metody rozwijane w linii
Funkcje rozwijane w linii

Podsumowanie

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

background image

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

Metody rozwijane w linii
Funkcje rozwijane w linii

Podsumowanie

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

background image

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

Metody rozwijane w linii
Funkcje rozwijane w linii

Podsumowanie

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

background image

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 do klasy

Reprezentacja w języku UML
Sekcje definicji klasy
Konstruktor bezparametryczny

Równoważność definicji struct i class

struct LZespolona

{ // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

float re;
float im;

void Sprzezenie( ) { im = –im; }

LZespolona operator + (LZespolona Z2);

}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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 do klasy

Reprezentacja w języku UML
Sekcje definicji klasy
Konstruktor bezparametryczny

Równoważność definicji struct i class

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

background image

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 do klasy

Reprezentacja w języku UML
Sekcje definicji klasy
Konstruktor bezparametryczny

Równoważność definicji struct i class

struct LZespolona

{ // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . .

}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

class LZespolona

{ // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

public:

. . .

}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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 do klasy

Reprezentacja w języku UML
Sekcje definicji klasy
Konstruktor bezparametryczny

Równoważność definicji struct i class

struct LZespolona

{ // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . .

}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

class LZespolona

{ // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

public:

. . .

}; // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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 do klasy

Reprezentacja w języku UML

Sekcje definicji klasy
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

background image

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 do klasy

Reprezentacja w języku UML

Sekcje definicji klasy
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

background image

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 do klasy

Reprezentacja w języku UML

Sekcje definicji klasy
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

background image

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 do klasy

Reprezentacja w języku UML

Sekcje definicji klasy
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

background image

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 do klasy

Reprezentacja w języku UML

Sekcje definicji klasy
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

background image

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 do klasy

Reprezentacja w języku UML

Sekcje definicji klasy
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

background image

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 do klasy

Reprezentacja w języku UML

Sekcje definicji klasy
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

background image

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 do klasy

Reprezentacja w języku UML

Sekcje definicji klasy
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

background image

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 do klasy
Reprezentacja w języku UML

Sekcje definicji klasy

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

<<

Kalk. Wynik

<<

endl;

}

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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 do klasy
Reprezentacja w języku UML

Sekcje definicji klasy

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

<<

Kalk. Wynik

<<

endl;

}

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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 do klasy
Reprezentacja w języku UML

Sekcje definicji klasy

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

<<

Kalk. Wynik

<<

endl;

}

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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 do klasy
Reprezentacja w języku UML

Sekcje definicji klasy

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

<<

Kalk. Wynik

<<

endl;

}

Jeżeli nie zostanie wywołana więcej razy
metoda Mnoz, to jaka zawartość pola

Wynik zostanie wyświetlona za pomocą

ostatniej instrukcji?

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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 do klasy
Reprezentacja w języku UML

Sekcje definicji klasy

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

<<

Kalk. Wynik

<<

endl;

}

Tego nikt nie wie ... :(

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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 do klasy
Reprezentacja w języku UML

Sekcje definicji klasy

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 );
. . .

Kalk. Wynik = 5;

. . .
cout

<<

Kalk. Wynik

<<

endl;

}

Do pola Wynik można dostać się w
dowolnym miejscu programu i zmienić
jego zawartość niezależnie od wywołania
metody Mnoz.

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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 do klasy
Reprezentacja w języku UML

Sekcje definicji klasy

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;

Kalk.Mnoz( 7, 9 );
. . .
Kalk. Wynik = 5;
. . .
cout

<<

Kalk. Wynik

<<

endl;

}

A czy teraz coś się zmieni?

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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 do klasy
Reprezentacja w języku UML

Sekcje definicji klasy

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;

Kalk.Mnoz( 7, 9 );
. . .

Kalk. Wynik = 5;

hhh

hhh

hhh

hhh

hhh

hhh

hhh

hhh

hhh

hhh

hhh

hhh

((

((

((

((

(

((

((

((

((

(

((

((

((

((

(

((

((

((

((

(

. . .
cout

<<

Kalk. Wynik

<<

endl;

hhh

hhh

hhh

hhh

hhh

hhh

hhh

hhh

hhh

hhh

hhh

hhh

((

((

((

((

(

((

((

((

((

(

((

((

((

((

(

((

((

((

((

(

}

TAK !!! Dostęp do pola Wynik poza
metodami klasy Kalkulator nie będzie
możliwy.

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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 do klasy
Reprezentacja w języku UML

Sekcje definicji klasy

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;

Kalk.Mnoz( 7, 9 );
. . .

Kalk. Wynik = 5;

hhh

hhh

hhh

hhh

hhh

hhh

hhh

hhh

hhh

hhh

hhh

hhh

((

((

((

((

(

((

((

((

((

(

((

((

((

((

(

((

((

((

((

(

. . .
cout

<<

Kalk. Wynik

<<

endl;

hhh

hhh

hhh

hhh

hhh

hhh

hhh

hhh

hhh

hhh

hhh

hhh

((

((

((

((

(

((

((

((

((

(

((

((

((

((

(

((

((

((

((

(

}

Jak w takim razie odczytać wartość pola

Wynik?

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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 do klasy
Reprezentacja w języku UML

Sekcje definicji klasy

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;

Kalk.Mnoz( 7, 9 );
. . .

Kalk. Wynik = 5;

hhh

hhh

hhh

hhh

hhh

hhh

hhh

hhh

hhh

hhh

hhh

hhh

((

((

((

((

(

((

((

((

((

(

((

((

((

((

(

((

((

((

((

(

. . .
cout

<<

Kalk.WezWynik( )

<<

endl;

}

Można to zrobić tworząc metodę
udostępniającą wartość tego pola, która
będzie zdefiniowana w części publicznej.

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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 do klasy
Reprezentacja w języku UML

Sekcje definicji klasy

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;

Kalk.Mnoz( 7, 9 );

. . .
. . .
. . .
cout

<<

Kalk.WezWynik( )

<<

endl;

}

Jeżeli nie zostanie wywołana więcej razy
metoda Mnoz, to jaka zawartość pola

Wynik zostanie wyświetlona za pomocą

ostatniej instrukcji?

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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 do klasy
Reprezentacja w języku UML
Sekcje definicji klasy

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;

Kalk.Mnoz( 7, 9 );
. . .
. . .
. . .
cout

<<

Kalk.WezWynik( )

<<

endl;

}

Jak jednak zainicjalizować pole Wynik?

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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 do klasy
Reprezentacja w języku UML
Sekcje definicji klasy

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;

Kalk.Mnoz( 7, 9 );
. . .
. . .
. . .
cout

<<

Kalk.WezWynik( )

<<

endl;

}

Do tego celu możemy wykorzystać
specjalny rodzaj metody zwanej
konstruktorem.

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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 do klasy
Reprezentacja w języku UML
Sekcje definicji klasy

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;

Kalk.Mnoz( 7, 9 );
. . .
. . .
. . .
cout

<<

Kalk.WezWynik( )

<<

endl;

}

Konstruktor jest wywoływany niejawnie
w momencie utworzenia obiektu.

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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 do klasy
Reprezentacja w języku UML
Sekcje definicji klasy

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( );

Kalk.Mnoz( 7, 9 );
. . .
. . .
. . .
cout

<<

Kalk.WezWynik( )

<<

endl;

}

Konstruktor można wywołać w sposób
jawny.

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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 do klasy
Reprezentacja w języku UML
Sekcje definicji klasy

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( );

Kalk.Mnoz( 7, 9 );
. . .
. . .
. . .
cout

<<

Kalk.WezWynik( )

<<

endl;

}

A czy tak będzie dobrze?

Programowanie obiektowe

Od struktury i funkcji do klasy i metody

background image

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


Document Outline


Wyszukiwarka

Podobne podstrony:
02 Wybrane metody numeryczne (aproksymacja funkcji, rozwiazy
07 02 2016 Metody obliczeniowe
02 Termin 2 Metody 2012, Uczelnia, Różne, UCZELNIA OD KOCHANEJ MONIKI, semestr 5
02 SESJA metody, Stary podrecznik klubu pracy
02 Specjalne metody elektrostatyki
02 www Metody i techniki
1Wykład 1b 25 02 2014 METODY TECHNICZNEGO NORMOWANIA PRACYid 19226 pptx
piasecki,podstawy programowania, Klasy i metody abstrakcyjne, interfejsy
02 Metody syntezy organicznej VI s1id 3675
egzamin z metodyki 3 02 2009r 4rok
02 Metody dystansowe
1b Metody klasy TCanvas, Instrukcja 1b Metody klasy TCanvas, Instrukcja 1
17 02 Metodyka oceny ryzykaid 17384
02 metody pomiaru zdrowia
Edukacja techniczna z metodyką 22.02.12r, Pedagogika, Studia, PWiPP

więcej podobnych podstron