Spis treści PROGRAMOWANIE OBIEKTOWE W JĘZYKU C++: KLASY I OBIEKTY, DANE I FUNKCJE SKŁADOWE, PRAWA DOSTĘPU, KONSTRUKTORY I DESTRUKTORY.

Podobne dokumenty
Spis treści PROGRAMOWANIE OBIEKTOWE W JĘZYKU C++: FUNKCJE ZAPRZYJAŹNIONE Z KLASĄ, PRZEŁADOWANIE OPERATORÓW. Informatyka 2

Spis treści JĘZYK C - ZAGNIEŻDŻANIE IF-ELSE, OPERATOR WARUNKOWY. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

Spis treści JĘZYK C - PRZEKAZYWANIE PARAMETRÓW DO FUNKCJI, REKURENCJA. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

Spis treści JĘZYK C - ZAGNIEŻDŻANIE IF-ELSE, OPERATOR WARUNKOWY. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

Spis treści JĘZYK C - INSTRUKCJA WARUNKOWA IF, OPERATORY RELACYJNE I LOGICZNE, WYRAŻENIA LOGICZNE. Informatyka 1

Spis treści JĘZYK C - ZAGNIEŻDŻANIE IF-ELSE, OPERATOR WARUNKOWY. Metodyki i techniki programowania

Spis treści JĘZYK C - OPERATORY BITOWE. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF32

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

Spis treści JĘZYK C - INSTRUKCJA SWITCH, OPERATORY BITOWE. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF05

Spis treści JĘZYK C - ŚLEDZENIE WYKONANIA PROGRAMU, DEBUGGER. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

Spis treści JĘZYK C - OPERATORY RELACYJNE I LOGICZNE, WYRAŻENIA LOGICZNE, INSTRUKCJA WARUNKOWA IF. Informatyka 1

Spis treści PLIKI BINARNE W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF23

Spis treści JĘZYK C - PRZEKAZYWANIE PARAMETRÓW DO FUNKCJI, REKURENCJA. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

dr inż. Jarosław Forenc

Spis treści JĘZYK C - INSTRUKCJA WARUNKOWA IF, OPERATORY RELACYJNE I LOGICZNE, WYRAŻENIA LOGICZNE. Metodyki i techniki programowania

Spis treści PLIKI BINARNE W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF23

Spis treści JĘZYK C - FUNKCJE. Metodyki i techniki programowania. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia MITP10

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

BHP JĘZYK C - INSTRUKCJE ITERACYJNE

Spis treści TRYB GRAFICZNY SYSTEMU WINDOWS - PODSTAWY OBSŁUGI WYBRANEGO ŚRODOWISKA PROGRAMISTYCZNEGO. Informatyka 2

Informatyka 2. Informatyka 2. Wykład nr 1 ( ) Dane podstawowe. - Wydział Elektryczny. Politechnika Białostocka. Program wykładu (1/2)

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

Podstawy Programowania Obiektowego

Podstawy algorytmiki i programowania - wykład 4 C-struktury

dr inż. Jarosław Forenc

Wykład 8: klasy cz. 4

Spis treści OBSŁUGA PLIKÓW W JĘZYKU C++ Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF32

Spis treści JĘZYK C - PLIKI BINARNE. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF30

Wykład 5: Klasy cz. 3

Spis treści WSKAŹNIKI. DYNAMICZNY PRZYDZIAŁ PAMIĘCI W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

Spis treści JĘZYK C - TABLICE DWUWYMIAROWE, OPERACJE NA TABLICACH. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

dr inż. Jarosław Forenc

Spis treści JĘZYK C - TABLICE JEDNOWYMIAROWE. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF05Z

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

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

Spis treści JĘZYK C - INSTRUKCJA WARUNKOWA IF, OPERATORY RELACYJNE I LOGICZNE, WYRAŻENIA LOGICZNE, ZAGNIEŻDŻANIE IF-ELSE.

