Programowanie 2. Język C++. Wykład 2.



Podobne dokumenty
Programowanie 2. Język C++. Wykład 3.

Wartości domyślne, szablony funkcji i klas

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

Programowanie 2. Język C++. Wykład 9.

Wskaznik. Przekazywanie wyniku funkcji przez return. Typy i zmienne wskaznikowe. Zmienna wskazywana. typ * nazwa_wkaznika

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Jzyk C++ cz 3. Jarosław Gramacki Instytut Informatyki i Elektroniki ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

PARADYGMATY PROGRAMOWANIA Wykład 2

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Projektowanie i programowanie obiektowe (materiały do wykładu cz. VI)

Wstęp do Programowania 2

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Kompozycja i dziedziczenie klas

Wstęp do programowania

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18

Język C++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski.

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy KONSTRUKTORY

Programowanie obiektowe w C++ Wykład 12

PARADYGMATY PROGRAMOWANIA Wykład 4

Wstęp do programowania obiektowego, wykład 7

Nowe słowa kluczowe. Komentarze. Wskaźniki typu void. class, delete, new, friend,... /* Komentarz w C i C++ */ // Komentarz w C++ (do końca wiersza)

Programowanie obiektowe Wykład 1. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20

FUNKCJE WZORCOWE. Wykład 10. Programowanie Obiektowe (język C++) Funkcje wzorcowe wprowadzenie (2) Funkcje wzorcowe wprowadzenie (1)

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

class A { public: A(): i(5), s("abc") { } int i; string s; };

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Techniki Programowania wskaźniki 2

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Programowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody

EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++


Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Funkcje przeciążone, konstruktory kopiujące, argumenty domyślne

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)

Programowanie w języku C++

Projektowanie klas c.d. Projektowanie klas przykład

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc

PROGRAMOWANIE OBIEKTOWE W C++ cz. 2. Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów.

Programowanie obiektowe Wykład 3. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21

Operator przypisania. Jest czym innym niż konstruktor kopiujący!

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

Co nie powinno być umieszczane w plikach nagłówkowych:

Wstęp do Programowania 2

PROGRAMOWANIE OBIEKTOWE W C++ - cz 1. Definicja klasy, składniki klasy, prawa dost pu, definiowanie funkcji składowych, konstruktory i destruktory.

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Abstrakcyjny typ danych

Plik klasy. h deklaracje klas

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

Przykład implementacji przeciażeń operatorów problem kolizji

Szablony klas, zastosowanie szablonów w programach

Szablony funkcji i szablony klas

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

PARADYGMATY PROGRAMOWANIA Wykład 3

Programowanie Obiektowe i C++

public: // interfejs private: // implementacja // składowe klasy protected: // póki nie będziemy dziedziczyć, // to pole nas nie interesuje

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Paradygmaty programowania

Wykład V. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Obsługa wyjątków. Język C++ WW12

Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class).

Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Preprocesor języka C

Programowanie 2. Język C++. Wykład 1.

Do czego służą klasy?

Zaawansowane programowanie w języku C++ Klasy w C++

Algorytmy i Struktury Danych.

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.

Programowanie 2. Język C++. Wykład Relacje między klasami, klasy zagnieŝdŝone, klasy lokalne

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Funkcje. Piotr Zierhoffer. 7 października Institute of Computer Science Poznań University of Technology

Laboratorium nr 10. Temat: Funkcje cz.2.

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Microsoft IT Academy kurs programowania

Wprowadzenie do szablonów szablony funkcji

ATD. Wykład 8. Programowanie (język C++) abstrakcyjny typ danych. Abstrakcyjne typy danych (ATD) Metody czysto wirtualne. Definicje i uwagi:

ROZDZIAŁ 2. Operatory

1 Klasy. 1.1 Denicja klasy. 1.2 Skªadniki klasy.

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Przekazywanie argumentów wskaźniki

Programowanie obiektowe w języku

Wstęp do Programowania 2

Język C++ Różnice między C a C++

Do czego służą klasy?

Modelowanie numeryczne w fizyce atmosfery Ćwiczenia 3

Paradygmaty programowania. Paradygmaty programowania

Wprowadzenie do szablonów szablony funkcji

Transkrypt:

2.1 Definicja, deklaracja, wywołanie funkcji.... 1 2.2 Funkcje inline... 4 2.3 Przekazanie do argumentu funkcji wartości, adresu zmiennej.... 5 2.4 Wskaźniki do funkcji... 8 2.5 Przeładowanie funkcji... 9 2.6 Przeładowanie operatorów.... 11 2.1 Definicja, deklaracja, wywołanie funkcji. <zwracanytyp> nazwafunkcji(<typarg1> <nazwaarg1>, <typarg2> <nazwaarg2>, ) <instrukcje>; Przykład 1. Deklaracja, definicja, wywołanie funkcji (w02-01-funkcjedefinicja.cpp). int f(int, int); // deklaracaja funkcji int w = 0; w = f(10, 20); // wywołanie funkcji cout << w << endl; // definicja funkcji int f(int x, int y) int w = x + y; return w; Przykład 2. Inicjowanie argumentu funkcji. void f(char * pc = "tekst") 1

Przykład 3. Deklaracja, definicja, wywołanie metody (w02-03a-metody.cpp). class A int f(int, int); ; // deklaracaja metody A a; int w = 0; w = a.f(10, 20); cout << w << endl; // wywołanie metody // definicja metody int A::f(int x, int y) int w = x + y; return w; Przykład 4. Metody const nie mogą modyfikowć atrybutów klasy (w02-03b-metodyconst.cpp). #include<iostream> class A A(int x) : i(x) void f1() const; void f2(a *p) const; private: int i; ; void A::f1() const // i = 400; // błąd, modyfikacja obiektu i cout << this->i << endl; void A::f2(A *p) const p->i = 300; p->i++; cout << p->i << endl; A a(100); a.f1(); a.f2(&a); 2

Przykład 5. Metody static mogą być wywołane bez obiektu (w02-03c-metodystatic.cpp). class A static void f(); void g(); ; void A:: f() cout << " static f() " << endl; void A:: g() cout << " g() " << endl; A::f(); // A::g(); // błąd, metoda g() nie jest statyczna 3

2.2 Funkcje inline. inline <zwracanytyp> nazwafunkcji(<typarg1> <nazwaarg1>, <typarg2> <nazwaarg2>, ) <instrukcje>; Własności: 1. Funkcje inline nie mogą być wbudowane w biblioteki.lib czy.dll. To kompilator wstawia kod w miejsce wywołania funkcji a nie linker. 2. Definicje funkcji inline mogą być w plikach nagłówkowych.h. 3. Metody definiowane w klasach są zawsze inline. 4. Metody definiowane poza klasą są inline jeżeli użyje się polecenia inline, np.: inline <zwracanytyp> nazwaklasy::nazwafunkcji(<typargumentu> <nazwaargumentu>, ) Przykład 1. Definicja funkcji inline (w02-04-inlinefunkcje.cpp). inline int f(int); int x =10; int w; w = f(x); w = f(f(x)); w = f(w); int f(int i) int k = i * i; return k; Przykład 2. Makro zawsze jest inline. Makro MAX i odpowiadająca jej funkcja inline. #define MAX(a, b) ((a) > (b)? (a) : (b)) inline int max(int a, int b) return a > b? a : b; 4

Przykład 3. Metody definiowane w klasach są inline (w02-05-inlinemetody.cpp). class A // implementacja metody w klasie, jawana postac inline void f() cout << "f() w A " << endl; // deklaracja metody, kompilator wstawi wywolanie funkcji, // funkcja zdefiniowana jest w innym miejscu void g(); ; // deklaracja metody, kompilator wstawi korpus funkcji // czyli pelną implementację funkcji void h(); // implementacja metody poza klasa void A::g() cout << "g() w A " << endl; // implementacja metody jako inline inline void A::h() cout << "h() w A " << endl; 2.3 Przekazanie do argumentu funkcji wartości, adresu zmiennej. Przykład 1. Przekazanie do argumentu funkcji wartości zmiennej (w02-06a-przekazaniewartosci.cpp). int f(int x) x = x*x; return x; int y = 10; cout << "y w main() przed = " << y << endl; f(y); cout << "y w main() po = " << y << endl; y w main() przed = 10 y w main() po = 10 5

Przykład 2. Przekazanie do argumentu funkcji adresu zmiennej (poprzez referencje, w02-06b-przekazanieadresu- Referencja.cpp). int f(int &x) x = x*x; return x; int y = 10; cout << "y w main() przed = " << y << endl; cout << "f(y) cout << "y w main() po = " << f(y) << endl; = " << y << endl; y w main() przed = 10 f(y) = 100 y w main() po = 100 Przykład 3. Przekazanie do argumentu funkcji adresu zmiennej (poprzez wskaźnik, w02-06c-przekazanieadresu- Wskaznik.cpp). int f(int *x) *x = *x * (*x); return *x; int y = 10; int *py =&y; cout << "y w main() przed = " << y << endl; cout << "f(py) cout << "y w main() po cout << "f(&y) cout << "y w main() po = " << f(py) << endl; = " << y << endl << endl; = " << f(&y) << endl; = " << y << endl; 6

y w main() przed = 10 f(py) = 100 y w main() po = 100 f(&y) = 10000 y w main() po = 10000 Uwaga: Jeżeli funkcję f() zdefiniujemy następująco int f(int &x) return x*x; int f(int *x) return *x * (*x);, to wartość zmiennej y nie zmieni się po wywołaniu funkcji. 7

2.4 Wskaźniki do funkcji. Przykład 1. Wskaźnik do funkcji (w02-07-wskaznikidofunkcji.cpp). int (*pfun)(int); int fun1(int); int fun2(int); pfun = &fun1; cout << "fun1(10) = " << fun1(10) << endl; cout << "pfun(10) = " << pfun(10) << endl; pfun = fun2; cout << "fun2(20) = " << fun2(20)<< endl; cout << "pfun(20) = " << pfun(20) << endl; int fun1(int x) cout<< "fun1(int), "; return (x * x); int fun2(int x) cout << "fun2(int), "; return 2 * x; fun1(int), fun1(10) = 100 fun1(int), pfun(10) = 100 fun2(int), fun2(20) = 40 fun2(int), pfun(20) = 40 Przykład 2. Adres funkcji (w02-08-adresfunkcji.cpp). int fun1(int x) return x; void fun2(int x) cout << "fun2, x = " << x << endl; cout <<"&fun1 = " << (long)&fun1 << endl; cout <<"&fun2 = " << (long)&fun2 << endl; &fun1 = 18748522 &fun2 = 18747797 8

2.5 Przeładowanie funkcji Definicja. Sygnatura funkcji jest to nazwa funkcji, liczba argumentów, uporządkowany zbiór typów argumentów funkcji, klasa lub obszar nazw do którego funkcja należy. Uwaga: Funkcje mają różne typy jeżeli ich sygnatury są różne. Obiekty funkcyjne (function objects) mogą mieć różny typ nawet wtedy, gdy mają takie same sygnatury. Definicja. przeładowanie funkcji (function overloading). Funkcja jest przeładowana, jeżeli istnieje inna funkcja o takiej samej nazwie ale różnej sygnaturze. Przeładowane funkcje, operatory nazywane są funkcjami, operatorami polimorficznymi. Przykład 1. Sygnatura funkcji. Sygnatura funkcji g(): nazwa g, lista argumentów (char, int, double). int g(char x, int y, double z) Sygnatura funkcji f(): nazwa f, lista argumentów (int, int), klasa A. int A::f(int x, int y) Przykład 2. Przeładowanie funkcji (w02-09-przeladowaniefunkcji.cpp). void funkcja() cout << "funkcja()" << endl; void funkcja(int i) cout << "funkcja(int) = " << i << endl; void funkcja(double d) cout << "funkcja(double) = " << d << endl; void funkcja(char pct[]) cout << "funkcja(char[]) = " << pct << endl; void funkcja(int i1, int i2) cout << "funkcja(int,int) = " << i1 * i2 << endl; void main () funkcja(); funkcja(5); funkcja(0.123); funkcja("tekst"); funkcja(2,5); 9

Przykład 2. Funkcje tego samego typu, tzn. te funkcje nie są przeładowane. void funkcja(int ix) int funkcja(int ix) return 0; const void funkcja(int ix) void funkcja(const int ix) Przykład 3. Przeładowanie funkcji wskaźnikiem (w02-10-przeladowaniewsk.cpp). #include <string> void f(string x) cout <<"f(int), x = " << x << endl; void f(string * px) cout <<"f(string*), *px = " << *px << endl; string s = "abc"; string * ps = &s; string * p = new string("xyz"); f(s); f(ps); f(p); f(*p); Przykład 4. Przeładowanie metod (w02-11-przeladowaniemetod.cpp). class A A(): i(0), ci(0) int f() cout << "f()" << endl; return i; int f() const cout << "f() const" << endl; return ci; int g() const cout << "g() const" << endl; return i; private: int i; const int ci; ; A a; a.f(); a.g(); const A ca; ca.f(); ca.g(); 10

2.6 Przeładowanie operatorów. Przykład. Przeładowanie operatora + (w02-12-przeladowanieop+.cpp). #include<iostream> class A A()i=0; A(int x): i(x) ~A() int PokAtr() const return i; A operator+ (const A &); protected: int i; ; A A:: operator+ (const A &ra) return (i + ra.i); A a, a1(100), a2(200); cout <<"a1.i = " << a1.pokatr() << endl; cout <<"a2.i = " << a2.pokatr() << endl; a = a1 + a2; cout <<"a1 + a2 = " << a.pokatr() << endl; a1.i = 100 a2.i = 200 a1 + a2 = 300 11

Przykład. Przeładowanie operatora = (w02-13-przeladowanieop=.cpp). class A A(); A(int); ~A(); int GetAtr() const; void SetAtr(int); A & operator = (const A &); private: int *p; ; A::A() p = new int(0); cout << "A()" << endl; A::A(int x) p = new int(x); cout << "A(int)" << endl; A::~A() delete p; cout << "~A()" << endl; int A::GetAtr() const return *p; void A::SetAtr(int x) *p = x; A & A::operator=(const A & r) if (this == &r) return *this; *p = r.getatr(); return *this; A a; A b(900); cout << "a= "<< a.getatr() << endl; cout << "b= "<< b.getatr() << endl; a = b; cout << "a= "<< a.getatr() << endl; A() A(int) a= 0 b= 90 a= 90 a= 80 ~A() ~A() b.setatr(800); a = b; cout << "a= "<< a.getatr() << endl; 12