Wyklad progr obiekt cz I a


Programowanie obiektowe
Cz. Ia
4 III 2015
Programowanie  formalności...

Podstawy

Struktura programu w C++

Typy, zmienne

Funkcje

Struktury
4 III 2015
Podstawy
Programowanie:
Zapis kolejnych instrukcji do wykonania przez komputer.
Kod składa się z
- danych
- funkcji (operacji)
4 III 2015
Podstawy
Przykładowo:
For (int a:=0; a<10; a++)
{
if (a<5) {
cout << "Mniejsze niż 5\n";
}
else {
cout << "Większe niż 5\n";
}
}
4 III 2015
Podstawy
W programowaniu wykorzystuje się:
- zmienne (np. int x=10;)
- funkcje (np. void oblicz_pole(int wymiar);)
- struktury (np. struct dane { char * imię; }; )
- obiekty (np. class osoba { char * imię; };)
4 III 2015
Struktura programu w C++
#include
Preprocesor
#include
zadania wykonywane przed kompilacją
int main()
{
cout<< sqrt(2)<< endl;
Funkcja Main
return 0;
}
4 III 2015
Struktura programu w C++
#include
Preprocesor
#include
zadania wykonywane przed kompilacją
...
obszar na deklaracje i definicje
...
&
int main()
{
Funkcja Main
cout<< sqrt(2)<< endl;
return 0;
}
4 III 2015
Struktura programu w C++
#include
#include
...
...
Deklaracja:
&
- zmiennej int a;
int main()
{
cout<< sqrt(2)<< endl;
- funkcji
int funkcja(int x);
return 0;
}
4 III 2015
Struktura programu w C++
#include
COUT jest częścią
#include
standardowej biblioteki
iostream.
using namespace std;
Informujemy kompilator o
int main()
wykorzystywaniu
{
elementów z "pakietu" std.
cout<< sqrt(2)<< endl;
return 0;
}
4 III 2015
Struktura programu w C++
#include
#include
Gdy nie będzie tej linii using namespace std;
int main()
{
std::cout<< sqrt(2)<< endl;
to powinno być:
return 0;
}
4 III 2015
Struktura programu w C++
#include
#include
using namespace std;
Plik "moje_funkcje.h"
#include
int main()
{
double pierwiastek(double a)
cout << pierwiastek(2) << "\n";
{
double wynik;
return 0;
wynik= sqrt(a);
}
return wynik;
};
4 III 2015
Struktura programu w C++
#include
#include
Plik "klasa.h"
#include
class obiekt {
public:
obiekt();
using namespace std;
~obiekt();
double x;
int main()
double oblicz(double y);
{
};
obiekt liczba;
cout << pierwiastek(2) << "\n";
cout << liczba.oblicz(2) << "\n";
Plik "klasa.cpp"
return 0;
obiekt::obiekt()
}
{ }
obiekt::~obiekt()
{ }
double obiekt::oblicz(double y)
{
return y*y;
4 III 2015
}
Typy zmiennych - operatory
Operatory (c++) dzielimy na:

logiczne

przypisania

arytmetyczne

złożone przypisania

relacji (porównania)

inne
4 III 2015
Typy zmiennych - operatory
Operatory (c++) dzielimy na:

logiczne

przypisania
&& = i logiczne

arytmetyczne

złożone przypisania
|| = lub logiczne

relacji (porównania)

inne
! = nie logiczne
if ( (a==1) && (b==1) ) {
//...
}
if (!checked) {
//...
}
4 III 2015
Typy zmiennych - operatory
Operatory (c++) dzielimy na:

logiczne

przypisania
= znak równości (pojedynczy)

arytmetyczne

złożone przypisania

relacji (porównania)

inne
x=1;
a=c;
4 III 2015
Typy zmiennych - operatory
Operatory (c++) dzielimy na:

logiczne

przypisania
+ dodawanie

arytmetyczne
- odejmowanie

złożone przypisania
* mnożenie

relacji (porównania)
/ dzielenie

inne
% reszta z dzielenia
x=1+1;
a=c/2;
x=5 % 2; //x=1;
4 III 2015
Typy zmiennych - operatory
Operatory (c++) dzielimy na:

logiczne

przypisania
przypisania:

arytmetyczne
x+=a; // x=x+a;
+= dodawanie