Spis treści TRYB GRAFICZNY SYSTEMU WINDOWS - PODSTAWY OBSŁUGI WYBRANEGO ŚRODOWISKA PROGRAMISTYCZNEGO, TWORZENIE INTERFEJSU UŻYTKOWNIKA.

Do czego służą klasy?

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

TEMAT : KLASY DZIEDZICZENIE

Spis treści OPERACJE WEJŚCIA-WYJŚCIA W JĘZYKU C++. STEROWANIE FORMATEM, MANIPULATORY. Informatyka 2

Spis treści JĘZYK C - TABLICE DWU- I WIELOWYMIAROWE, OPERACJE NA TABLICACH. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

Języki i paradygmaty programowania

Zaliczenie przedmiotu:

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

Spis treści JĘZYK C - TABLICE DWUWYMIAROWE, OPERACJE NA TABLICACH. Metodyki i techniki programowania

Podstawy Programowania Obiektowego

Rozdział 4 KLASY, OBIEKTY, METODY

Do czego służą klasy?

Struktury Struktura polami struct struct struct struct

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

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 1. Wprowadzenie, środowisko programistyczne, pierwsze programy

13 JĘZYK C - OPERATOR WARUNKOWY,

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

Programowanie, część I

Podstawy Programowania

Podstawy programowania. Wykład: 12. Struktury, unie, pola bitowe. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

Programowanie komputerowe. Zajęcia 7

Informatyka II Laboratorium 3 : Programowania obiektowe C++ - dziedziczenie

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

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

Programowanie - wykład 4

Wstęp do Programowania 2

KLASY cz.1. Dorota Pylak

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

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

Informatyka 2. Wykład nr 3 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

PARADYGMATY PROGRAMOWANIA Wykład 4

Materiały do zajęć VII

Mechanizm dziedziczenia

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

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

Paostwowa Wyższa Szkoła Zawodowa w Płocku Dariusz Wardowski

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

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

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

Laboratorium 1 - Programowanie proceduralne i obiektowe

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

Aplikacje w środowisku Java

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

#include <iostream> using namespace std; void ela(int); int main( ); { Funkcja 3. return 0; }

Wstęp do programowania. Wykład 1

Wstęp do programowania

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

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

Programowanie obiektowe w języku C++ Zarządzanie procesami. dr inż. Jarosław Forenc. Przeładowanie (przeciążanie) operatorów

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

Podstawy algorytmiki i programowania - wykład 5 C-struktury cd.

Język C++ Programowanie obiektowe

Wstęp do informatyki- wykład 11 Funkcje

BADANIE ROZKŁADU TEMPERATURY W PIECU PLANITERM

Język C++ zajęcia nr 2

Wykład 1: Wskaźniki i zmienne dynamiczne

C-struktury wykład. Dorota Pylak

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

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

int suma; pralka czerwona; // definicja egzemplarza obiektu pralka * wskaŝ; // definicja wskaźnika pralka & ruda = czerwona; // definicja referencji

Transkrypt:

Politechnika Białostocka Wydział Elektryczny Katedra Elektrotechniki Teoretycznej i Metrologii Instrukcja do pracowni specjalistycznej z przedmiotu Informatyka 2 Kod przedmiotu: ES1C300 016 (studia stacjonarne) PROGRAMOWANIE OBIEKTOWE W JĘZYKU C++: KLASY I OBIEKTY, DANE I FUNKCJE SKŁADOWE, PRAWA DOSTĘPU, KONSTRUKTORY I DESTRUKTORY Spis treści 1. Opis stanowiska... 3 1.1. Stosowana aparatura... 3 1.2. Oprogramowanie... 3 2. Wiadomości teoretyczne... 3 2.1. Podstawowe pojęcia programowania obiektowego... 3 2.2. Definicja i składniki klasy... 4 2.3. Prawa dostępu do składników klasy... 7 2.4. Definiowanie funkcji składowych klasy... 8 2.5. Wskaźnik this... 11 2.6. Konstruktor i destruktor... 11 3. Przebieg ćwiczenia... 15 4. Literatura... 17 5. Zagadnienia na zaliczenie... 18 6. Wymagania BHP... 18 Numer ćwiczenia INF26 Materiały dydaktyczne przeznaczone dla studentów Wydziału Elektrycznego PB. Autor: dr inż. Jarosław Forenc Białystok 2015 Wydział Elektryczny, Politechnika Białostocka, 2015 (wersja 1.3) Wszelkie prawa zastrzeżone. Żadna część tej publikacji nie może być kopiowana i odtwarzana w jakiejkolwiek formie i przy użyciu jakichkolwiek środków bez zgody posiadacza praw autorskich. Informatyka 2 2 z 19 Instrukcja INF26

