Do czego służą klasy?

Podobne dokumenty
Do czego służą klasy?

KLASY cz.1. Dorota Pylak

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

Podstawy Programowania Obiektowego

Technologie i usługi internetowe cz. 2

TEMAT : KLASY DZIEDZICZENIE

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

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

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

Definiowanie własnych klas

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

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

Programowanie obiektowe - 1.

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

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

Pola i metody statyczne. Klasy zawierające pola i metody statyczne

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

Wstęp do programowania obiektowego. Wykład 2

Programowanie komputerowe. Zajęcia 7

Różne właściwości. Różne właściwości. Różne właściwości. C++ - klasy. C++ - klasy C++ - KLASY

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

C-struktury wykład. Dorota Pylak

Wstęp do Programowania 2

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

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

referencje Wykład 2. Programowanie (język C++) Referencje (1) int Num = 50; zdefiniowano zmienną Num (typu int) nadając jej wartość początkową 50.

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

Wykład 8: klasy cz. 4

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

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

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

Podstawy Języka Java

Technologie obiektowe

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

C-struktury wykład. Dorota Pylak

Materiały do zajęć VII

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

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

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

Laboratorium 1 - Programowanie proceduralne i obiektowe

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

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

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.

Mechanizm dziedziczenia

Podstawy Programowania Obiektowego

Typy klasowe (klasy) 1. Programowanie obiektowe. 2. Założenia paradygmatu obiektowego:

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

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

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

Dziedziczenie. Ogólna postać dziedziczenia klas:

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

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

PARADYGMATY PROGRAMOWANIA Wykład 2

Rozdział 4 KLASY, OBIEKTY, METODY

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

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

Programowanie obiektowe

Struktury Struktura polami struct struct struct struct

Definiowanie własnych klas

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

Wykład 5: Klasy cz. 3

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.

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

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

Wprowadzenie do szablonów szablony funkcji

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Wprowadzenie do szablonów szablony funkcji

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

Szablony funkcji i szablony klas

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

Podstawy programowania skrót z wykładów:

class Student Deklaracja klasy Osoba: Deklaracja klasy Student:

Programowanie w Javie 1 Wykład i Ćwiczenia 2 Przegląd podstawowych klas w Javie (elementy programowania obiektowego) Płock, 16 października 2013 r.

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

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

Programowanie obiektowe. Materiały przygotował: mgr inż. Wojciech Frohmberg

Język C++ zajęcia nr 2

Wprowadzenie do programowanie obiektowego w języku C++

Programowanie obiektowe

Programowanie, część I

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

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

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

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

Wstęp do programowania

C++ Przeładowanie operatorów i wzorce w klasach

Dziedziczenie jednobazowe, poliformizm

Programowanie II. Lista 3. Modyfikatory dostępu plik TKLientBanku.h

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

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

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

Podstawy programowania. Wykład PASCAL. Wstęp do programowania obiektowego. dr Artur Bartoszewski - Podstawy programowania, sem.

PARADYGMATY PROGRAMOWANIA Wykład 4

Mechanizm dziedziczenia

Programowanie obiektowe

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

Wykład 4: Klasy i Metody

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

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

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

Transkrypt:

KLASY Dorota Pylak

2 Do czego służą klasy? W programowaniu obiektowym posługujemy się obiektami. Obiekty charakteryzują się: cechami (inaczej - atrybutami lub stanami) operacjami, które na nich można wykonywać (inaczej - usługami, które są obowiązane świadczyć; inaczej - poleceniami czy komunikatami, które można im wydawać czy do nich posyłać) Obiekty w programie odzwierciedlają rzeczywiste obiekty, które mogą być konkretne (fizyczne) lub abstrakcyjne. Na przykład, gdyby nasz program symulował ruch uliczny, to potrzebowalibyśmy takich obiektów jak samochody. Każdy z obiektów- samochodów ma jakieś cechy (atrybuty, stany) np. ciężar, wysokość, aktualną prędkość jazdy oraz udostępnia jakieś usługi, wykonanie których możemy mu zlecić za pomocą odpowiednich poleceń np. włącz się do ruchu, zatrzymaj się, zwiększ prędkość skręć w lewo itp.