złożone
x-=2; // x=x-2;
-= odejmowanie

relacji (porównania)
x/=a; // x=x/a;
/= mnożenie

y*=a+1; // y=y*(a+1)
inne
*= dzielenie
zwiększania:
++ dodawanie 1
x++; // x=x+1 lub x+=1;
- - odejmowanie 1
x--; // x=x-1;
x=1;
y=++x; //x=2; y=2;
x=1;
y=x++; //x=2; y=1;
4 III 2015
Typy zmiennych - operatory
Operatory (c++) dzielimy na:

logiczne

przypisania

arytmetyczne

złożone

relacji (porównania)

inne
if (a==b) { & }
== równe
!= nierówne
else if (a!=b) { & }
< mniejsze niż
> większe niż
if ( (x>2) && (x!=0) ) {...}
<= mniejsze lub równe
>= większe lub równe
4 III 2015
Typy zmiennych - operatory
Operatory (c++) dzielimy na:

logiczne

przypisania

arytmetyczne

złożone

relacji (porównania)

inne
int *x = new int;
new - rezerwowanie pamięci
delete x;
delete  zwalnianie pamięci
:: - operator zakresu
int liczby::oblicz(int x,int y)
{
std::cout << "x=" << x;
return x+y;
}
4 III 2015
Typy zmiennych - operatory
Operatory (c++) dzielimy na:
trójskładnikowy warunkowy ? :

logiczne

przypisania
warunek ? wynik1 : wynik2

arytmetyczne

złożone

relacji (porównania)

inne
true
false
4==5 ? 1 : 2 // 2, bo 4!=5
5>3 ? a : b // a, bo true
void main(){
int a,b,c;
a=2; b=7;
c= (a>b) ? a : b;
cout << c << "\n";
?
}
4 III 2015
Typy zmiennych - operatory
Operatory (c++) dzielimy na:

logiczne

przypisania

arytmetyczne

złożone

relacji (porównania)

