class Samochod { void Ruch(); }; class Amfibia : public Samochod { void Ruch(); // amfibie pływają };

Podobne dokumenty
Dziedziczenie ze wspólnej klasy bazowej. Amfibia

Owad():waga(1),jadowitosc(false) {cout<<"konstruktor domyslny owada\n";}

string Rodzaj[4]= {"TV ", "wieza ", "DVD ", "kino "}; string Producent[4]={"Phillips", "Sony ", "Sanyo ", "Samsung "};

Języki Programowania. Prowadząca: dr inż. Hanna Zbroszczyk. tel: Konsultacje: piątek:

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

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

Identyfikacje typu na etapie. wykonania (RTTI)

dr inż. Jarosław Forenc

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

Plik klasy. h deklaracje klas

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

Programowanie obiektowe w C++ Wykład 12

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

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

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

#include "stdafx.h" #include <iostream> #include "windows.h" using namespace std;

PARADYGMATY PROGRAMOWANIA Wykład 4

Wprowadzenie do programowanie obiektowego w języku C++

Składnia C++ Programowanie Obiektowe, część 3 Mateusz Cicheński

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

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

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

2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy

Programowanie Obiektowew języku C++ Zadania L9

Dziedziczenie & W slajdach są materiały zapożyczone z


Rzutowanie i konwersje

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM

Ssak::Ssak(Ssak& ref):waga(ref.ile_wazy()) {cout << "Konstruktor kopiujacy klasy Ssak...\n";} 1

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

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

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

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

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

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi

TEMAT : KLASY POLIMORFIZM

Listy powiązane zorientowane obiektowo

C++ - [4-7] Polimorfizm

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Dziedziczenie jednobazowe, poliformizm

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

Programowanie Obiektowew języku C++ Zadania L8

Programowanie obiektowe w języku

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 3. Instrukcje wyboru

Polimorfizm w pigułce

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

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.

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

Wstęp do Programowania 2

Programowanie w języku C++

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

Podstawy Programowania Obiektowego

Wyjątki (exceptions)

Zwracanie obiektu. Funkcja może zwracać obiekty: #include"stdafx.h #include <iostream> using namespace std; class samp { inti; public:

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

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

Programowanie obiektowe

Laboratorium 2. Funkcje wirtualne

Wstęp do Programowania 2

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

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

private - oznacza, że wszystkie elementy klasy bazowej zmieniają się w prywatne.

Programowanie komputerowe. Zajęcia 1

Informatyka. Wy-08 Klasy. mgr inż. Krzysztof Kołodziejczyk

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

Mechanizm dziedziczenia

Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

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

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

Techniki Programowania wskaźniki

Dziedziczenie. Ogólna postać dziedziczenia klas:

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

Programowanie obiektowe język C++

Środowisko programistyczne GEANT4

Język C++ wykład VIII

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

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

Operatory na rzecz typu TString

Część 4 życie programu

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

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

I - Microsoft Visual Studio C++

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

Programowanie Obiektowew języku C++ Zadania L4

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

Technologie cyfrowe semestr letni 2018/2019

Wstęp do programowania

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

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

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

TEMAT : KLASY DZIEDZICZENIE

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

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

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

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

Wstęp do Informatyki

Tbli Tablice obiektów biktó są tworzone dokładnie d tak samo, jak i tablice, składające się z elementów innego typu

Transkrypt:

class Samochod void Ruch(); ; class Amfibia : public Samochod void Ruch(); // amfibie pływają ; 1

Rzutowanie w C++ Mechanizm pozwalający na tymczasową lub stałą zmianę interpretacji obiektu przez kompilator nie powoduje rzeczywistej zmiany samego obiektu: 1. Nowa funkcja w klasie Samochod (np. Jazda() zamiast Ruch() i przesłonięcie funkcji Ruch(), tak, żeby wykonywała funkcję Plywanie(). 2. Dodanie funkcji Plywanie() w klasie Samochod (przenoszenie w górę) 3. Zatrzymanie funkcji Plywanie() w klasie Amfibia i uruchamianie jej tylko wtedy, gdy wskaźnik do obiektu wskazuje amfibię. Konieczna możliwość spytania wskaźnika jaki obiekt wskazuje - RTTI (Run Time Type Identification) operatory static_cast, dynamic_cast. 4. Stworzenie klasy Pojazd, w której istnieją funkcje z klasy Statek, jak i Samochod. 2

/* Rozwiązanie nr 1 i 2 - tworzymy dodatkową funkcję w klasie Samochod*/ #include <iostream> using namespace std; class Samochod public: Samochod () cout<<"konstruktor samochodu...\n"; void Jazda() cout<<"catch me if you can!!\n"; virtual void Ruch() cout<<"help me!! I'm drowning!!\n"; virtual ~Samochod() cout<<"zderzenie z TIRem na S8!!!...\n"; ; 3

class Amfibia : public Samochod public: Amfibia () cout<<"konstruktor amfibii...\n"; void Ruch() cout<<"plywam i nie tone!!\n"; virtual ~Amfibia() cout<<"dziura w dnie!!!...\n"; ; void main() Samochod* Garaz[3]; Samochod* ptr; int wybor, i; for (i = 0; i<3; i++) cout<<"(1) samochod (2) amfibia:"; cin>>wybor; 4

if (wybor == 2) ptr = new Amfibia; else ptr = new Samochod; Garaz[i]= ptr; cout<<endl; cout<<endl; for (i = 0; i < 3; i++) Garaz[i]->Jazda(); Garaz[i]->Ruch(); delete Garaz[i]; cout<<endl; system("pause"); 5

(1) samochod (2) amfibia:1 Konstruktor samochodu... (1) samochod (2) amfibia:2 Konstruktor samochodu... Konstruktor amfibii... (1) samochod (2) amfibia:1 Konstruktor samochodu... Catch me if you can!! Help me!! I'm drowning!! Zderzenie z TIRem na S8!!!... Catch me if you can!! Plywam i nie tone!! Dziura w dnie!!!... Zderzenie z TIRem na S8!!!... Catch me if you can!! Help me!! I'm drowning!! Zderzenie z TIRem na S8!!!... Press any key to continue... 6

/* Rozwiązanie nr 1 i 2 - tym razem obiekty*/ #include <iostream> using namespace std; class Ssak public: void Rozmnazanie() cout<<"rozmnazanie ssaka\n"; virtual void Reproduce() cout<<"rozmnazanie ssaka(virtual)\n"; ; class Dziobak : public Ssak public: void Rozmnazanie() cout<<"dziobak znosi jaja!!\n"; virtual void Reproduce() cout<<"dziobak znosi jaja (virtual)!!\n"; ; 7

void main() cout<<"obiekty : \nslon\n"; Ssak slon; Dziobak dziobak; slon.rozmnazanie(); slon.reproduce(); cout<<"\ndziobak:\n"; dziobak.rozmnazanie(); dziobak.reproduce(); cout<<"\nwskazniki : \nslon\n"; Ssak* slon1=new Ssak; slon1->rozmnazanie(); slon1->reproduce(); Dziobak* dziobak1=new Dziobak; cout<<"\ndziobak:\n"; dziobak1->rozmnazanie(); dziobak1->reproduce(); system("pause"); 8

Obiekty : slon Rozmnazanie ssaka Rozmnazanie ssaka(virtual) dziobak: Dziobak znosi jaja!! Dziobak znosi jaja (virtual)!! Wskazniki : slon Rozmnazanie ssaka Rozmnazanie ssaka(virtual) dziobak: Dziobak znosi jaja!! Dziobak znosi jaja (virtual)!! Press any key to continue... 9

/* Rozwiązanie nr 3 - sprawdzenie rtti*/ #include <iostream> using namespace std; class Samochod public: Samochod () cout<<"konstruktor samochodu...\n"; void Jazda() cout<<"catch me if you can!!\n"; virtual ~Samochod() cout<<"zderzenie z TIRem na S8!!!...\n"; ; class Amfibia : public Samochod public: Amfibia () cout<<"konstruktor amfibii...\n"; void Plyn() cout<<"plyne i nie tone!!\n"; 10

virtual ~Amfibia() cout<<"dziura w dnie!!!...\n"; ; void main() Samochod* Garaz[3]; Samochod* ptr; int wybor, i; for (i = 0; i<2; i++) cout<<"(1) samochod (2) amfibia:"; cin>>wybor; if (wybor == 2) ptr = new Amfibia; else ptr = new Samochod; Garaz[i]= ptr; cout<<endl; 11

for (i = 0; i < 2; i++) cout<<"\npojazd numer "<<i<< "\nuzycie dynamic_cast\n\n"; //sprawdzenie wskaźnika do klasy bazowej Amfibia *ptr =dynamic_cast<amfibia*> (Garaz[i]); if (ptr!=null) ptr->jazda(); ptr->plyn(); else ptr->jazda(); cout<<"to zwykly samochod nie plywa!...\n"; 12

cout<<"\npojazd numer "<<i<<"\nuzycie static_cast\n\n"; //sprawdzenie wskaźnika do klasy bazowej Amfibia *ptr1 = static_cast<amfibia*> (Garaz[i]); if (ptr1!=null) ptr1->jazda(); ptr1->plyn(); else ptr1->jazda(); cout<<"to zwykly samochod nie plywa!...\n"; delete Garaz[i]; system("pause"); 13

(1) samochod (2) amfibia: 1 Konstruktor samochodu... (1) samochod (2) amfibia: 2 Konstruktor samochodu... Konstruktor amfibii... Pojazd numer 0 Uzycie dynamic_cast Catch me if you can!! To zwykly samochod - nie plywa!... Pojazd numer 0 Uzycie static_cast Catch me if you can!! Plyne i nie tone!! Zderzenie z TIRem na S8!!!... 14

Pojazd numer 1 Uzycie dynamic_cast Catch me if you can!! Plyne i nie tone!! Pojazd numer 1 Uzycie static_cast Catch me if you can!! Plyne i nie tone!! Dziura w dnie!!!... Zderzenie z TIRem na S8!!!... Press any key to continue... 15

Dziedziczenie wielokrotne Polega na dziedziczeniu z więcej niż jednej klasy bazowej: class klasa_pochodna: public klasa_bazowa_1, public klasa_bazowa_2 ; 16

/*Dziedziczenie wielokrotne*/ #include <iostream> using namespace std; class Ssak public: Ssak() cout<<"konstruktor klasy Ssak...\n"; virtual void Rozmnazanie() cout<<"rozmnazanie ssaka\n"; virtual void Glos() cout<<"glos ssaka\n"; virtual ~Ssak() cout<<"destruktor klasy Ssak...\n"; ; 17

class Ptak public: Ptak() cout<<"konstruktor klasy Ptak...\n"; virtual void Rozmnazanie() cout<<"ptak znosi jaja\n"; virtual void Glos() cout<<"glos ptaka\n"; virtual ~Ptak() cout<<"destruktor klasy Ptak...\n"; ; class Dziobak : public Ssak, public Ptak public: void Rozmnazanie() cout<<"dziobak znosi jaja!!\n"; void Glos() cout<<"glos dziobaka!!\n"; virtual ~Dziobak() cout<<"destruktor klasy Dziobak...\n"; ; 18

void main() Ssak* ZOO[2]; Ptak* Kurnik[2]; Ssak* pssak; Ptak* pptak; int wybor, i; for (i = 0; i<2; i++) cout<<"\n(1) Ssak (2) Dziobak:"; cin>>wybor; if (wybor == 2) pssak = new Dziobak; else pssak = new Ssak; ZOO[i]= pssak; for (i = 0; i<2; i++) cout<<"\n(1) Ptak (2) Dziobak:"; 19

cin>>wybor; if (wybor == 2) pptak = new Dziobak; else pptak = new Ptak; Kurnik[i]= pptak; cout<<endl; for (i = 0; i < 2; i++) cout<<"\nzoo["<<i<<"]:\n"; ZOO[i]->Glos(); ZOO[i]->Rozmnazanie(); delete ZOO[i]; for (i = 0; i < 2; i++) cout<<"\nkurnik["<<i<<"]:\n"; Kurnik[i]->Glos(); Kurnik[i]->Rozmnazanie(); delete Kurnik[i]; system("pause"); 20

(1) Ssak (2) Dziobak:1 Konstruktor klasy Ssak... (1) Ssak (2) Dziobak:2 Konstruktor klasy Ssak... Konstruktor klasy Ptak... (1) Ptak (2) Dziobak:1 Konstruktor klasy Ptak... (1) Ptak (2) Dziobak:2 Konstruktor klasy Ssak... Konstruktor klasy Ptak... 21

ZOO[0]: Glos ssaka Rozmnazanie ssaka Destruktor klasy Ssak... ZOO[1]: Glos dziobaka!! Dziobak znosi jaja!! Destruktor klasy Dziobak... Destruktor klasy Ptak... Destruktor klasy Ssak... Kurnik[0]: Glos ptaka Ptak znosi jaja Destruktor klasy Ptak... Kurnik[1]: Glos dziobaka!! Dziobak znosi jaja!! Destruktor klasy Dziobak... Destruktor klasy Ptak... Destruktor klasy Ssak... Press any key to continue... 22

Ssak Ptak Funkcje i zmienne pobrane z klas bazowych Dziobak 23

Problemy przy dziedziczeniu wielokrotnym: 1. Co się dzieje, gdy obie klasy bazowe mają dane lub funkcje o tych samych nazwach? 2. Jak są inicjalizowane konstruktory klas bazowych? 3. Co się dzieje, gdy obie klasy bazowe dziedziczą z tej samej klasy? 24

/*Dziedziczenie wielokrotne Jawne użycie funkcji klas bazowych */ #include <iostream> using namespace std; class Ssak public: Ssak() cout<<"konstruktor klasy Ssak...\n"; virtual void Rozmnazanie() cout<<"rozmnazanie ssaka\n"; void Glos() cout<<"glos ssaka\n"; virtual ~Ssak() cout<<"destruktor klasy Ssak...\n"; ; 25

class Ptak public: Ptak() cout<<"konstruktor klasy Ptak...\n"; virtual void Rozmnazanie() cout<<"znosi jaja\n"; virtual void Glos() cout<<"glos ptaka\n"; virtual ~Ptak() cout<<"destruktor klasy Ptak...\n"; ; class Dziobak : public Ptak, public Ssak public: void Rozmnazanie() return Ptak::Rozmnazanie(); void Glos() return Ssak::Glos(); virtual ~Dziobak() cout<<"destruktor klasy Dziobak...\n"; ; 26

void main() Ssak* ZOO[2]; Ptak* Kurnik[2]; Ssak* pssak; Ptak* pptak; int wybor, i; for (i = 0; i<2; i++) cout<<"\n(1) Ssak (2) Dziobak:"; cin>>wybor; if (wybor == 2) pssak = new Dziobak; else pssak = new Ssak; ZOO[i]= pssak; for (i = 0; i<2; i++) cout<<"\n(1) Ptak (2) Dziobak:"; cin>>wybor; 27

if (wybor == 2) pptak = new Dziobak; else pptak = new Ptak; Kurnik[i]= pptak; cout<<endl; for (i = 0; i < 2; i++) cout<<"\nzoo["<<i<<"]:\n"; ZOO[i]->Glos(); ZOO[i]->Rozmnazanie(); delete ZOO[i]; for (i = 0; i < 2; i++) cout<<"\nkurnik["<<i<<"]:\n"; Kurnik[i]->Glos(); Kurnik[i]->Rozmnazanie(); delete Kurnik[i]; system("pause"); 28

(1) Ssak (2) Dziobak:1 Konstruktor klasy Ssak... (1) Ssak (2) Dziobak:2 Konstruktor klasy Ptak... Konstruktor klasy Ssak... (1) Ptak (2) Dziobak:1 Konstruktor klasy Ptak... (1) Ptak (2) Dziobak:2 Konstruktor klasy Ptak... Konstruktor klasy Ssak... 29

ZOO[0]: Glos ssaka Rozmnazanie ssaka Destruktor klasy Ssak... ZOO[1]: Glos ssaka Znosi jaja Destruktor klasy Dziobak... Destruktor klasy Ssak... Destruktor klasy Ptak... Kurnik[0]: Glos ptaka Znosi jaja Destruktor klasy Ptak... Kurnik[1]: Glos ssaka Znosi jaja Destruktor klasy Dziobak... Destruktor klasy Ssak... Destruktor klasy Ptak... Press any key to continue... 30

/*Dziedziczenie wielokrotne Użycie wielu konstruktorów*/ #include <iostream> using namespace std; char* naped_ziemia[]="benzyna", "diesel","hybryda"; char* naped_woda[]="diesel","turbina"; class Samochod public: char* silnik; int predkosc; Samochod (int,int); void Jazda(int v) cout<<"jade "<<v<<" km/h \n"; ; 31

class Statek public: char* silnik; double szybkosc; Statek (int,int); void Plyne(int v) cout<<"plyne z predkoscia "<<v<<" wezlow\n"; ; class Amfibia : public Samochod, public Statek int ladownosc; public: Amfibia(int,int,int,int,int); Amfibia(); void Ladownosc() cout<<"nie zatone przy ciezarze "<<ladownosc<<" ton!!\n"; ; 32

Samochod::Samochod(int i, int pred): silnik(naped_ziemia[i]),predkosc(pred) Statek::Statek(int a, int v): silnik(naped_woda[a]),szybkosc(v) Amfibia::Amfibia(int i1,int v1,int i2, int v2, int masa) :Samochod(i1,v1),Statek(i2,v2),ladownosc(masa) cout<<"konstruktor z parametrami\n"; /*Amfibia::Amfibia(int i1,int v1,int i2, int v2, int masa) Samochod(i1,v1); Statek(i2,v2); ladownosc(masa); */ Amfibia::Amfibia(): Samochod(1,130), Statek(1,15) ladownosc=2; cout<<"konstruktor domyslny\n"; 33

void main() cout<<"aligator\n\n"; Amfibia aligator(0,70,0,6,2); aligator.jazda(30); aligator.ladownosc(); aligator.plyne(6); //cout<<aligator.silnik<<endl; cout<<aligator.samochod::silnik<<endl; cout<<aligator.statek::silnik<<endl; cout<<"kubelwagen\n\n"; Amfibia* kubelwagen= new Amfibia; kubelwagen->jazda(25); kubelwagen->plyne(8); kubelwagen->ladownosc(); cout<<kubelwagen->predkosc<<endl; cout<<kubelwagen->szybkosc<<endl; system("pause"); 34

Aligator Konstruktor z parametrami Jade 30 km/h Nie zatone przy ciezarze 2 ton!! Plyne z predkoscia 6 wezlow benzyna diesel Kubelwagen Konstruktor domyslny Jade 25 km/h Plyne z predkoscia 8 wezlow Nie zatone przy ciezarze 2 ton!! 130 15 Aby kontynuować, naciśnij dowolny klawisz... 35

Metody eliminacji niejednoznaczności: 1. Jawne wywołanie funkcji, którą chcemy użyć 2. Użycie funkcji wirtualnej w klasie bazowej 36