Форум программистов, компьютерный форум CyberForum.ru

Задания с++ с собеседования - C++

Восстановить пароль Регистрация
 
thechicho
0 / 0 / 0
Регистрация: 15.03.2015
Сообщений: 14
Завершенные тесты: 1
17.08.2016, 10:31     Задания с++ с собеседования #1
Предложите ваши варианты решения заданий

1. Перечислите все проблемы, которые вы видите в данном коде:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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;
}
#==
Предложите ваши варианты решения заданий
2. Есть класс CodeGenerator, который умеет генерить код на разных языках.
Предложите рефакторинг с учетом, что количество языков будет расширяться

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class CodeGenerator
{
public:
    enum Lang {JAVA, C_PLUS_PLUS, PHP};
    CodeGenerator(Lang language) { _language=language; }
    std::string generateCode()
    {
        switch(_language) {
        case JAVA:        //return generated java code
        case C_PLUS_PLUS: //return generated C++ code
        case PHP:         //return generated PHP code
        }
        throw new std::logic_error("Bad language");
    }
    std::string someCodeRelatedThing() // used in generateCode()
    {
        switch(_language) {
        case JAVA:        //return generated java-related stuff
        case C_PLUS_PLUS: //return generated C++-related stuff
        case PHP:         //return generated PHP-related stuff
        }
        throw new std::logic_error("Bad language");
    }
 
private:
    Lang _language;
}
#==
Предложите ваши варианты решения заданий
3. Все ли хорошо в этом коде?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Файл legacy.c
int values[3];
 
Файл modern.cpp
#define LEGACY_SIZE 3
extern int *values;
 
class MyBlah {...};
 
class Adapter
{
public:
    Adapter()
    {
        for (int i = 0; i < LEGACY_SIZE; ++i)
            map_[values[i]] = new MyBlah (values[i]);
    }
private:
    std::map<int, MyBlah *> map_;
};
#==
Предложите ваши варианты решения заданий
4. Что не так в этом коде? Перечислите, какие недостатки вы видите. Предложите свой вариант рефакторинга.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <stdio.h>
 
class Feature
{
public:
    enum FeatureType {eUnknown, eCircle, eTriangle, eSquare};
 
    Feature() : type(eUnknown), points(0) {    }
 
    ~Feature()
    {
        if (points)
            delete points;
    }
 
    bool isValid() 
    {
        return type != eUnknown;
    }
 
    bool read(FILE* file)
    {        
        if (fread(&type, sizeof(FeatureType), 1, file) != sizeof(FeatureType))
            return false;
        short n = 0;
        switch (type) 
        {
        case eCircle: n = 3; break;
        case eTriangle:    n = 6; break;
        case eSquare: n = 8; break;
        default: type = eUnknown; return false;
        }
        points = new double[n];
        if (!points)
            return false;
        return fread(&points, sizeof(double), n, file) == n*sizeof(double);
    }
    void draw()
    {
        switch (type)
        {
        case eCircle: drawCircle(points[0], points[1], points[2]); break;
        case eTriangle:    drawPoligon(points, 6); break;
        case eSquare: drawPoligon(points, 8); break;
        }
    }
 
protected:
    void drawCircle(double centerX, double centerY, double radius);
    void drawPoligon(double* points, int size);
 
    double* points;
    FeatureType type;
};
 
int main(int argc, char* argv[])
{
    Feature feature;
    FILE* file = fopen("features.dat", "r");
    feature.read(file);
    if (!feature.isValid())
        return 1;
    return 0;
}
#==
Предложите ваши варианты решения заданий
5. Имеем чистый C. Напишите generic функцию линейного поиска в массиве.
И приведите пример использования вашей функции.

6. Имеем чистый С. Напишите reusable API для работы со связным списком структур.
Структуры могу быть разного типа, но в одном списке будут структуры одного типа.
Приведите пример использования вашего API.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2016, 10:31     Задания с++ с собеседования
Посмотрите здесь:

Нестандартные задания C++
Задания по с++ C++
Задача с собеседования (аллокатор памяти) C++
ООП. Тестовое задание собеседования. C++
Задание с собеседования (циклы) C++
C++ Пример из собеседования по C++
Собеседования по С++ для джуна C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
17.08.2016, 10:48     Задания с++ с собеседования #2
Оо, ну тут надолго. Надоп наверное на каждый вопрос по отдельной теме запилить.

Добавлено через 6 минут
1.
1) Это даже не скомпилится, так как class Bar: Foo - приватное наследование, поэтому такие вещи недопустимы: Foo* b=new Bar(200);
2) Выделили память под массив, а удалаем обычным delete (в обоих классах):
C++
1
2
    Foo(int j) { i=new int[j]; }
    ~Foo() { delete i; }
3) Надо вызывать конструктор базового класса:
C++
1
Bar(int j) { i=new char[j]; } // <-- забыли : Foo(/*..*/)
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
17.08.2016, 11:02     Задания с++ с собеседования #3
Тема разделена на отдельные вопросы
Yandex
Объявления
17.08.2016, 11:02     Задания с++ с собеседования
Закрытая тема Создать тему
Опции темы

Текущее время: 04:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru