Wstęp do Programowania 2

Podobne dokumenty
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

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

Do czego służą klasy?

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

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

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

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

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

Plik klasy. h deklaracje klas

Podstawy Programowania Obiektowego

Programowanie obiektowe i C++ dla matematyków

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

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

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

Programowanie obiektowe w C++ Wykład 12

Programowanie Obiektowe i C++

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

Podstawy Programowania Obiektowego

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

class Student Deklaracja klasy Osoba: Deklaracja klasy Student:

Wykład 8: klasy cz. 4

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

PARADYGMATY PROGRAMOWANIA Wykład 2

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

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

Wstęp do Programowania 2

Projektowanie klas c.d. Projektowanie klas przykład

Języki i paradygmaty programowania

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

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

TEMAT : KLASY POLIMORFIZM

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

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

Konstruktor kopiujacy

Programowanie obiektowe i C++ dla matematyków

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

Do czego służą klasy?

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

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.

KLASY cz.1. Dorota Pylak

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Programowanie w języku C++

PARADYGMATY PROGRAMOWANIA Wykład 3

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

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

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

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

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

Wstęp do programowania

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Szablony funkcji i szablony klas

Paradygmaty programowania. Paradygmaty programowania

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

dr inż. Jarosław Forenc

TEMAT : KLASY DZIEDZICZENIE

Operacje wejścia/wyjścia (odsłona druga) - pliki

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Programowanie obiektowe

Materiały do zajęć VII

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

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

ALGORYTMY I STRUKTURY DANYCH

KLASY cz4. Dorota Pylak. destruktory składowe statyczne przeciążanie operatorów. wskaźniki

Paradygmaty programowania

Programowanie obiektowe język C++

Programowanie obiektowe i C++ dla matematyków

Programowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26

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

Wykład 4: Klasy i Metody

PARADYGMATY PROGRAMOWANIA Wykład 4

Mechanizm dziedziczenia

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM

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

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 4. Karol Tarnowski A-1 p.

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

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Zaawansowane programowanie w C++ (PCP)

Techniki Programowania wskaźniki

Listy powiązane zorientowane obiektowo

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

Programowanie Obiektowew języku C++ Zadania L4

Rzutowanie i konwersje

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

Wstęp do programowania

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

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

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

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

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

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

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 4. Karol Tarnowski A-1 p.

Transkrypt:

Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 5

W programowaniu obiektowym programista koncentruje się na obiektach. Zadaje sobie pytania typu: Jak najlepiej opisać (zdefiniować) dany obiekt. Jakich danych potrzeba, aby poprawnie zdefiniować dany obiekt. Jakich operacji (metod) wymaga praca z danym obiektem.

W programowaniu obiektowym programista koncentruje się na obiektach. Zadaje sobie pytania typu: Jak najlepiej opisać (zdefiniować) dany obiekt. Jakich danych potrzeba, aby poprawnie zdefiniować dany obiekt. Jakich operacji (metod) wymaga praca z danym obiektem. Abstrakcja Abstrakcja w informatyce stanowi klucz do reprezentowania informacji w kategoriach interfejsu użytkownika.

W programowaniu obiektowym programista koncentruje się na obiektach. Zadaje sobie pytania typu: Jak najlepiej opisać (zdefiniować) dany obiekt. Jakich danych potrzeba, aby poprawnie zdefiniować dany obiekt. Jakich operacji (metod) wymaga praca z danym obiektem. Abstrakcja Abstrakcja w informatyce stanowi klucz do reprezentowania informacji w kategoriach interfejsu użytkownika. Klasa Klasa to narzędzie, za pomoca któregow C++ tłumaczy się abstrakcje na typ użytkownika. Jest opakowaniem łacz acym reprezentacje danych z metodami ich przetwarzania.

Specyfikacja klasy składa sie z dwóch części: Deklaracji klasy - opisuje dane (w kategoriach zmiennych składowych) oraz interface publiczny (w kategoriach funkcji składowych). Definicji metod klasy - opisuj a implementację funkcji składowych klasy.