1. Opis stanowiska 2.2. Definicja i składniki klasy Definicja klasy (Rys. 1) jest bardzo podobna do definicji struktury w języku C. 1.1. Stosowana aparatura Podczas zajęć wykorzystywany jest komputer klasy PC z systemem operacyjnym Microsoft Windows (XP/Vista/7). 1.2. Oprogramowanie Na komputerach zainstalowane jest środowisko programistyczne Microsoft Visual Studio 2008 Standard Edition lub Microsoft Visual Studio 2008 Express Edition zawierające kompilator Microsoft Visual C++ 2008. 2. Wiadomości teoretyczne 2.1. Podstawowe pojęcia programowania obiektowego W programowaniu obiektowym program traktowany jest jako zbiór obiektów odpowiadających obiektom świata rzeczywistego. Obiekty te mogą przetwarzać dane oraz komunikować się między sobą. Każdy obiekt opisany jest przez: - tożsamość - unikalna nazwa jednoznacznie identyfikująca obiekt w programie; - stan - dane obiektu zapisane w jego składnikach; - zachowania - operacje, które mogą być wykonane na obiekcie, określane przez funkcje składowe. Obiekt musi zawsze należeć do zdefiniowanej klasy. Klasa jest podstawowym elementem programu zorientowanego obiektowo. Definicja klasy tworzy jednocześnie nowy typ danych. W klasie umieszcza się definicje jej danych składowych (zbiór pól określających możliwe stany obiektu) oraz funkcji składowych (wykonujących operacje pozwalające na zmianę aktualnego stanu obiektu). Rys. 1. Definicja klasy w języku C++ Definicja klasy rozpoczyna się od słowa kluczowego class, po którym występuje jej nazwa. W stosunku do nazwy klasy obowiązują te same zasady, jak przy nazywaniu innych identyfikatorów. Pomiędzy nawiasami klamrowymi umieszcza się ciało klasy zawierające jej składniki - dane i funkcje składowe. Dane nazywane są także polami lub atrybutami, natomiast funkcje - metodami. Definicja klasy zakończona jest średnikiem (po zamykającym nawiasie klamrowym). Sama definicja klasy nie przydziela pamięci. Aby możliwe było przechowywanie danych należy zadeklarować zmienną danej klasy. Takie zmienne nazywa się obiektami. Deklaracja obiektu ma taką samą postać jak deklaracja zmiennej standardowego typu - należy podać nazwę klasy i nazwę obiektu, np. ; trojkat T1; trojkat *ptrt1; Informatyka 2 3 z 19 Instrukcja INF26 Informatyka 2 4 z 19 Instrukcja INF26

