Imię
i nazwisko: 28
czerwca 2006
Uwaga: W poniższym teście w
każdym punkcie ilość poprawnych odpowiedzi wynosi od 0 do 4. Każdą z nich
należy oznaczyć słowem „TAK”, a odpowiedź błędną – słowem „NIE”.
1. Asercje można wyłączyć
a) pisząc
na początku każdego pliku programu:
#include <cassert>
#define NDEBUG
...
b) pisząc
na początku każdego pliku programu:
#define NDEBUG
#include <cassert>
...
c) w
kompilatorze gcc stosując dodatkową opcję kompilacji –DNDEBUG
d) w kompilatorze gcc stosując dodatkową opcję kompilacji –DNOASSERT.
2. Operator new tworzy obiekt
a) na stercie (ang. heap) programu
b) na stosie (ang. stack) programu
c) w obszarze danych statycznych
d) w obszarze zmiennych automatycznych
3. Wartość wyrażenia (3&1) + (3|1) + (3^1) + (1%3) + 0x13 + (1 << 3)
a) wynosi 26
b) wynosi 28
c) wynosi 30
d) jest nieparzysta
4. Następujące rodzaje funkcji mogą być funkcjami wirtualnymi:
a) konstruktory;
b) destruktory;
c) metody statyczne;
d) metody
inline
5.
Rozpatrzmy
funkcję
void
X::Rectangle(RECT const& r, COLOR c) const
{
::Rectangle(*this, r.x0, r.y0, r.x1, r.y1,
c);
}
a) Ciało tej funkcji zawiera wywołanie globalnej funkcji Rectangle.
b) Ciało tej funkcji zawiera wywołanie metody Rectangle klasy X.
c) Typem wyrażenia *this jest const X.
d) Funkcja::Rectangle nie może zmienić wartości obiektu *this.
6.
Jacek zdefiniował zmienną logiczną b w
następujący sposób:
bool
b = 3/4 > 0;
a) Wartością b jest true.
b) Wartością b jest false
c) Wartość b jest nieokreślona (zależy od implementacji).
d) Powyższe wyrażenie jest błędne (zawiera błąd składniowy).
7. Instrukcję f(x) && g(x); można w każdym wypadku zastąpić instrukcją:
a) g(x) && f(x);
b) if
(f(x))
g(x);
c) if
(g(x))
f(x);
d) f(x),
g(x);
8.
Tablicę tab, zdefiniowaną
instrukcją
char tab[100];
można użyć jako argumentu następujących
funkcji:
a) char fa(char arg[100]);
b) void fb(void *arg);
c) char & fc(char *arg);
d)
const char & fd(const char arg[]);
9.
Rozpatrzmy następującą deklarację:
int X::size(X& x) const;
Użyte w niej słówko const
a) modyfikuje typ wyniku funkcji
b) modyfikuje typ wskaźnika this (w definicji funkcji X::size(X& x) const)
c) modyfikuje typ argumentu funkcji (tu: x)
d) jest
błędem składniowym.
10.
Rozpatrzmy następującą definicję:
struct X
{
int _x;
static int y;
int f() const { return _x + y;}
};
a) Ciało funkcji f można zapisać jako return this->_x + this->y;.
b) Ciało funkcji f można zapisać jako return this->_x + y;.
c) Ciało funkcji f można zapisać jako return this->_x + ::y;.
d) Składowa y wymaga inicjalizacji poza definicją struktury X.
11. Do włączenia diagnostycznej implementacji STL dostępnej w kompilatorze g++ wystarczy
a) skompilować program z opcją -g
e) skompilować program z opcją -DDEBUG
f) skompilować program z opcją -D_GLIBCXX_DEBUG
g) skompilować
program z opcją -lm
12. Żeby wyłapać dowolny wyjątek w programie należy zdefiniować blok catch:
a)
catch (std::exception) { /*stosowny
kod*/ }
b)
catch (...) { /*stosowny
kod*/ }
c) catch (std::all) { /*stosowny kod*/ }
d)
catch (std::this) {
/*stosowny kod*/ }
13. Następująca
instrukcja sortuje 100 pierwszych
elementów wektora
std::vector<int> tab(1000):
a) std::sort( tab, 100 );
b) std::sort( tab, tab + 100 );
c) std::sort( tab[0], tab[100] );
d)
std::sort( tab.begin(), tab.begin() + 100 );
14. Rozpatrzmy
funkcję f
int f(int x, unsigned int n)
{
int y = 0;
while (n--)
{
if (x & 1)
y++;
x >>= 1;
}
return y;
}
wartością f(3, 3) jest
a) 0
b) 1
c) 2
d) 3
15. Można
się spodziewać, że na drzewach czerwono-czarnych oparta jest implementacja
klasy:
a) std::map<T>
b) std::deque<T>
c)
std::vector<T>
d)
__gnu_cxx::hash_map<T>
16. W kompilatorze gcc opcja:
a) –c nakazuje przerwanie kompilacji po utworzeniu pliku obiektowego
b) –E nakazuje przerwanie kompilacji po przetworzeniu pliku preprocesorem
c) –g dołącza do programu informacje potrzebne debugerowi
d) –W3 włącza optymalizację kodu
17. Aby móc dokonać konkretyzacji szablonu std::map<K, W> należy
a) W klasie K zdefiniować operator< (lub jego odpowiednik)
b) W klasie W zdefiniować operator< (lub jego odpowiednik)
c) W klasie K zdefiniować operator!= (lub jego odpowiednik)
d) W klasie W zdefiniować operator!= (lub jego odpowiednik)
18. Do składowych umieszczonych w sekcji protected: klasy X dostęp mają:
a) wyłącznie metody klasy X
b) wyłącznie metody klasy X oraz funkcje z nią zaprzyjaźnione
c) wyłącznie metody klasy X, funkcje z nią zaprzyjaźnione oraz funkcje klas pochodnych
d) wszystkie funkcje zawarte w pliku, w którym umieszczono definicję klasy X.
19. O destruktorach obiektów globalnych można powiedzieć, że:
a) Wywołują się po zakończeniu funkcji main.
b) Jeżeli zostanie w nich zgłoszony wyjątek, to nie będzie go można przechwycić w programie.
c) Nie mogą być funkcjami wirtualnymi
d) Nie
mogą być analizowane programami diagnostycznymi (np. debugerami).
20.
a) Po wykonaniu instrukcji int x = 2/4; wartością x jest 0.5.
b) Po wykonaniu instrukcji unsigned int x = -2; wartością wyrażenia x > 0 jest true;
c) Jeżeli w wyrażeniu x + y jeden ze składników jest typu unsigned, a drugi int, to wynik jest typu int.
d) Po wykonaniu instrukcji int x = -3.5; wartością x jest -4.
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.
#include <iostream>
int main()
{
int v[1000000];
for (int i = 0; i < 1000000;
++i)
v[i] = i;
}
const
char *what() const.