Deklaracja - schemat class NazwaTypu { // ciało klasy - tu deklaruje się // składniki klasy ; // koniecznie średnik!!!

Deklaracja - klasa Punkt class Punkt { private: int x, y; public: void inicjalizuj(int wspx, int wspy); void przesun(int deltax, int deltay); void wypisz(); ;

Słowa kluczowe: public i private Słowa kluczowe public i private opisuja tryb dostępu do składowych klasy. Każdy program używajacy obiektu danej klasy ma bezpośredni dostęp do jej części publicznej. Do prywatnych składowych obiektu program może uzyskać dostęp wyłacznie za pośrednictwem publicznych funckji składowych, albo przy pomocy funkcji zaprzyjaźnionych (o nich później :)).

int main() { int x, y; cout << "Podaj wspolrzedne punktu (x,y): "; cin >> x >> y; Punkt A, B; A.inicjalizuj(x, y); B.inicjalizuj(3, 4); cout << "Oto punkt: A"; A.wypisz(); cout << "Oto punkt: B"; B.wypisz(); cout << "Przesuwamy punkt A o wektor [2, 4]" << endl; A.przesun(2, 4); cout << "Obecnie punkt A ma wspolrzedne: A"; A.wypisz(); cout << "O ile przesunac punkt B? "; cin >> x >> y; cout << "Punkt B przesuwamy o wektor [" << x << ", " << y << "]" << endl; B.przesun(x, y); cout << "Obecnie punkt B ma wspolrzedne: B"; B.wypisz(); return 0;

Publiczne funkcje składowe pośrednicz a między programem a prywatnymi składowymi obiektu. Taka ochrona danych nosi nazwę ukrywania danych.

Publiczne funkcje składowe pośrednicz a między programem a prywatnymi składowymi obiektu. Taka ochrona danych nosi nazwę ukrywania danych. Gromadzenie szczegółów implementacyjnych i odzielanie ich od abstrakcji (interfejsu publicznego) nosi nazwę hermetyzacji.

Publiczne funkcje składowe pośrednicz a między programem a prywatnymi składowymi obiektu. Taka ochrona danych nosi nazwę ukrywania danych. Gromadzenie szczegółów implementacyjnych i odzielanie ich od abstrakcji (interfejsu publicznego) nosi nazwę hermetyzacji. Składowe klasy (elementy danych, funkcje) można deklarować w publicznej lub prywatnej części klasy.

Publiczne funkcje składowe pośrednicza między programem a prywatnymi składowymi obiektu. Taka ochrona danych nosi nazwę ukrywania danych. Gromadzenie szczegółów implementacyjnych i odzielanie ich od abstrakcji (interfejsu publicznego) nosi nazwę hermetyzacji. Składowe klasy (elementy danych, funkcje) można deklarować w publicznej lub prywatnej części klasy. Z uwagi na podstawowe założenia programowania obiektowego (ukrywanie danych), elementy danych (pola składowe) zwykle trafiaja do części prywatnej.

Publiczne funkcje składowe pośrednicza między programem a prywatnymi składowymi obiektu. Taka ochrona danych nosi nazwę ukrywania danych. Gromadzenie szczegółów implementacyjnych i odzielanie ich od abstrakcji (interfejsu publicznego) nosi nazwę hermetyzacji. Składowe klasy (elementy danych, funkcje) można deklarować w publicznej lub prywatnej części klasy. Z uwagi na podstawowe założenia programowania obiektowego (ukrywanie danych), elementy danych (pola składowe) zwykle trafiaja do części prywatnej. Ponieważ funckje składowe tworza interface klasy, to powinny się znajdować w części publicznej; w przeciwnym razie program nie mógłby ich wywoływać.

Publiczne funkcje składowe pośrednicza między programem a prywatnymi składowymi obiektu. Taka ochrona danych nosi nazwę ukrywania danych. Gromadzenie szczegółów implementacyjnych i odzielanie ich od abstrakcji (interfejsu publicznego) nosi nazwę hermetyzacji. Składowe klasy (elementy danych, funkcje) można deklarować w publicznej lub prywatnej części klasy. Z uwagi na podstawowe założenia programowania obiektowego (ukrywanie danych), elementy danych (pola składowe) zwykle trafiaja do części prywatnej. Ponieważ funckje składowe tworza interface klasy, to powinny się znajdować w części publicznej; w przeciwnym razie program nie mógłby ich wywoływać. Domyślnym trybem dostępu jest tryb prywatny, zatem nie musimy używać słowa kluczowego private.

class Punkt { int x, y; public: void inicjalizuj(int wspx, int wspy); void przesun(int deltax, int deltay); void wypisz(); ;

Klasy i struktury Opis klasy wyglada jak deklaracja struktury z dodatkiem funkcji składowych i trybów dostępu. Ale, C++ daje te same możliwości strukturom, co klasom. Jedyna różnica to: w strukturze domyślnym trybem jest tryb publiczny, a w klasie tryb prywatny.

Funkcje składowe klasy Definicja funkcji składowej, to definicja zwykłej funkcji, ale posiada dwie dodatkowe cechy: Stosowany jest operator zasięgu (::), aby zdefiniować klasę, do której funkcja należy. Funkcja składowa (metoda) ma dostęp do prywanych danych klasy.

Klasa Punkt - definicje metod void Punkt::inicjalizuj(int wspx, int wspy) { x = wspx; y = wspy; void Punkt::przesun(int deltax, int deltay) { x += deltax; y += deltay; void Punkt::wypisz() { cout << "(" << x << ", " << y << ")\r\n";

Klasa Punkt3d class Punkt3d { int x, y,z; public: void inicjalizuj(int wspx, int wspy, int wspz); void przesun(int deltax, int deltay, int deltaz); void wypisz(); ;

Klasa Punkt3d - definicje metod void Punkt3d::inicjalizuj(int wspx, int wspy, int wspz) { x = wspx; y = wspy; z = wspz; void Punkt3d::przesun(int deltax, int deltay, int deltaz) { x += deltax; y += deltay; z += deltaz; void Punkt3d::wypisz() { cout << "(" << x << ", " << y << ", " << z << ")\r\n";

Metody wplatane Każda funkcja zdefiniowana w deklaracji klasy automatycznie staje się funkcja wplatana. Można też zdefiniować funkcję wplatana poza deklaracja klasy; w tym celu należy użyć kwalifikatora inline. Specjalne reguły zwiazane z funkcjami wplatanymi wymagaja zdefiniowania ich w każdym pliku, w którym sa wywoływane. Aby zatem udostępnić funkcje wplatane, najlepiej dostarczyć je wraz z interfejsem klasy.

Metody wplatane - przykład class Punkt3d { int x, y,z; public: void inicjalizuj(int wspx, int wspy, int wspz){ x = wspx; y = wspy; z = wspz; void przesun(int deltax, int deltay, int deltaz); void wypisz(); ;

class Punkt3d { int x, y,z; public: void inicjalizuj(int wspx, int wspy, int wspz); void przesun(int deltax, int deltay, int deltaz); void wypisz(); ; inline void Punkt3d::inicjalizuj(int wspx, int wspy, int wspz){ x = wspx; y = wspy; z = wspz;

Obiekty Każdy nowo utworzony obiekt zawiera przestrzeń na wewnetrzne zmienne - dane składowe. Wszystkie obiekty tej samej klasy współdziel a jeden zbior metod.

int main() { int x, y, z; cout << "Podaj wspolrzedne punktu (x,y,z): "; cin >> x >> y >> z; Punkt A, B; A.inicjalizuj(x, y, y); B.inicjalizuj(3, 4, 5); cout << "Oto punkt: A"; A.wypisz(); cout << "Oto punkt: B"; B.wypisz(); return 0;

Konstruktory Konstruktory klasy służa do konstruowania nowych obiektów i przypisywania wartości ich danym składowym. Nazwa konstruktora jest taka sama jak nazwa klasy. Konstruktor nie zwraca wartości i nie definiuje się jego typu. Dzięki przeci ażaniu funkcji można utworzyć kilka konstruktorów - oczywiście pod warunkiem, że każdy będzie miał inna sygnaturę.

Przykład definicji class Punkt { private: int x, y; public: Punkt(int wspx, int wspy); // void przesun(int deltax, int deltay); void wypisz(); ; Punkt::Punkt(int wspx, int wspy){ x = wspx; y = wspy; void Punkt::wypisz() { cout << "(" << x << ", " << y << ")\r\n";

Przykład użycia konstruktora int main() { int x, y; cout << "Podaj wspolrzedne punktu (x,y): \n x = "; cin >> x ; cout << "y = "; cin >> y; Punkt A = Punkt(x, y), B = Punkt(3, 4); cout << "Oto punkt: A"; A.wypisz(); cout << "Oto punkt: B"; B.wypisz(); return 0;

Przykład użycia konstruktora int main() { int x, y; cout << "Podaj wspolrzedne punktu (x,y): \n x = "; cin >> x ; cout << "y = "; cin >> y; Punkt A(x, y), B(3, 4); cout << "Oto punkt: A"; A.wypisz(); cout << "Oto punkt: B"; B.wypisz(); return 0;

Przykład użycia konstruktora int main() { int x, y; cout << "Podaj wspolrzedne punktu A: \n"; cout << "x = "; cin >> x ; cout << "y = "; cin >> y; Punkt *A = new Punkt(x, y); cout << "Oto punkt: A"; A->wypisz(); cout << "Podaj wspolrzedne punktu B: \n"; cout << "x = "; cin >> x ; cout << "y = "; cin >> y; Punkt *B = new Punkt(x, y); cout << "Oto punkt: B"; B->wypisz(); delete A; delete B; return 0;

Konstruktor domyślny Konstruktor domyślny jest używany do utworzenia obiektu wtedy, gdy nie podamy wartości inicjalizujacych, np. Punkt A; Kompilator tworzy konstruktor domyślny tylko wtedy, gdy nie zdefiniujemy żadnych własnych konstruktorów. Zdefiniowanie dowolnego konstruktora wymaga zdefiniowania rownież konstruktora domyślnego. Inaczej instrukcja typu: Punkt A; bedzie powodowała bład.

Konstruktor domyślny - przykład #include <iostream> using namespace std; class Punkt { private: int x, y; public: Punkt(); Punkt(int wspx, int wspy); void wypisz(); ; Punkt::Punkt(){x = 0; y = 0; Punkt::Punkt(int wspx, int wspy){ x = wspx; y = wspy; void Punkt::wypisz() { cout << "(" << x << ", " << y << ")\r\n";

Konstruktor domyślny - przykład #include <iostream> using namespace std; class Punkt { private: int x, y; public: Punkt(int wspx=0, int wspy=0); void wypisz(); ; Punkt::Punkt(int wspx, int wspy){ x = wspx; y = wspy; void Punkt::wypisz() { cout << "(" << x << ", " << y << ")\r\n";

Konstruktor domyślny - przykład int main() { int x, y; Punkt C; C.wypisz(); cout << "\npodaj wspolrzedne punktu A: \n"; cout << "x = "; cin >> x ; cout << "y = "; cin >> y; Punkt *A = new Punkt(x, y); cout << "Oto punkt: A"; A->wypisz(); cout << "Podaj wspolrzedne punktu B: \n"; cout << "x = "; cin >> x ; cout << "y = "; cin >> y; Punkt *B = new Punkt(x, y); cout << "Oto punkt: B"; B->wypisz(); delete A; delete B; return 0;

Destruktory Kiedy używamy konstruktora do utworzenia obiektu, program śledzi ten obiekt aż do momentu jego wygaśnięcia. Gdy to nastapi, wywołuje specjalna funkcje zwana destruktorem. Jeśli w konstruktorze używamy, np. operatora new, to w destruktorze powinniśmy użyć operatora delete, aby zwolnić przydzielona pamięć. Destruktor nazywa się tak jak klasa, ale dodatkowo nazwa ta poprzedzona jest znakiem tyldy ( ). Podobnie jak konstruktor nie ma wartości zwrotnej, ani deklarowanego typu. Nie posiada argumentów.

Destruktory - przykład #include <iostream> using namespace std; class Punkt { private: int x, y; public: // konstruktor Punkt(int wspx=0, int wspy=0); void wypisz(); //destruktor ~Punkt(){; ;

Rozważmy program: #include <iostream> using namespace std; class Punkt { private: int x, y; public: Punkt(int wspx=0, int wspy=0); void wypisz(); ~Punkt(){; ; Punkt::Punkt(int wspx, int wspy){ x = wspx; y = wspy; void Punkt::wypisz(){ cout << "(" << x << ", " << y << ")\r\n";

int main() { int x, y; cout << "\npodaj wspolrzedne punktu A: \n"; cout << "x = "; cin >> x ; cout << "y = "; cin >> y; Punkt *A = new Punkt(x, y); cout << "Oto punkt: A"; A->wypisz(); cout << "Podaj wspolrzedne punktu B: \n"; cout << "x = "; cin >> x ; cout << "y = "; cin >> y; const Punkt B(x,y) ; B.wypisz(); delete A; return 0;

Wynik: bws@bws:~/$ g++ punkt_5.cpp punkt_5.cpp: In function int main() : punkt_5.cpp:33: error: passing const Punkt as this argument of void Punkt::wypisz() discards qualifiers

Rozwiazanie #include <iostream> using namespace std; class Punkt { private: int x, y; public: Punkt(int wspx=0, int wspy=0); void wypisz() const; ~Punkt(){; ; Punkt::Punkt(int wspx, int wspy){ x = wspx; y = wspy; void Punkt::wypisz() const{ cout << "(" << x << ", " << y << ")\r\n";

Niejawny this #include <iostream> using namespace std; class Punkt { private: int x, y; public: Punkt(int wspx=0, int wspy=0); void wypisz() const; bool rowne(const Punkt& ); ~Punkt(){; ; Punkt::Punkt(int wspx, int wspy){ x = wspx; y = wspy; void Punkt::wypisz() const{ cout << "(" << x << ", " << y << ")\r\n"; bool Punkt::rowne(const Punkt& A){ if ((A.x == x) && (A.y == y)) return true; else return false;

Jawny this #include <iostream> using namespace std; class Punkt { private: int x, y; public: Punkt(int wspx=0, int wspy=0); void wypisz() const; bool rowne(const Punkt& ); ~Punkt(){; ; Punkt::Punkt(int wspx, int wspy){ x = wspx; y = wspy; void Punkt::wypisz() const{ cout << "(" << x << ", " << y << ")\r\n"; bool Punkt::rowne(const Punkt& A){ if ((A.x == this->x) && (A.y == this->y)) return true; else return false;

Użycie klasy int main() { int x, y; cout << "\npodaj wspolrzedne punktu A: \n"; cout << "x = "; cin >> x ; cout << "y = "; cin >> y; Punkt *A = new Punkt(x, y); cout << "Oto punkt: A"; A->wypisz(); cout << "Podaj wspolrzedne punktu B: \n"; cout << "x = "; cin >> x ; cout << "y = "; cin >> y; Punkt *B = new Punkt(x, y); cout << "Oto punkt: B"; B->wypisz(); if ( (A->rowne(*B)) == true) cout<< "Punkty są identyczne! \n"; else cout<< "Punkty są różne! \n"; delete A; delete B; return 0;

Użycie klasy Podaj wspolrzedne punktu A: x = 1 y = 1 Oto punkt: A(1, 1) Podaj wspolrzedne punktu B: x = 1 y = 1 Oto punkt: B(1, 1) Punkty są identyczne!

Użycie klasy Podaj wspolrzedne punktu A: x = 1 y = 1 Oto punkt: A(1, 1) Podaj wspolrzedne punktu B: x = 2 y = 2 Oto punkt: B(2, 2) Punkty są różne!

Użycie klasy #include <iostream> using namespace std; class Punkt { private: int x, y; public: Punkt(int wspx=0, int wspy=0); void wypisz() const; bool rowne(const Punkt& ); const Punkt& wyzej(const Punkt& ); ~Punkt(){; ; Punkt::Punkt(int wspx, int wspy){x = wspx; y = wspy; void Punkt::wypisz() const{ cout << "(" << x << ", " << y << ")\r\n"; bool Punkt::rowne(const Punkt& A){ if ((A.x == this->x) && (A.y == this->y)) return true; else return false; const Punkt& Punkt::wyzej(const Punkt& A){ if ((A.y < y)) return *this; else return A;

Użycie klasy int main() { int x, y; cout << "\npodaj wspolrzedne punktu A: \n"; cout << "x = "; cin >> x ; cout << "y = "; cin >> y; Punkt *A = new Punkt(x, y); cout << "Oto punkt: A"; A->wypisz(); cout << "Podaj wspolrzedne punktu B: \n"; cout << "x = "; cin >> x ; cout << "y = "; cin >> y; Punkt *B = new Punkt(x, y); cout << "Oto punkt: B"; B->wypisz(); if ( A->rowne(*B)) cout<< "Punkty są identyczne! \n"; else cout<< "Punkty są różne! \n"; //Domyślny konstruktor kopiujacy. Punkt C = A->wyzej(*B); if ( C.rowne(*A) ) cout<< "A lezy wyżej niż B! \n"; else cout<< "B lezy wyżej niż A! \n"; delete A; delete B; return 0;

Przyklad 1 Uwaga! Jeśli chcemy tworzyć tablice obiektów danej klasy, to musi być zdefiniowany konstruktor domyślny. int main() { Punkt Tab[4]; int x, y; for (int i=0 ; i<4 ; i++ ) { cout << "\npodaj wspolrzedne punktu: \n"; cout << "x = "; cin >> x ; cout << "y = "; cin >> y; Tab[i]=Punkt(x, y); for (int i=0 ; i<4 ; i++ ) { cout << "Oto punkt Tab["<< i << "] : "; Tab[i].wypisz(); return 0;

Przyklad 2 int main() { Punkt *Tab = new Punkt[4]; int x, y; for (int i=0 ; i<4 ; i++ ) { cout << "\npodaj wspolrzedne punktu: \n"; cout << "x = "; cin >> x ; cout << "y = "; cin >> y; Tab[i]=Punkt(x, y); for (int i=0 ; i<4 ; i++ ) { cout << "Oto punkt Tab["<< i << "] : "; Tab[i].wypisz(); delete []Tab; return 0;