Ukázkový test 1

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.

  1. Uvažujte následující program. Co bude na standardním výstupu po jeho provedení? [3B]
    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í
  2. Je takto definovaný konstruktor v pořádku? Proč? [1B]
    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í
  3. Co bude na výstupu tohoto programu? [2B]
    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í
  4. Co bude na výstupu tohoto kousku kódu? [1B]
    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í
  5. Co bude na výstupu po proběhnutí tohoto programu? [2B]
    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í
  6. Naimplementujte šablonovou funkci clamp(min, max, val). Clamp omezí hodnotu val na interval [min, max].
    Příklad použití:
    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]
    řešení
courses/b6b36pjc/testy/ukazkovy_test_1.txt · Last modified: 2019/01/03 13:32 by richta