W powyższym fragmencie programu znajduje się definicja klasy trojkat opisującej trójkąty równoramienne oraz definicja funkcji main(). W funkcji main() zadeklarowano dwie zmienne. Zmienna T1 jest obiektem klasy trojkat, natomiast zmienna ptrt1 jest wskaźnikiem do obiektu klasy trojkat. Deklaracja danych składowych klasy wygląda tak samo, jak deklaracja pól w strukturach. Klasa trojkat zawiera dwie dane składowe: a - długość podstawy trójkąta, h - wysokość trójkąta. Identyfikator określa prawa dostępu do składnika klasy, które opisane są w dalszej części instrukcji. W definicji klasy nie można inicjalizować jej danych składowych. ; Do danych w klasie odwołujemy się w taki sam sposób, jak do pól struktury. obiekt.dana wskaźnik->dana W przypadku obiektów stosujemy operator bezpośredniego wyboru pola. (kropka), zaś w przypadku wskaźników do obiektów - operator pośredniego wyboru pola -> (strzałka). trojkat T1; trojkat *ptrt1; T1.a = 10; ptrt1 = &T1; ptrt1->h = 5; Oprócz danych składowych, w klasie mogą znajdować się także funkcje składowe. Funkcje wykonują operacje na danych składowych klasy. W poniższej klasie znajduje się deklaracja funkcji składowej zapisz(). Jest to tylko deklaracja (zapowiedź) funkcji, a nie jej definicja. void zapisz(float wart_a, float wart_h); ; Odwołania do funkcji klasy mają analogiczną postać, jak odwołania do jej danych. obiekt.funkcja(argumenty) wskaźnik->funkcja(argumenty) Wywołanie funkcji zapisz() może mieć jedną z poniższych postaci. trojkat T1; trojkat *ptrt1; T1.zapisz(10,5); // wywołanie funkcji ptrt1 = &T1; ptrt1->zapisz(10,5); // wywołanie funkcji Mówimy, że nastąpiło wywołanie funkcji zapisz() na rzecz obiektu T1 klasy trojkat. Deklaracje danych i funkcji mogą być umieszczane w klasie w dowolnej kolejności. Niezależnie od miejsca zdefiniowania składnika wewnątrz klasy jest on widoczny w całej definicji klasy. Informatyka 2 5 z 19 Instrukcja INF26 Informatyka 2 6 z 19 Instrukcja INF26

Jeśli w programie zostało zadeklarowanych kilka obiektów klasy, to w pamięci przydzielane jest miejsce dla danych każdego obiektu oddzielnie. Natomiast pamięć na funkcje jest przydzielana tylko jeden raz. 2.3. Prawa dostępu do składników klasy W języku C++ wyróżnia się trzy prawa dostępu do składników klasy: - private (prywatne) - oznacza, że funkcje i dane klasy dostępne są tylko z wnętrza klasy; dla danych oznacza to, że tylko funkcje będące składnikami klasy (oraz funkcje zaprzyjaźnione) mogą te dane czytać lub do nich coś zapisywać; dla funkcji oznacza to, że mogą one zostać wywołane tylko przez inne funkcje składowe tej klasy (oraz funkcje zaprzyjaźnione); - public (publiczne) - komponenty publiczne są ogólnie dostępne, można się do nich odwoływać z wnętrza klasy lub spoza klasy; - protected (zabezpieczone) - dostęp jest taki sam jak dla private, ale dodatkowo są one dostępne dla klas wywodzących się od tej klasy. Etykiety private, public, protected można umieszczać w dowolnej kolejności. Etykiety mogą powtarzać się. void zapisz(float wart_a, float wart_h); private: void drukuj(); float pole(); float obwod(); ; Jeśli nie określono praw dostępu, to domyślnie składowe klasy są prywatne. W powyższym przykładzie dotyczy to danych składowych a i h. 2.4. Definiowanie funkcji składowych klasy Definicja funkcji składowej klasy może być umieszczona wewnątrz definicji klasy lub poza klasą. W pierwszym przypadku struktura klasy jest następująca: class nazwa typ funkcja(parametry) instrukcje; ; W poniższym przykładzie w definicji klasy trojkat umieszczono definicję funkcji zapisz(). Funkcja inicjalizuje dane składowe obiektów klasy. void zapisz(float wart_a, float wart_h) a = wart_a; h = wart_h; ; W drugim przypadku w definicji klasy umieszczono tylko deklarację funkcji, natomiast jej definicja znajduje się poza klasą. class nazwa typ funkcja(parametry); ; typ nazwa::funkcja(parametry) instrukcje; Informatyka 2 7 z 19 Instrukcja INF26 Informatyka 2 8 z 19 Instrukcja INF26

