Интересно почитать… Блог в котором есть много интересной информации…

5 марта 2013

Проходим тестирование на C++ разработчика в Яндексе

Категория: программирование — dmitriano @ 14:20

У них тест состоит из четырех простых вопросов

Первый вопрос

Перепишите код, устранив имеющиеся в нём проблемы, но не изменяя функцию main

class Foo
{
public:
    Foo(int j) { i=new int[j]; }
    ~Foo() { delete i; }
private:
    int* i;
};

class Bar: Foo
{
public:
    Bar(int j) { i=new char[j]; }
    ~Bar() { delete i; }
private:
    char* i;
};


void main()
{
    Foo* f=new Foo(100);
    Foo* b=new Bar(200);
    *f=*b;
    delete f;
    delete b;
}

Ответ на первый вопрос

Надо добавить конструктор по умолчанию, виртуальный деструктор, публичное наследование, длину массива и оператор присваивания.

class Foo
{
public:
    Foo() : i(0), len(-1) {}
    
    Foo(int j) { i=new int[j]; len = j;}
    
    virtual ~Foo() 
    { 
        //it works fine even if i==0
        delete i; 
    }

    Foo & operator = (const Foo & right)
    {
        delete i;

        //propably we need to implement some kind of reference counting
        //but I simply made a copy of the array

        if (right.i == 0)
        {
            i = 0;

            len = -1;
        }
        else
        {
            len = right.len;

            i = new int[len];
            
            memcpy(i, right.i, len * sizeof(int));
        }

        return *this;
    }

private:
    int* i;
    int len;
};

class Bar: public Foo
{
public:
    Bar(int j) { i=new char[j]; }
    ~Bar() { delete i; }
private:
    char* i;
};


void main()
{
    Foo* f=new Foo(100);
    Foo* b=new Bar(200);
    *f=*b;
    delete f;
    delete b;
}

Ответ на четвертый вопрос

std::wstring GetWindowTextW(HWND hWnd)
{
    int len = GetWindowTextLength(hWnd);

    std::wstring s; 

    s.reserve(len + 1);

    ::GetWindowTextW(hWnd, const_cast<wchar_t*>(s.c_str()), len);

    return s;
}
Линии 3D/Шарики 3D

Комментариев нет »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

SlogPost.ru