Imię i nazwisko:                                                                                                               24 czerwca 2002

 

 

 

1.      Jaka jest różnica pomiędzy kompilacją programu w trybie release i debug?

release:

debug:

 

2.      Gdzie znajduje się najlepsze miejsce do inicjacji składowych obiektu klasy?


3.      Jak wyłapać wszystkie wyjątki, które mogą się pojawić w programie?


 

4.      Jaki jest wynik działania instrukcji
std::cout << (6&2) << (6|2) << (6 << 2) << 0x26 << "\n";


5.      Podaj przykład dwóch zmiennych  x i y typu double spełniających warunek

      (x && y && (x+y == y))

               x =
               y =

6.      Jaki błąd popełnił Jacek pisząc
x[i] = a[++i];



7.      Czym różni się '\0' od "\0".



8.    Jaka jest podstawowa różnica pomiędzy instrukcją break,  return, throw i exit?
break:
return:

throw:
exit:

9.      Co oznacza instrukcja for ( ; ; ) { ... }



10.   Co oznacza słowo kluczowe this?



11.   Co w poniższej definicji funkcji oznacza drugi podwójny dwukropek?
void X::Rectangle(RECT const& r, COLOR c) const
{
   ::Rectangle(*this, r.x0, r.y0, r.x1, r.y1, c);
}



12.   Co w definicji funkcji z poprzedniego zadania oznacza ostatnie słowo kluczowe const?



13.   Czym różnią się funkcje "inline" od zwykłych funkcji?


14.   Czym różni się przekazywanie argumentów przez wartość od przekazywania argumentów przez referencję?





15.   Zapisz instrukcję p->x(); nie posługując operatorem ->.



16.   Dlaczego funkcja nie może zwracać referencji do swojej lokalnej zmiennej automatycznej?

 



17.   Czym różni się metoda std::vector<T>::capacity() od std::vector<T>::size();
capacity:


size:

18.   Napisz instrukcję, która przy pomocy pewnego standardowego algorytmu posortuje 100 pierwszych elementów tablicy int tablica[1000] w kolejności od najmniejszej do największej.



19.   Do czego służy słowo kluczowe explicit?


 

20.   Jeżeli w konstruktorze alokujemy pamięć przy pomocy instrukcji int* const p = new int[100];,  to w jaki sposób usuwamy tę tablicę w destruktorze?

 

 

 

21.   Podaj przykład wyrażenia, które generuje NaN.

 

 

 

22.   Przy pomocy deklaracji typedef zdefiniuj SHORT_VEC jako alternatywną nazwę wektora (std::vector) liczb typu short.

 

 

 

23.   Wszystkie wyjątki rzucane przez bibliotekę standardową są wyprowadzane z klasy std::exception, która posiada składową const char *what() const, informującą  o rodzaju wyjątku. Dlaczego chcąc użyć składowej what, nie możemy wyłapywać wyjątku przez wartość?

 

 

 

24.   Jakie fragmenty programu mają dostęp do składowych chronionych (protected)?




25.   Co robi druga z poniższych  instrukcji:

std::vector<int> v;
std::copy (std::istream_iterator<int> (std::cin),
           std::istream_iterator<int>(),
           std::back_inserter (v) );


Zadania

Rozwiązania proszę najpierw napisać na brudno i po sprawdzeniu przenieść na podpisaną kartkę z wersją „finalną”. Proszę zwrócić uwagę na sposób definiowania argumentów i wartości funkcji.

 

  1. Zdefiniuj funkcję int masa(unsigned long int n), która zwraca ilość bitów ustawionych w argumencie n.
  2. Proszę przeciążyć operator<<  tak, aby służył do zapisywania w dowolnym strumieniu wyjścia wszystkich elementów dowolnego kontenera typu std::vector<int>.  Elementy powinny być przedzielone przecinkami i spacją, a całość ujęta w nawiasy okrągłe. Przykładowy efekt działania tego operatora na wektorze o elementach 1, –10, 3 i 17:

                    (1, -10, 3, 17)

  3. Zdefiniuj szablon funkcji max(x, y), która zwraca większy z obiektów x, y. Zakładamy, że typy obu argumentów są takie same, a parametry przekazywane są przez referencję.
  4. Zaimplementuj klasę Macierz, która reprezentuje macierz kwadratową liczb typu double. Rozmiar tablicy powinien być podawany w konstruktorze. Dostęp do elementu znajdującego się w wierszu n i kolumnie m powinien być zapewniany przez dwa dwuargumentowe operatory  operator(). Argumentami tych operatorów są oczywiście numery rzędu i kolumny danego elementu macierzy.
  5. W poniższym programie wykropkowałem instrukcję for, która w kolejnych wierszach wyświetlała na ekranie zawartość listy koktajli. Proszę odtworzyć tę instrukcję. Zwróć uwagę na brak instrukcji using namespace std;. Rozwiązanie możesz umieścić w wolnym miejscu:

    #include <iostream>
    #include <string>
    #include <list>
    int main ()
    {
        std::list<std::string> Koktajle;
        Koktajle.push_back("Czekoladowy");
        Koktajle.push_back("Truskawkowy");
        Koktajle.push_front("Cytrynowy");
        Koktajle.push_front("Koktajle:");
        // wyświetl wszystkie oferowane koktajle...
         ...










        return 0;
    }
  6. Załóżmy, że mamy pewien n-elementowy wektor v typu:

           std::vector<unsigned long int> v(n);

    w którym znajdują się losowo wybrane liczby całkowite. Proszę posortować elementy tego wektora przy pomocy algorytmu std::sort, kierując się  następującym kryterium:
    a) jeżeli masa (n) < masa (m), to n musi w posortowanym wektorze występować przed m.
    b) jeżeli masa (n) == masa(m) && n < m, to n musi w posortowanym wektorze występować przed m.
    Tutaj masa jest funkcją z zadania 1; możesz założyć, że funkcja ta jest dana.