W definicji funkcji, przed jej nazwą, wpisana jest nazwa klasy (nazwa) oraz operator zakresu (::). Operator zakresu pokazuje do jakiej klasy należy dana funkcja, gdyż w jednym programie może być zdefiniowanych wiele klas, a w każdej z nich mogą znajdować się funkcje o takich samych nazwach. W poniższym przykładzie definicja funkcji zapisz() jest umieszczona poza definicją klasy trojkat. void zapisz(float wart_a, float wart_h); ; void trojkat::zapisz(float wart_a, float wart_h) a = wart_a; h = wart_h; Funkcja zdefiniowana wewnątrz klasy jest funkcją inline. Oznacza to, że podczas kompilacji programu w każdym miejscu, gdzie występuje wywołanie funkcji zostanie wstawiony bezpośrednio jej kod. Zaleca się, aby ciało funkcji zdefiniowanej wewnątrz klasy miało nie więcej niż dwie/trzy linie kodu. W poniższym przykładzie pokazano program wraz z definicją całej klasy trojkat. Klasa zawiera dwie dane składowe (a, h) oraz cztery funkcje składowe. Funkcja zapisz() inicjalizuje dane składowe klasy. Funkcja drukuj() wyświetla dane na ekranie. Funkcja pole() oblicza pole trójkąta, zaś funkcja obwod() oblicza obwód trójkąta. Definicje funkcji zapisz() i drukuj() zostały umieszczone w definicji klasy, natomiast definicje funkcji pole() i obwod() - poza definicją klasy. Program zawierający definicję klasy trojkat. void zapisz(float wart_a, float wart_h) a = wart_a; h = wart_h; void drukuj() cout << "<a=" << a << ",h=" << h << ">"; float pole(); float obwod(); ; float trojkat::pole() return a*h/2; float trojkat::obwod() return a + sqrt(h*h + (a/2)*(a/2)); trojkat T1; float wart_a, wart_h; cout << "Podstawa: "; cin >> wart_a; cout << "Wysokosc: "; cin >> wart_h; cout << "---------------------" << endl; T1.zapisz(wart_a,wart_h); cout << "Trojkat: "; T1.drukuj(); cout << endl; #include <iostream> #include <cmath> using namespace std; cout << "Pole: " << T1.pole() << endl; cout << "Obwod: " << T1.obwod() << endl; Informatyka 2 9 z 19 Instrukcja INF26 Informatyka 2 10 z 19 Instrukcja INF26

Przykładowe wywołanie programu: Podstawa: 5 Wysokosc: 10 --------------------- Trojkat: <a=5,h=10> Pole: 25 Obwod: 15.3078 2.5. Wskaźnik this Funkcje składowe klasy wywoływane są zawsze na rzecz konkretnego obiektu tej klasy. Do wnętrza funkcji przekazywany jest niejawnie wskaźnik do tego obiektu. Tym adresem funkcja inicjalizuje swój wskaźnik zwany this. Zatem funkcja pole() z klasy trojkat ma w rzeczywistości postać: Po dodaniu do klasy konstruktora należy zmienić także sposób deklaracji obiektu T1 w funkcji main(). float wart_a, wart_h; cout << "Podstawa: "; cin >> wart_a; cout << "Wysokosc: "; cin >> wart_h; cout << "---------------------" << endl; trojkat T1(wart_a,wart_h);... float trojkat::pole() return this->a * this->h / 2; Po nazwie obiektu (T1), w nawiasach wpisywane są argumenty konstruktora (wart_a,wart_h). Dopuszczalne jest także jawne wywołanie konstruktora w deklaracji obiektu: 2.6. Konstruktor i destruktor Konstruktor jest specjalną funkcją składową klasy służącą najczęściej do nadania wartości początkowych obiektowi lub do dynamicznego przydzielenia pamięci (choć nie tylko). Wywoływany jest automatycznie w momencie tworzenia obiektu. Nazwa konstruktora jest taka sama, jak nazwa klasy. Dla konstruktora nie określa się typu zwracanej wartości (nie może tam wystąpić nawet void). W klasie trojkat konstruktor będzie wykonywał takie same operacje, jak funkcja zapisz(). Można zatem usunąć tę funkcję z definicji klasy i na jej miejsce wstawić konstruktor o poniższej postaci. trojkat(float wart_a, float wart_h) a = wart_a; h = wart_h; trojkat T1 = trojkat(wart_a,wart_h); Jeśli w klasie nie zostanie zdefiniowany żaden konstruktor, to kompilator automatycznie generuje konstruktor domyślny (domniemany). Taki konstruktor nie ma żadnych argumentów, nie wykonuje żadnych operacji, ale istnieje. Opisana sytuacja wystąpiła w programie zawierającym definicję klasy trojkat. Konstruktor ten był wywoływany w momencie tworzenia obiektu T1: trojkat T1; Dodanie do klasy dowolnego innego konstruktora powoduje, że konstruktor domyślny nie jest tworzony. W takim przypadku kompilacja programu zawierającego deklarację obiektu bez argumentów konstruktora (tak jak powyżej) zakończy się błędem i wyświetleniem komunikatu: error C2512: 'trojkat' : no appropriate default constructor available Informatyka 2 11 z 19 Instrukcja INF26 Informatyka 2 12 z 19 Instrukcja INF26

