Z testu je možné získat maximálně 30 bodů, 15 bodů z obsáhlejších otázek na této stránce a 15 bodů z krátkých otázek.
struct object { object() { std::cout << "1 "; } object(const object&) { std::cout << "2 "; } object& operator=(const object&) { std::cout << "3 "; return *this; } object(object&&) { std::cout << "4 "; } object& operator=(object&&) { std::cout << "5 "; return *this; } ~object() { std::cout << "6 "; } void pozdrav() { std::cout << "Ahoj! "; } void pozdrav() const { std::cout << "Nazdar! "; } }; object foo(const object& o){ o.pozdrav(); return o; } int main(){ object o1; object o2(o1); o1.pozdrav(); o1 = foo(o1); }řešení
template <typename T> class array { public: array(T* data, std::size_t length) : len{length}, elements{ new T[len] } { for (int i = 0; i < len; ++i) { elements[i] = data[i]; } } private: T* elements; std::size_t len; };řešení
int main(){ std::vector<int> v ({ 6, 5, 3, 9, 7, 4, 0, 2, 8, 1 }); std::sort(begin(v), end(v), [](int a, int b) { if ((a & 1) == (b & 1)){ return a < b; } else { return (a & 1) < (b & 1); } }); for (const auto& elem : v) { std::cout << elem << " "; } }řešení
class B {}; class D : public B {}; void f(B& throwable) { throw throwable; } int main() { D status; try { f(status); } catch (B& e) { std::cout << "Chytil jsem B!\n"; } catch (...) { std::cout << "To je divny...\n"; } }řešení
struct A { virtual void say() { std::cout << "A zdravi.\n"; } }; struct B : A { void say() { std::cout << "B zdravi.\n"; } }; void bar(A& a) { a.say(); } void foo(A a) { a.say(); bar(a); } int main() { A a; B b; bar(a); bar(b); foo(b); }řešení
clamp(0, 10, 2) == 2; clamp(0, 10, -1) == 0; clamp(0, 10, 11) == 10;Nezapomeňte, že T nemusí podporovat všechny operace které podporuje int. [1B]