inne
przecinek , rozdziela kolejność wyrażeń tam, gdzie oczekiwane jest jedno
a=(b=3,b++)
b=3
b=b+1
a=b
4 III 2015
Typy zmiennych
Typy predefiniowane:
char - typ znaku- 'a', 'b', '1', 'x' ...
int - typ liczb całkowitych- 1,2,2345, 1999
float - typ liczb rzeczywistych- 1.55, 0.666
double - typ liczb rzeczywistych- 3.1415926, 2.776
void - typ bez wartości -pusto
bool - typ logiczny (tylko false lub true, 0,1)
możliwe odmiany  ze znakiem, bez znaku, krótki, długi, np.:
unsigned int - typ bez znaku
signed int - typ ze znakiem
short int - typ krótki
long int - typ długi
4 III 2015
Typy zmiennych
Typy predefiniowane:
char - typ znaku 8 bitów (1 bajt)
int - typ liczb całkowitych 32 bity (4 bajty)
float - typ liczb rzeczywistych 32 bity (4 bajty)
double - typ liczb rzeczywistych 64 bity (8 bajtów)
void - typ bez wartości
4 bity = 2^4 = 2*2*2*2=16
8 bitów= 2^8 = 256
16 bitów= 2^16 = 65536
32 bity = 2^32 = 4 294 967 296
64 bity = 2^64 = 1.184467440737e+19
możliwe odmiany  ze znakiem, bez znaku, krótki, długi, np..
unsigned int - typ bez znaku
signed int - typ ze znakiem
4 III 2015
Typy zmiennych
Typy predefiniowane:
char - typ znaku 8 bitów (1 bajt)
int - typ liczb całkowitych 32 bity (4 bajty)
float - typ liczb rzeczywistych 32 bity (4 bajty)
double - typ liczb rzeczywistych 64 bity (8 bajtów)
void - typ bez wartości
double (8 bajtów) = -/+1.7e+/-308 (17x xxx xxx xxx xxx)
signed int (4bajty) = -2 147 483 648 do +2 147 483 647
unsigned int (4bajty) = 0 do 4 294 967 296
short int (2 bajty) = 0 do 65536
long int (4 bajty) = 0 do 4 294 967 296
lub
signed short int (2bajty) = -32768 do +32767
4 III 2015
Typy zmiennych
Typy predefiniowane:
sizeof(char) = 1 (1 bajt)
np.
short int rok;
signed short int temperatura;
double pi;
4 III 2015
Typy zmiennych
Typy własne
typedef typ nazwa;
Np. własny typ na lata i temperatury:
Np. własny typ na lata i temperatury:
typedef short unsigned int lata;
typedef short signed int temperatury;
Wykorzystanie w kodzie:
temperatury temp_1, temp_2, temp3;
temp_1 = -20;
temp_2 = 33;
temp_ = 32768; // ??
4 III 2015
Typy zmiennych
Typy własne  typ wyliczeniowy
enum typ_kolory { bialy, czarny, zielony };
{...}
typ_kolory kolor;
kolor=czarny;
//operator przeciążony <<
cout << "kolor = " << kolor;
kolor = 1
4 III 2015
Typy zmiennych
Typy własne  typ wyliczeniowy
enum typ_kolory { bialy, czarny, zielony };
{...}
typ_kolory kolor;
char *opiskolor[] ={"bialy", "czarny"};
//lub
string opiskolor[] ={"bialy", "czarny"};
kolor=czarny;
cout << "kolor = " << kolor << " to " << opiskolor[kolor];
kolor = 1 to czarny
4 III 2015
Typy zmiennych
Tablice
int tablica [3] = { 1, 2, 3 };
tablica[0] = 1;
tablica[1] = 2;
tablica[2] = 3;
int macierz[3][3] = {{1,2,3}, {4,5,6}, {7,8,9}};
cout << macierz[0][0] << " " << macierz[1][0] <<" "<< macierz[2][0] << endl;
cout << macierz[0][1] << " " << macierz[1][1] <<" "<< macierz[2][1] << endl;
cout << macierz[0][2] << " " << macierz[1][2] <<" "<< macierz[2][2] << endl;
1 4 7
2 5 8
3 6 9
4 III 2015
Typy zmiennych
Tablice tekstowe
char znaki[3] = { 'a', 'b', 'c' };
znaki[0] = 'x';
const char *znaki;
znaki="abcdef";
string tekst;
tekst="abcdef";
tekst=znaki;
4 III 2015
Typy zmiennych
Wskazniki  zmienne wskaznikowe * oraz &
int *wsk;
int x=10;
// adres do x wynosi: &x
wsk = &x;
cout << wsk;
cout << &x;
0x7fff0a786c38
wsk = &x;
cout << *wsk;
cout << x;
10
4 III 2015
Typy zmiennych
Tablice dynamiczne - 1D
int *tabi;
int rozmiar;
cin >> rozmiar;
tabi=new int [rozmiar];
tabi[0]=1;
tabi[1]=2;
cout << tabi[0] << " oraz " << tabi[1];
delete [] tabi ;
4 III 2015
Typy zmiennych
int *tabi;
Tablice dynamiczne  2D - macierz
int rozmiar;
cin >> rozmiar;
int **macierz;
tabi=new int [rozmiar];
macierz=new int *[3];
macierz[0]=new int [3];
tabi[0]=1;
macierz[1]=new int [3];
tabi[1]=2;
macierz[2]=new int [3];
cout << macierz[0] << " oraz " << macierz[1];
cout << macierz[0][0] << " ...";
0x13f40c0 oraz 0x13f40e
delete [] macierz [0];
delete [] macierz [1];
delete [] macierz [2];
delete [] macierz;
4 III 2015
Typy zmiennych
Tablice dynamiczne  3D - hypermacierz
int *tabi;
int ***macierz;
int rozmiar;
macierz=new int **[3];
macierz[0]=new int *[3];
cin >> rozmiar;
macierz[1]=new int *[3];
macierz[2]=new int *[3];
tabi=new int [rozmiar];
macierz[0][0]=new int [3];
tabi[0]=1;
macierz[0][1]=new int [3];
tabi[1]=2;
macierz[0][2]=new int [3];
macierz[1][0]=new int [3];
macierz[1][1]=new int [3];
macierz[1][2]=new int [3];
macierz[2][0]=new int [3];
macierz[2][1]=new int [3];
macierz[2][2]=new int [3];
// & macierz[0][0][0] = 3.1415;
delete [] macierz [0][0];
delete [] macierz [0][1];
delete [] macierz [0][2];
//...
4 III 2015
Typy zmiennych
Tablice dynamiczne  nxn hypermacierz
int ****macierz;
3^n -
macierz=new int ***[3];
macierz[0]=new int **[3];
macierz[1]=new int **[3];
tu 3^4 = 3*3*3 = 27
macierz[2]=new int **[3];
a gdyby tak
macierz[0][0]=new int* [3];
1000x1000x1000x1000 ?
macierz[0][1]=new int* [3];
macierz[0][2]=new int* [3];
1e12 typ double (8B) =
macierz[1][0]=new int* [3];
1e12 B =
// ...
~1e9 kB =
macierz[0][0][0]=new int [3];
~1e6MB =
macierz[0][0][1]=new int [3];
~1e3GB =
macierz[0][0][2]=new int [3];
~1TB
// & macierz[0][0][0][0] = 3.1415;
delete [] macierz [0][0][0];
delete [] macierz [0][0][1];
delete [] macierz [0][0][2];
//...
4 III 2015
K-dron
K-dron  jedenastościenna bryła geometryczna
odkryta przez Janusza Kapustę w styczniu 1985 roku.
Nazwa K-dronu pochodzi od słowa dron, które w
języku greckim oznacza ścianę, a k jest jedenastą
literą łacińskiego alfabetu.
http://www.k-dron.com/
4 III 2015
Programowanie  formalności...

