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

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

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi

Imię i nazwisko: PYTANIA I ODPOWIEDZI Nr 0 EGZAMIN Język C++ 27 czerwca 2011

Operatory na rzecz typu TString

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

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

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

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

Programowanie obiektowe w C++ Wykład 12

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

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

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

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

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

Techniki Programowania wskaźniki

TEMAT : KLASY DZIEDZICZENIE

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

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

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

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

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

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

C++11. C++ 11 wybrane elementy. C++11: referencje do rvalue C++ 11: C++11: referencje do rvalue. C++11: referencje do rvalue. Referencje do rvalue

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

Plik klasy. h deklaracje klas

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

Wykład 8: klasy cz. 4

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

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

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

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

PARADYGMATY PROGRAMOWANIA Wykład 4

PARADYGMATY PROGRAMOWANIA Wykład 2

Podstawy Programowania Obiektowego

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

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.

Język C++ zajęcia nr 2

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

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

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

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.

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

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy PRAWA PRZYJACIÓŁ KLASY. Dostęp z zewnątrz: Dostęp z wewnątrz:

Programowanie Obiektowe i C++

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

C++11. C++ 11 wybrane elementy. C++11: referencje do rvalue C++ 11: C++11: referencje do rvalue. C++11: referencje do rvalue. Referencje do rvalue

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

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 5

Wprowadzenie do programowanie obiektowego w języku C++

PARADYGMATY PROGRAMOWANIA Wykład 3

Programowanie Obiektowe i C++

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

Projektowanie klas c.d. Projektowanie klas przykład

Wykład 4: Klasy i Metody

Wyliczanie wyrażenia obiekty tymczasowe

Programowanie, część I

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

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

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

Programowanie w języku C++

7. Pętle for. Przykłady

Słowa kluczowe i nazwy

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

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

Lab 9 Podstawy Programowania

Programowanie obiektowe i C++ dla matematyków

Rzutowanie i konwersje

Konstruktor kopiujacy

Przeciążenie (przeładowanie nazw) funkcji

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

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

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

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

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

Języki programowania - podstawy

Materiały do zajęć VII

Dziedziczenie. Ogólna postać dziedziczenia klas:

Techniki Programowania wskaźniki 2

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

Wstęp do programowania

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

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

Programowanie komputerowe. Zajęcia 7

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

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

Programowanie obiektowe w języku

Część 4 życie programu

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

Algorytmy i język C++

dr inż. Jarosław Forenc

Pytania sprawdzające wiedzę z programowania C++

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

Rozdział 4 KLASY, OBIEKTY, METODY

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

Program 6. Program wykorzystujący strukturę osoba o polach: imię, nazwisko, wiek. W programie wykorzystane są dwie funkcje:

C++ 11: C++ 11: C++11: jednolita inicjalizacja. C++11: jednolita inicjalizacja. C++11: jednolita inicjalizacja. C++11: initializer_list

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

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Do czego służą klasy?

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

Transkrypt:

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi EGZAMIN PIERWSZY (25 CZERWCA 2013) JĘZYK C++ poprawiam ocenę pozytywną z egzaminu 0 (zakreśl poniżej x) 1. Wśród poniższych wskaż poprawną formę definicji programu w C++ a) main( ) -> int { } b) auto [] () -> int { } c) auto main( ) { } d) auto main( ) -> int { } // tylko to jest poprawne e) void main( ) { return 0; } 2. Po wykonaniu fragmentu poniższego kodu, jaka będzie wartość pierwszego elementu w tablicy tab: int tab[] { 1, 2, 3, 4 for (auto i : tab) i = i+1; Taka sama jak po inicjalizacji, czyli 1 (pętla for pobiera wartość kopię, więc niczego nie zmienia). 3. Zakładając, że jesteśmy w przestrzeni globalnej, które z poniższych nie jest deklaracją (tzn. jest też być może również definicją): a) enum struct Ksztalt; b) static long n; // definicja c) extern double d = 0; // definicja, bo inicjalizacja d) namespace { } // definicja nienazwanej przestrzeni nazw e) class Foo; f) extern const int i; 4. Wymień dwa sposoby, na jakie można ograniczyć zasięg (widzialność) danej nazwy do pojedynczej jednostki translacji. 1) poprzez static (w przestrzeni globalnej) 2) poprzez zamknięcie w nienazwanej przestrzeni nazw 5. Co się stanie w efekcie kompilacji / wykonania poniższego kodu? void fun(int){ cout << "1" << endl; } void fun(int*){ cout << "2" << endl; } void fun(int*&){ cout << "3" << endl; } void fun(int**){ cout << "4" << endl; } int main( ) { fun(nullptr); } Błąd kompilacji z powodu niejednoznaczności wywołania przeciążonych wersji funkcji (2 i 4). 6. Proszę podać jakiego typu jest zmienna a oraz jakiego typu jest zmienna b: auto a = * new auto ( 0 ); // typu int decltype( new auto ( 0 ) ) b; // typu int* 1