W klasie może być zdefiniowanych kilka konstruktorów. Muszą one różnić się między sobą liczbą lub typem argumentów. Definicja konstruktora domyślnego (bezargumentowego) może mieć następującą postać. ~trojkat(void) trojkat() a = 0; h = 0; Definiowanie kilku funkcji mających taką samą nazwę, ale różny typ lub liczbę argumentów nosi nazwę przeładowania (przeciążenia) nazwy funkcji. Przy przeładowaniu ważna jest tylko odmienność listy argumentów, natomiast typ wartości zwracanej przez funkcję nie jest uwzględniany. Konstruktor dwuargumentowy i bezargumentowy można zastąpić jednym konstruktorem poprzez wykorzystanie domyślnych wartości argumentów funkcji. trojkat(float wart_a = 0, float wart_h = 0) a = wart_a; h = wart_h; Jeśli podczas deklaracji obiektu nie zostaną podane żadne argumenty konstruktora, to zostaną przyjęte wartości domyślne (wart_a = 0, wart_h = 0). Podanie tylko jednego argumentu (wart_a) spowoduje, że drugi przyjmie wartość domyślną (wart_h = 0). Drugą specjalną funkcją składową klasy jest destruktor. Destruktor jest wywoływany wtedy, gdy obiekt jest likwidowany. Destruktor można wywołać jawnie, ale nie spowoduje on usunięcia obiektu. Jego nazwa jest taka sama jak nazwa klasy, ale umieszcza się przed nią znak ~ (tylda). Zadaniem destruktora jest posprzątanie po obiekcie, np. zwolnienie pamięci. Dla destruktora nie określa się typu zwracanej wartości, nie ma on także żadnych argumentów. W klasie trojkat destruktor może mieć następującą postać: Kolejny program zawiera definicję klasy test, w skład której wchodzi konstruktor i destruktor. Wywołanie konstruktora lub destruktora powoduje wyświetlenie odpowiedniego komunikatu na ekranie. Klasa testująca wywołanie konstruktora i destruktora. #include <iostream> #include <cstring> using namespace std; class test char name[10]; test(char *n) strcpy(name,n); cout << "Konstruktor: " << name << endl; ~test() cout << "Destruktor: " << name << endl; ; test t1("t1"), t2("t2"); // konstruktor t1 i t2 system("pause"); test t3("t3"); // konstruktor t3 system("pause"); // destruktor t3 system("pause"); // destruktor t2 i t1 Informatyka 2 13 z 19 Instrukcja INF26 Informatyka 2 14 z 19 Instrukcja INF26