3 Do czego służą klasy? Skąd wiemy jakie atrybuty mają obiekty-samochody? Skąd wiemy jakie polecenia możemy do nich posyłać? O tym decyduje definicja klasy samochodów, którą nasz program musi albo skądś pobrać albo sam dostarczyć. Klasa - to opis takich cech grupy podobnych obiektów, które są dla nich niezmienne (np. zestaw atrybutów i usług(funkcji), które mogą świadczyć, wykonywać) Można by więc symbolicznie zapisać coś takiego: Klasa Samochod atrybuty: ciężar wysokość aktualna prędkość usługi - operacje: włącz_się_do_ruchu zatrzymaj_się zwiększ_prędkość skręć_w_lewo

Do czego służą klasy? 4 Dopiero teraz będziemy wiedzieć co charakteryzuje każdy obiekt-samochód w naszym programie i co możemy z każdym takim obiektem robić w programie. Warto zwrócić uwagę, że dzięki zastosowaniu klas mamy możliwość programowania w języku problemu (np. symulacji ruchu samochodów). Klasy pozwalają nam wprowadzać do języka nowe typy danych (takie jak Samochod) z właściwymi dla nich zestawami dopuszczalnych wartości (tu: możliwe wartości atrybutów, takich jak ciężar, wysokość, aktualna prędkość jazdy) i dopuszczalnymi operacjami. Klasa jest uogólnieniem typu: w zasadzie klasa zachowuje się dokładnie jak typ wbudowany Nie należy myśleć, że np. definicja klasy samochodów jest ustalona i jedyna. Konkretne obiekty samochody możemy przecież w naszych programach opisywać bardzo różnie w zależności od tego jaki problem ma do rozwiązania nasz program. Np. w przypadku symulacji ruchu ulicznego nie będzie pewnie nas interesować taka cecha samochodu jak kolor (zatem ten atrybut nie znajdzie się w definicji klasy jako wspólna cecha wszystkich obiektów samochodów). Ale być może gdyby nasz program zajmował się zagadnieniem sprzedaży samochodów, to cecha "kolor" znalazłaby się jako istotny atrybut w definicji klasy. A zamiast operacji: włącz się_do ruchu itp. potrzebne byłyby całkiem inne operacje na obiektach (np. sprzedaj).

Do czego służą klasy? 5 Klasy mogą też odzwierciedlać obiekty abstrakcyjne (np. matematyczne) Rozważmy np. pary liczb całkowitych. W naszym programie odzwierciedlamy właściwości tych obiektów za pomocą definicji klasy par liczb całkowitych. Taka definicja określa atrybuty pary oraz operacje, które na parach można wykonywać. Klasa Para atrybuty: pierwsza_liczba_pary druga_liczba_pary usługi - operacje: operacja_inicjacji // zainicjuj parę dwoma podanymi liczbami set add show // ustal wartość pary na podstawie wartości innej pary // dodaj do pary inną parę // pokaż parę Znowu: ta definicja nie określa wartości cech pojedynczego obiektu. Możemy mieć wiele obiektów par-liczb całkowitych. Każdy obiekt para ma podane atrybuty (ale np. różne ich wartości) oraz na każdym możemy wykonywać podane operacje (set,add itd).

Definicja klasy Definicja klasy określa: zestaw cech (atrybutów) obiektów klasy, zestaw operacji, które można wykonywać na obiektach klasy specjalne operacje, które pozwalają na inicjowanie obiektów przy ich tworzeniu W wielu językach obiektowych (w tym w C++, Javie): wspólne cechy (atrybuty) obiektów nazywają się polami klasy, operacje (polecenia) - nazywają się metodami, specjalne operacje inicjacji - nazywają się konstruktorami. Definicja klasy stanowi zatem definicję: pól, metod, i konstruktorów. Klasę winniśmy traktować jako swoisty wzorzec, szablon opisujący powstawanie obiektów (konstruktory), ich cechy (pola) oraz sposób komunikowania się z obiektami (metody). Pola, metody i konstruktory nazywamy składowymi klasy. Klasa stanowi też osobną przestrzeń nazw: wewnątrz klasy można definiować nowe typy. Nazwy tak zdefiniowanych typów należeć będą do zasięgu klasy: można się do nich odwołać z zewnątrz poprzez nazwę kwalifikowaną z zastosowaniem operatora zasięgu ' ::'. 6