7. Jaka jest wartość zmiennej a po takich operacjach: int a = 4; a ^= a; Wartość końcowa a wynosi 0 (gdyż ^ to XOR a na samym sobie daje zero, ^= to XOR z przypisaniem). 8. Uzupełnij miejsca... w dowolny poprawny sposób: class Bar : public Foo { // w programie: Bar b; auto p = dynamic_cast< Foo& > ( b ) ; // zamiast auto można jawnie napisać Foo& 9. Jak należy zapisać argument funkcji tak, żeby dopuszczalna była tylko 5-elementowa tablica char void fun( char (&tab) [5] ); // nazwa tab nie jest konieczna w deklaracji 10. Które z poniższych deklaracji funkcji globalnych są niepoprawne: a) void fun( int, char = 'a', void* = 0 ); b) void fun( int* p = nullptr, int ); // niepoprawne c) void fun( int a, int b, int = 4 ); d) void fun( void ) const; // niepoprawne, bo w przestrzeni globalnej nie ma funkcji const e) void fun( auto n = 5 ); // niepoprawne 11. Jaką wartość będzie miała składowa i po utworzeniu obiektu w programie (jak poniżej): int i = 10; Foo( int i ) : i ( i ) { } // w programie Foo i(5); a) 5 // tą wartość b) 10 c) niezdefiniowaną bo nie wiadomo które i jest wartością inicjalizującą d) program się nie skompiluje e) 0 12. Zdefiniowano konstruktor w części prywatnej klasy. Jak wykorzystać go do definicji innych konstruktorów: Foo ( int, int, double ); // na przykład: Foo( ) : Foo ( 0, 0, 0.0 ) { } Foo( int a ) : Foo ( a, a, 0.0 ) { } 2

13. W poniższej klasie zdefiniuj niejawny operator konwersji do typu std::string const char * ptr; explicit operator string( ) { return ptr; } 14. Wśród poniższych wskaż wszystkie fałszywe twierdzenia: a) jeśli zdefiniuję konstruktor kopiujący, to nie wygeneruje się automatycznie konstruktor przenoszący b) jeśli zdefiniuję konstruktor kopiujący, to nie wygeneruje się automatyczny konstruktor domyślny c) jeśli zdefiniuję destruktor, to nie wygeneruje się automatyczny konstruktor kopiujący d) jeśli zdefiniuję konstruktor konwersji, to nie wygeneruje się domyślny konstruktor e) jeśli zdefiniuję konstruktor konwersji, to nie wygeneruje się automatyczny konstruktor kopiujący // fałszywe jest e, bo wygeneruje się 15. Dla dowolnego typu T napisz deklarację globalnego operatora przedrostkowego i przyrostkowego inkrementacji. przedrostkowy: const T& operator++ ( T& ); przyrostkowy: const T operator++( T&, int ); 16. Proszę zdefiniować wskaźnik na składową int poniższej klasy Foo i ustawić na składową a int a; int Foo::*ptr = &Foo::a; 17. Wskaż wśród poniższych wszystkie fałszywe twierdzenia: a) operator [] jest operatorem tylko o jednym argumencie b) operator wyłuskania * musi być metodą składową klasy // fałsz c) operator odniesienia się na składową -> musi być metodą składową klasy d) nie można przeciążyć operatora ->* // fałsz e) operator przecinkowy, można przeciążyć tylko w postaci funkcji globalnej // fałsz 18. W jakiej kolejności uruchamiane będą konstruktory klas w poniższym kodzie (definicje pomijami dla czytelności, konstruktory są domyślne): class A; class B : virtual A; static A a; int main( ) { B b; A *ptr; } Kolejno: A A B (proszę zwrócić uwagę, że A *ptr; niczego nie uruchamia to tylko wskaźnik). 3