Wynikiem działania programu będzie wyświetlenie informacji o wywołaniu konstruktora lub destruktora odpowiedniego obiektu: Konstruktor: t1 Konstruktor: t2 Aby kontynuować, naciśnij dowolny klawisz... Konstruktor: t3 Aby kontynuować, naciśnij dowolny klawisz... Destruktor: t3 Aby kontynuować, naciśnij dowolny klawisz... Destruktor: t2 Destruktor: t1 Aby kontynuować, naciśnij dowolny klawisz... 3. Przebieg ćwiczenia Na pracowni specjalistycznej należy wykonać zadania wskazane przez prowadzącego zajęcia. W różnych grupach mogą być wykonywane inne zadania. 1. Dana jest struktura TComplex opisująca liczbę zespoloną (Re - część rzeczywista liczby zespolonej, Im - część urojona liczby zespolonej). struct TComplex float Re; float Im; ; Napisz program zawierający funkcje: - suma() - oblicza i zwraca sumę dwóch liczb zespolonych; - iloczyn() - oblicza i zwraca iloczyn dwóch liczb zespolonych; - drukuj() - wyświetla liczbę zespoloną w formacie: Re +/-Im j, np. 5-3j, 0+1j. Stosując zdefiniowane funkcje, oblicz i wyświetl sumę oraz iloczyn liczb zespolonych z1 i z2 przedstawionych w tabeli 1. Tabela 1. Przykładowe dane wejściowe i prawidłowe wyniki do zadania 1 2. Napisz program zawierający klasę TComplex przeznaczoną do wykonywania operacji na liczbach zespolonych. Klasa powinna przechowywać jako dane prywatne: Re - część rzeczywista liczby zespolonej, Im - część urojona liczby zespolonej. Zdefiniuj następujące funkcje: - trzy konstruktory klasy TComplex: - bezargumentowy - zapisujący zero do obu danych składowych klasy; - jednoargumentowy - zapisujący część rzeczywistą liczby zespolonej (argument konstruktora) i zerujący część urojoną; - dwuargumentowy - zapisujący część rzeczywistą i urojoną liczby zespolonej (argumenty konstruktora); - wyświetlającą liczbę zespoloną w formacie: Re +/-Im j, np. 5-3j, 0+1j; - obliczającą i zwracającą sumę liczb zespolonych; - obliczającą i zwracającą różnicę liczb zespolonych; - obliczającą i zwracającą iloczyn liczb zespolonych; - obliczającą i zwracającą iloraz liczb zespolonych; - ConjComplex() - obliczającą i zwracająca liczbę zespoloną sprzężoną; - AbsComplex() - obliczającą i zwracającą modułu liczby zespolonej; - ArgComplexRad() - obliczającą i zwracającą argument liczby zespolonej w radianach; - ArgComplexDeg() - obliczającą i zwracającą argument liczby zespolonej w stopniach. Wywołaj zdefiniowane funkcje dla podanych liczb zespolonych: z1 = 2 + j4 z2 = 6 - j8 Sprawdź poprawność otrzymanych wyników z tabelą 2. Zastanów się, czy możliwe jest zastąpienie trzech konstruktorów jednym. z1 z2 z1 + z2 z1 * z2 2 + j4 6 - j8 8 - j4 44 + j8 Informatyka 2 15 z 19 Instrukcja INF26 Informatyka 2 16 z 19 Instrukcja INF26