Definicja klasy 7 Definicję klasy piszemy zwykle na zewnątrz innych klas i funkcji (nie jest to jednak wymaganie języka: można, choć rzadko bywa to przydatne, definiować klasę wewnątrz funkcji). Sama definicja ma postać lub class Klasa { }; // składowe klasy: pola, metody... struct Klasa { }; // składowe klasy: pola, metody... Nie należy zapominać o średniku kończącym definicję klasy. Nowy typ jest już zdefiniowany po napotkaniu zamykającego nawiasu klamrowego, zatem za nawiasem, a przed średnikiem można umieścić definicje obiektów właśnie zdefiniowanej klasy; na przykład po class Klasa { //... } x, y, z; zdefiniowana byłaby klasa Klasa i utworzone trzy obiekty tej klasy o nazwach x, y i z (pod warunkiem, że istnieje w klasie/strukturze publiczny konstruktor domyślny).

Dostępność składowych 8 Wszystkie składowe klasy są widoczne wewnątrz klasy. Oznacza to, że mają do nich dostęp funkcje (metody) zadeklarowane jako funkcje składowe danej klasy. Mogą jednak mieć różny poziom dostępności z zewnątrz, a więc z funkcji które nie są składowymi danej klasy: poziom dostępności jest określany jednym ze słów kluczowych: public, private, lub protected.. Definicję klasy dzieli się na tzw. sekcje: każda sekcja rozpoczyna się od jednego z tych słów kluczowych z następującym po nim dwukropkiem. Sekcja rozciąga się do końca definicji klasy lub do rozpoczęcia innej sekcji, na przykład: 1. class Klasa { 2. int s1; 3. public: //sekcja publiczna 4. int s2; 5. double d2; 6. private: //sekcja prywatna 7. double s3; 8. void fun3(int,double); 9. public: //sekcja publiczna 10. int s4; 11. char c4; 12. };

Dostępność składowych 9 Pole s1 zostało zdefiniowane przed pojawieniem się jakiegokolwiek specyfikatora poziomu dostępności. Przyjmuje się wtedy dostępność domyślną, według następującej zasady: Klasy można definiować w C++ za pomocą słowa kluczowego class lub struct. Jeśli użyliśmy słowa class, to domyślnie składowe są prywatne (private), jeśli użyliśmy słowa struct, to domyślnie składowe są publiczne (public). Innych różnic między klasami i strukturami w C++ nie ma. Pod względem dostępności składowe dzielą się zatem na: publiczne (public), których nazwy mogą być używane we wszystkich miejscach programu, gdzie widoczna jest definicja klasy; prywatne (private), których nazwy mogą być używane tylko przez funkcje, które same są składowymi tej samej klasy, lub funkcje z daną klasą zaprzyjaźnione (o czym później); chronione (protected), których nazwy mogą być używane tylko przez funkcje, które same są składowymi tej samej klasy, funkcje z daną klasą zaprzyjaźnione, a także funkcje składowe i zaprzyjaźnione klas pochodnych (dziedziczących z) danej klasy.

Pola klasy Pola klasy definiują dane, z jakich składać się będzie każdy obiekt klasy. Danymi tymi mogą być wielkości dowolnego typu wbudowanego lub zdefiniowanego w programie przez samego programistę lub autora biblioteki, z której program korzysta. Niestatyczne pole klasy nie może być typu, który dana klasa właśnie definiuje, natomiast może mieć typ wskaźnika do obiektu tejże klasy. Deklaracje pól mają postać definicji zmiennych: class Klasa { }; int k1, k2; double x, y; //... Zadeklarowanie pola (niestatycznego) oznacza, że w każdym obiekcie definiowanej klasy będzie utworzona zmienna o nazwie i typie określonym w deklaracji. Sama definicja klasy nie powoduje utworzenia żadnych obiektów. Pola można deklarować wewnątrz klasy w dowolnej kolejności i miejscu przed lub po metodach; ich zakresem jest cała klasa, a nie tylko fragment następujący leksykalnie po definicji. Kolejność definicji pól ma jednak znaczenie podczas inicjowania i niszczenia (destrukcji) pola są inicjowane w kolejności takiej, w jakiej były zadeklarowane, a usuwane w kolejności odwrotnej. 10

Metody Tak jak pola klasy opisują dane, które zawarte będą w każdym obiekcie klasy, tak metody definiują zbiór operacji, jakie na tych danych będzie można wykonywać. Metody są wyrażone w języku jako niestatyczne funkcje o pewnych szczególnych własnościach (co to znaczy niestatyczne, wyjaśnimy później). Deklaracja metody ma postać deklaracji funkcji, tyle że zawarta jest wewnątrz definicji klasy i ma ona dostęp do pól klasy- zatem nie musimy go przekazywać przez parametr. Tak jak dla zwykłych funkcji, deklaracja może być połączona z definicją. Można też, z podobnym skutkiem, wewnątrz klasy tylko metodę zadeklarować, a zdefiniować ją już poza klasą, w definicji odwołując się do niej poprzez nazwę kwalifikowaną operatorem zakresu klasy (np. Klasa::), bo przecież mogłoby istnieć wiele niezwiązanych ze sobą metod o tej samej nazwie w różnych klasach. Istnieje pewna różnica między tymi sposobami: Jeśli funkcja (metoda, funkcja statyczna, konstruktor, destruktor) jest definiowana wewnątrz klasy, to domyślnie przyjmuje się dla niej modyfikator inline, czyli kompilator będzie próbował ją rozwijać(operacja ta może się nie powieść- kompilator może uznać to zadanie za zbyt trudne). Rozwijanie oznacza, że kod (instrukcje maszynowe) funkcji jest przez kompilator umieszczany w każdym miejscu pliku wykonywalnego, gdzie funkcja powinna, według treści programu, być wywołana. Jeśli metoda (ogólnie funkcja) jest w klasie tylko zadeklarowana, natomiast zdefiniowana jest poza klasą, to domyślnie nie będzie rozwijana, chyba że jawnie tego zażądamy w definicji korzystając z modyfikatora inline. 11

Metody 12 Metody, a więc funkcje składowe niestatyczne i nie będące konstruktorem, wywoływane są zawsze na rzecz konkretnego, istniejącego wcześniej obiektu klasy, której są składowymi. Wywołanie metody fun spoza klasy, a więc z funkcji która sama nie jest funkcją składową tej samej klasy, przybiera zatem jedną z postaci a.fun() pa->fun() gdzie a jest zmienną będącą obiektem tej klasy lub referencją do obiektu tej klasy, a pa jest wskaźnikiem wskazującym obiekt tej klasy. Zanim napiszemy pierwszy przykład przedstawimy: Podstawowe założenia paradygmatu obiektowego: Abstrakcja Każdy obiekt w systemie służy jako model abstrakcyjnego wykonawcy, który może wykonywać pracę, opisywać i zmieniać swój stan oraz komunikować się z innymi obiektami w systemie bez ujawniania, w jaki sposób zaimplementowano dane cechy. Hermetyzacja Czyli ukrywanie implementacji, enkapsulacja. Zapewnia, że obiekt nie może zmieniać stanu wewnętrznego innych obiektów w nieoczekiwany sposób. Tylko własne metody obiektu są uprawnione do zmiany jego stanu. Każdy typ obiektu prezentuje innym obiektom swój interfejs, który określa dopuszczalne metody współpracy.

13 Modyfikator const Do tej pory modyfikatora const używaliśmy: przy deklaracji stałych, np. const int NMAX=100; przy przekazywaniu parametrów przez stałą referencję do funkcji np. void f(const string &s) Poznamy teraz nowe zastosowanie modyfikatora const w deklaracjach metod składowych w klasach. Przykład: class A { }; private: int X; public: int GetX () const; Taka deklaracja mówi kompilatorowi, iż w środku funkcji GetX() na pewno nie zmienimy żadnej danej z instancji klasy A. Ta informacja pozwala kompilatorowi lepiej optymalizować kod programu, gdyż pozwala np. przechować w rejestrach wartości danych obiektu. Bez modyfikatora const, po powrocie z funkcji GetX() kompilator musi odświeżyć wartości w takich rejestrach, zaś mając gwarancje, że GetX() nic nie zmienia w obiekcie - nie musi tego robić. Drugim powodem jest fakt, że programista czytając kod źródłowy programu może, bez zaglądania w kod funkcji GetX(), być pewnym, że nie modyfikuje ona obiektu. Może to ułatwić testowanie programu i przyspiesza poszukiwanie błędu, szczególnie w dużych i złożonych programach.

Przykład 14 Napisz deklarację klasy Wektor w której przechowujemy następujące informacje o wektorze w przestrzeni: współrzędne x, y, z oraz metody: metoda ustaw ustalająca pola prywatne klasy zgodnie z wartościami jej parametrów metody podajx, podajy i podajz zwracające wartości pól prywatnych klasy metoda il_skalarny zwracająca iloczyn skalarny wektora, będącego parametrem aktualnym dla którego jest wykonywana metoda, z wektorem przekazanym jako parametr metoda wyswietl wyświetlająca na ekranie współrzędne wektora

Przykład definicje funkcji w klasie 15 #include <iostream> #include <iomanip> using namespace std; class Wektor { double x, y, z; //prywatne pola klasy public: //sekcja publiczna //metoda ustalająca wartości pól klasy zgodnie z przekazanymi parametrami void ustaw(double xx, double yy, double zz) { //nadajemy polom klasy wartości przekazane przez parametry //metoda jako składowa klasy ma dostęp do pól prywatnych x = xx; y = yy; z = zz; } //metody zwracające wartości poszczególnych pól //pola są prywatne więc spoza klasy nie mamy do nich dostępu //const ponieważ funkcja nie zmienia pól klasy double podajx() const { return x; }

Przykład definicje funkcji w klasie 16 double podajy() const { return y; } double podajz() const { return z; } //f-cja obliczająca iloczyn skalarny klasy na rzecz której wywoływana jest //metoda i klasy przekazanej przez parametr double il_skalarny(const Wektor& w) const { //składowa klasy, ma dostęp do prywatnych składowych x, y, z //zarówno klasy której jest metodą, jak i klasy przekazanej przez parametr return x*w.x + y*w.y + z*w.z; } void wyswietl() const //const bo f-cja nie zmienia pól klasy { cout<<fixed<<setprecision(1); cout<<"[ "<<x<<", "<<y<<", "<<z<<" ]"<<endl; } };

Przykład definicje funkcji w klasie int main() { Wektor w1, w2; //deklarujemy dwa obiekty (instancje) klasy Wektor //Składowe (pola i metody) niestatyczne (instancyjne) //zawsze wiążą się z istnieniem obiektu danej klasy w1.ustaw(1, 1, 2);//ustawiamy pola w w1, wywołując metodę ustaw dla w1 cout<<"w1= "; //pola x,y,z są prywatne, dostęp do nich mamy tylko przez metody klasy //cout<<w1.podajx(); //OK, metoda zwracająca wartość pola x //cout<<w1.x; //BŁĄD cout<<"[ "<<w1.podajx()<<", " <<w1.podajy()<<","<<w1.podajz()<<" ]"<<endl; } w2.ustaw(1,-1, 2); //ustawiamy pola w w2 cout<<"w2= "; w2.wyswietl(); cout << "w1*w2 = " << w1.il_skalarny(w2) << endl;//iloczyn skalarny return 0; 17