19. Co zostanie wypisane na ekran: struct Foo { virtual Foo* fun() { cout << "F" << endl; return this; } struct Bar : public Foo { Bar* fun() { cout << "B" << endl; return this; } int main( ) { Foo* ptr = new Bar; ptr->fun(); // B (*ptr).fun(); // B } 20. Napisz jak utworzyć: 20-elementową tablicę typu char na stercie char *p = new char[20]; 20-elementową tablicę typu void* na stosie void* tab[20]; 21. Zaznacz (kółkiem lub dopisz jeśli czegoś brak) virtual void fun( ) = 0; explicit Foo( int ); virtual ~Foo ( int=0 ); // d-tor nie może mieć argumentu } ; // brak średnika 22. Jest funkcja w postaci: void fun( initializer_list<int> n ); W jaki sposób należy wywołać taką funkcję, napisz jakiś przykład: fun ( { 1, 2, 3 } ); 23. Co się stanie w poniższym kodzie? explicit Foo(int) {} class Bar : public Foo { using Foo::Foo; int main( ) { Bar b = 7; } Błąd kompilacji ze wzgl. na to że konstruktor Foo jest explicit i taka własność jest odziedziczona. 24. Napisz przykład definicji i inicjalizacji kontenera vector dla typu double. Następnie pętlę "po cały zakresie" (wg nowej składni) wypisującą kolejne elementy na ekran. vector<double> v { 0., 1.5, 2.8 for (auto d : v ) cout << d << endl; 25. Jeśli utworzyliśmy dopiero co kontener map< string, int > to co spowoduje taki zapis: map["alfa"]; Tak zapis spowoduje utworzenie pary i wstawienie jej do mapy (klucz alfa wartość 0). 4

26. Napisz dla klasy Foo takie deklaracje, które zablokują operacje kopiowania (proszę użyć składni w tym pomagającej z języka C++11) Foo( const Foo& ) = delete; // blokada konstruktora kopiującego Foo& operator= (const Foo& ) = delete; // blokada operatora= kopiującego 27. Mamy klasę Lambda z przeciążonym operatorem funkcyjnym, napisz dla niej jak wyglądałoby ekwiwalentne jej wyrażenie Lambda: class Lambda { T& t; Lambda( T& t1 ) : t( t1 ) {} void operator( )( ) { fun( t ); } [ &t ]() { fun(t); } 28. Napisz deklarację przyjaźni dla operatora >> wyjmowania ze strumienia, dla poniższej klasy friend std::istream& operator>>( std::istream& s, Foo& f ); 29. Zdefiniuj i zainicjalizuj dowolną poprawną wartością a static char a; char Foo::a = 0; // w sumie 0 to domyślna wartość inicjalizacji pola statycznego 30. Klasa Bar dziedziczy prywatnie z klasy Foo. W klasie Foo w części publicznej jest metoda void fun() const; Co należy napisać i w której części klasy Bar, żeby ta metoda nadal była publiczna. W części publicznej klasy Bar należy napisać: using Foo::fun; 31. Dla klasy Foo przeciąż operator new (wystarczy napisanie odpowiedniej deklaracji). void* operator new (size_t s); 32. Wymień wszystkie operatory, które można przeciążyć i muszą być składowymi klasy. operator= operator() operator[] operator-> 5

33. Funkcja fun przyjmuje argument przez referencję i zwraca przez referencję. Napisz poprawną instrukcję zwrotu wewnątrz funkcji, zwracającą to co weszło do niej przez argument int& fun( int& n ) { return n; 34. Czym w języku c++ różni się klasa od struktury (pod względem pól dostępu, dziedziczenia)? Różni się tym, że domyślnym polem dostępu w klasie jest private, a w sktrukturze public. Podobnie domyślnym sposobem dziedziczenia w klasie jest private, a w strukturze public. Domyślnym, tzn. takim jakie jest gdy się go nie napisze jawnie. 35. Napisz jak wygląda deklaracja main jeżeli chcemy przyjąć jakieś argumenty podczas wywołania programu. // oba zapisy są tożsame int main( int argc, char** argt ); int main( int argc, char* argt[] ); 6