Tabela 2. Poprawne wyniki do zadania 2 Operacja Wynik Operacja Wynik z1 + z2 8 - j4 z1 - z2-4 + j12 z1 * z2 44 + j8 z1 / z2-0,2 + j0,4 z1* 2 - j4 z2* 6 + j8 Abs(z1) 4,472 Abs(z2) 10 ArgRad(z1) 1,107 ArgRad(z2) -0,927 ArgDeg(z1) 63,435 ArgDeg(z2) -53,13 3. Zdefiniuj klasę TPoint opisującą punkt w prostokątnym układzie współrzędnych. Klasa powinna przechowywać, jako pola prywatne, współrzędne X i Y punktu (typ float). Klasa powinna zawierać następujące funkcje: - konstruktor - zapisujący wartości obu współrzędnych; - funkcja wyświetlająca współrzędne punktu w postaci (X,Y); - funkcja Distance(): w wersji bezargumentowej - zwracająca odległość punktu od początku układu współrzędnych; w wersji z jednym argumentem typu TPoint - zwracająca odległość między punktami; - funkcja Move(dx,dy) - przesuwająca położeniu punktu o wartość dx w kierunku osi OX i o wartość dy - w kierunku osi OY. Pokaż w programie zastosowanie wszystkich zdefiniowanych funkcji. 4. Literatura [1] Grębosz J.: Symfonia C++ standard: programowanie w języku C++ orientowane obiektowo. Tom 1 i 2. Wydawnictwo Edition 2000, Kraków, 2008. [2] Stroustrup B.: Programowanie. Teoria i praktyka z wykorzystaniem C++. Wydanie II poprawione. Helion, Gliwice, 2013. [3] Eckel B.: Thinking in C++. Edycja polska. Helion, Gliwice, 2002. [4] Prata S.: Język C++. Szkoła programowania. Wydanie VI. Helion, Gliwice, 2012. [5] Stroustrup B.: Język C++. Kompendium wiedzy. Helion, Gliwice, 2014. [6] Wileczek R.: Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows. Helion, Gliwice, 2009. [7] http://www.cplusplus.com/reference/ - C++ Reference 5. Zagadnienia na zaliczenie 1. Opisz definicję i składniki klasy w języku C++. 2. Scharakteryzuj prawa dostępu do składników klasy. 3. Wyjaśnij, czym różni się definiowanie funkcji składowych w definicji klasy i poza nią. 4. Co to jest i po co stosuje się konstruktory i destruktory? 6. Wymagania BHP Warunkiem przystąpienia do praktycznej realizacji ćwiczenia jest zapoznanie się z instrukcją BHP i instrukcją przeciw pożarową oraz przestrzeganie zasad w nich zawartych. W trakcie zajęć laboratoryjnych należy przestrzegać następujących zasad. - Sprawdzić, czy urządzenia dostępne na stanowisku laboratoryjnym są w stanie kompletnym, nie wskazującym na fizyczne uszkodzenie. - Jeżeli istnieje taka możliwość, należy dostosować warunki stanowiska do własnych potrzeb, ze względu na ergonomię. Monitor komputera ustawić w sposób zapewniający stałą i wygodną obserwację dla wszystkich członków zespołu. - Sprawdzić prawidłowość połączeń urządzeń. - Załączenie komputera może nastąpić po wyrażeniu zgody przez prowadzącego. Informatyka 2 17 z 19 Instrukcja INF26 Informatyka 2 18 z 19 Instrukcja INF26

- W trakcie pracy z komputerem zabronione jest spożywanie posiłków i picie napojów. - W przypadku zakończenia pracy należy zakończyć sesję przez wydanie polecenia wylogowania. Zamknięcie systemu operacyjnego może się odbywać tylko na wyraźne polecenie prowadzącego. - Zabronione jest dokonywanie jakichkolwiek przełączeń oraz wymiana elementów składowych stanowiska. - Zabroniona jest zmiana konfiguracji komputera, w tym systemu operacyjnego i programów użytkowych, która nie wynika z programu zajęć i nie jest wykonywana w porozumieniu z prowadzącym zajęcia. - W przypadku zaniku napięcia zasilającego należy niezwłocznie wyłączyć wszystkie urządzenia. - Stwierdzone wszelkie braki w wyposażeniu stanowiska oraz nieprawidłowości w funkcjonowaniu sprzętu należy przekazywać prowadzącemu zajęcia. - Zabrania się samodzielnego włączania, manipulowania i korzystania z urządzeń nie należących do danego ćwiczenia. - W przypadku wystąpienia porażenia prądem elektrycznym należy niezwłocznie wyłączyć zasilanie stanowiska. Przed odłączeniem napięcia nie dotykać porażonego. Informatyka 2 19 z 19 Instrukcja INF26