Podstawy

Struktura programu w C++

Typy, zmienne

Funkcje

Struktury
4 III 2015
Funkcje
Funckja,
przykłady z matematyki:

sin(x)

cos(x)

sqrt(x)

max(x,y,z)

stdev(a1,a2,a3,a4,a5,a6,a7,a8)

..
parametry
nazwa funkcji
sin(x)
sin(30o) = 0.5
sin ( x )
wynik
sin(30o) = 0.5
4 III 2015
Funkcje
Funckja, gdyby tak ją zdefiniować w c++:
sin ( x )
sin(30o) = 0.5
int dodaj( int a, int b)
float sinus( float kat )
{
{
return a+b;
return sin(kat);
}
}
wyn=sin(3.14); wynik=dodaj(2,3);
4 III 2015
Funkcje
int wprowadz( int a, int b)
{
int x;
cout << "Podaj liczbę z przedzialu (" << a <<","< cin >> x;
if ((x cout << "Bledna liczba! Przyjmuje 0!\n";
x=0;
}
return x;
}
int main()
{
int y;
y=wprowadz(1998,2015);
cout << "y=" << y;
}
4 III 2015
Funkcje
void pokaz(int a)
{
cout << "Wprowadzona liczba do systemu wynosi:" << a << "\n";
}
int main()
{
int y;
y=123;
pokaz(y);
}
Wprowadzona liczba do systemu wynosi:123
4 III 2015
Funkcje
void pokaz_komunikat( void )
{
cout << "Uwaga  zamkniecie systemu zostalo zainicjowane!\n";
}
int main()
{
//...
pokaz_komunikat();
}
Uwaga  zamkniecie systemu zostalo zainicjowane!
4 III 2015
Funkcje - parametry
void podnies_do_kwadratu(int x)
{
x=x*x;
}
int main()
{
int a=2;
podnies_do_kwadratu(a);
a=2
cout << "a=" << a;
}
4 III 2015
Funkcje - parametry
void podnies_do_kwadratu(int *x)
{
*x=*x * *x;
}
int main()
{
int a=2;
podnies_do_kwadratu(&a);
a=4
cout << "a=" << a;
}
Przekazywanie parametru przez wskaznik
4 III 2015
Funkcje - parametry
void podnies_do_kwadratu(int &x)
{
x = x * x;
}
int main()
{
int a=2;
podnies_do_kwadratu(a);
a=4
cout << "a=" << a;
}
Przekazywanie parametru przez referencje
4 III 2015
Funkcje - parametry
bool aktualizacja(int &x, int &y)
{
bool wynik=false;
if (x>y) {
y=x;
wynik=true;
}
else if (y>x) {
x=y;
wynik=true;
}
else if (y==x){
wynik=false;
}
return wynik;
}
int main()
{
int a=2,b=3;
if (!aktualizacja(a,b)){
cout << "a=b";
}
}
4 III 2015
Struktury
struct fv_lista {
int lp;
string nazwa;
int cena;
int ilosc;
string uwagi;
};
int main()
fv_lista nazwa typu
{
fv_lista x;
x.lp=1;
x.nazwa="dachowki";
x sturktura (obiekt)
x.cena=120;
x.ilosc=500;
x.uwagi="ceramiczne";
}
4 III 2015
C++ obiektowo
C++ C, z pewnymi różnicami:

Prototypy funkcji

Operator zakresu

Klasa

Zmienne ustalone

Zmienne referencyjne

Funkcje przeciążone

Argumenty domyślne

Funkcje otwarte

Operatory new/delete

Int main() int main(void)

Obiektowe operacje in/out

Wyrażenia strukturowe
4 III 2015 48
C++ obiektowo
Prototypy funkcji
- nagłówek funkcji bez parametrów formalny i bez treści:
double sin(double);
double *strchr(const char*, int);
void window(int,int,int,int);
Wywołanie funkcji powinno być poprzedzone jej definicją
lub prototypem.
4 III 2015 49
C++ obiektowo
Instrukcje deklaracyjne
Nie muszą być na początku i nie muszą być grupowane
(ważność do końca bloku)
For (int x=0; x<10; x++)
Nie powinno się definiować wewnątrz pętli czy
warunkowo- np.:
For (int x=0; x<10; x++)
For (int y=0; y<10; y++)
{
If (x*y>50) int a; else char b;
4 III 2015 50
C++ obiektowo
Wyrażenia strukturowe
dla każdej klasy/struktury jest niejawnie zdefiniowany
operator przypisania (=) - może być lewym/prawym
argumentem przypisania
struct para {int x, y;} A,B;
A.x=10;
A.y=10;
B=A;
4 III 2015 51
C++ obiektowo
Obiektowe operacje wejścia i wyjścia
Wymaga iostream.h, gdzie są predefiniowane obiektowe
strumienie:
cin >> a >> b;
cout << "b+a=" << a+b;
cerr << asd;
clog << x;
4 III 2015 52
C++ obiektowo
Klasa I
Jest odmianą struktury (struct). W OOP sama nazwa klasy
czy nazwa struktury jest nazwą typu;
class zespolona{
&
void put();
&
};
zespolona liczba;
zespolona *wsk=&liczba;
4 III 2015 53
C++ obiektowo
Klasa II
Do pól i metod odwołujemy się za pomocą operatora . lub
-> w zależności od tego czy jest to obiekt czy wskaznik
class zespolona{
&
void put();
&
};
zespolona liczba;
zespolona *wsk=&liczba;
liczba.put();
wsk->put();
4 III 2015 54
C++ obiektowo
Klasa III
Różnica między klasą a strukturą jest także w sekcjach
class zespolona{
private:
double Re, Im;
public:
zespolona(double re=0, double im=0)
{ Re=re;
Im=im;}
Zespolona &operator+(zespolona &Z);
void put()
{ cout << '(' << Re << ',' << Im << ')'; }
};
zespolona liczba;
liczba(1,-1);
liczba.put();
4 III 2015 55
C++ obiektowo
Zmienne ustalone
są definiowane przez const  tam gdzie wymagane są
wartości stałe (np. w definicji tablicy)
const int max=50;
double tablica[max];
Wartości zmiennych const nie mogą być zmieniane.
Ustalone mogą być wskazniki oraz funkcje składowe klas.
Stałe funkcje składowe (np. klasy) nie mogą modyfikować
obiektów, na rzecz których są wywoływane.
Wskaznik do stałej x można modyfikować lecz *x już nie
const long *x;
long *const x;
Stały wskaznik - *x można modyfikować lecz x już nie
4 III 2015 56
C++ obiektowo
Operator zakresu
:: - poprzedzenie nazwy zmiennej lub funkcji nawą klasy i
operatorem :: oznacza odwołanie się komponentu tej klasy.
zespolna::put();
Czy np. w klasie zespolona:
zespolona (double Re=0, double Im=0)
{
Zespolona::Re=Re;
Zespolona::Im=Im;
}
4 III 2015 57
C++ obiektowo
Zmienne referencyjne
To zmienne tożsame z innymi zmiennymi
int k, &ref=k;
Czyli dostęp do zmiennej k odbywa się przez :
ref=1250;
cout << "k="<< k;
Przekazywanie parametrów do funkcji za pomocą
referencji przekazywany jest parametr a nie tylko jego
wartość.
4 III 2015 58
C++ obiektowo
Zmienne referencyjne
void zmniejsz(int &k)
{ k--; }
Funkcja zmniejsz nie tworzy kopii (lokalnej) parametru a
pracuje na argumencie aktualnym.
int x=10;
zmniejsz(x);
cout << "x="<< x;
Używane do zmiany wartości parametrów funkcji (a nie
np. za pomocą wartości funkcji return).
4 III 2015 59
C++ obiektowo
Zmienne referencyjne
int X;
int &funkcja1() { return X;}
int &funkcja2(int &y) {return y;}
main(){
int a;
X=30
funkcja()=30;
a=15
funckja2(a)=15;
}
gdy chcemy przekazać do nowego zaalokowanego obiektu.
4 III 2015 60
C++ obiektowo
Zmienne referencyjne
zespolona& zespolona::operator+(zespolona &z)
{
zespolona *x= new zespolona;
x->Re=Re+z.Re;
x->Im=Im+z.Im;
return *x;
}
gdy chcemy przekazać do nowego zaalokowanego obiektu.
4 III 2015 61
C++ obiektowo
Zmienne referencyjne
zespolona& zespolona::operator+(zespolona &z)
{
zespolona *x= new zespolona;
x->Re=Re+z.Re;
x->Im=Im+z.Im;
return *x;
}
ostream &operator<<(ostream &wyj, zespolona &z)
{
return wyj << '(' << z.Re << ',' << z.Im << ')';
}
Wynikiem jest argument wyj (referencyjny wynik globalnego operatora wyjścia
<<).
Aby można było przekazać w wyniku referencję do arg. formalnego  musi on
(arg. formalny) być też typu referencyjnego. Inaczej zostanie argumentem
lokalnym niszczonym poza ciałem funkcji.
4 III 2015 62
C++ obiektowo
Funkcje przeciążane
- czyli różne funkcje o tej samej nazwie. Muszą się jednak
różnić liczbą parametrów lub typami parametrów.
int nr_konta(int n)
{
return n;
}
int nr_kotna(string tekst)
{
return strtoint(tekst);
}
4 III 2015 63
C++ obiektowo
Argumenty domyślne
- czyli domniemane wartości brakujących argumentów.
int zlicz(int x, int y=10, int z=10)
{
return x+y+z;
}
zlicz(10); =10+10+10 =30
zlicz(10,5); =10+5+10 =25
zlicz(10,1,1); =10+1+1 = 12
4 III 2015 64
C++ obiektowo
Funkcje inline
podstawiane przez kompilator w miejscu wywołania (nie jeśli
zawiera pętle iteracyjne)
inline int zlicz(int x, int y=10, int z=10)
{
return x+y+z;
}
4 III 2015 65
C++ obiektowo
Operatory new i delete
new do alokacji pamięci na obiekt
int *x = new int;
int *a = new int[10];
delete  do zwalniania pamięci.
delete x;
delete [] a;
4 III 2015 66
Podsumowanie formalności...

Podstawy (zmienne, funkcje)

Struktura programu w C++ (kolejność, pliki dołączane)

Typy, zmienne (int, long/short, tablice[ ], operatory)

Funkcje (void, przekazywanie parametrów)

Struktury (typy)
4 III 2015


Wyszukiwarka

Podobne podstrony:
Wyklad progr obiekt cz II
Wyklad progr obiekt cz III
Wyklad 7 Inwestycje materialne cz 1
Arch wykład nr 5 Ściskanie cz 1
wykład statystyka matematyczna cz 4
Organizacja i taktyka ochrony obiektów Cz I System bezpieczeństwa obiektu
Arch wykład nr 6 Ściskanie cz 2
Wykład 9 Kap obr cz II
Psychopatologia UW Wykład III RS cz II dla stud
Wykład 14 Nerki cz 1
Konspekt do Wykladu Ramy zelbetowe cz II przegubowe polaczenie slup stopa
Konspekt do wykładu dot Przebicia cz 1 wprowadzenie do problemu
Wykład 8 Kap obr cz I [2
Wykład 8 Kap obr cz I [2
Lipidy cz I Wykład z 7 03 2007

więcej podobnych podstron