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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
thechicho
0 / 0 / 0
Регистрация: 15.03.2015
Сообщений: 14
Завершенные тесты: 1
#1

Перечислить все проблемы, которые вы видите в данном коде - C++

17.08.2016, 10:31. Просмотров 562. Ответов 27
Метки нет (Все метки)

Предложите ваши варианты решения заданий

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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2016, 10:31     Перечислить все проблемы, которые вы видите в данном коде
Посмотрите здесь:

C++ Перечислить все слова заданного предложения, которые состоят из тех же букв что и первое
Что означает pos ^= 1 в данном коде? C++
Перечислить дни, на которые приходится пятница 13-го числа C++
Какая альтернатива указателям в данном коде? C++
Перечислить слова, которые состоят из тех же букв C++
C++ Перечислить все последовательности длины n из символов {0,1,2}
C++ В текстовом файле содержится некоторый текст. Выделить все числа, которые содержатся в данном тексте
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
757 / 690 / 124
Регистрация: 27.07.2012
Сообщений: 1,975
Завершенные тесты: 3
17.08.2016, 11:14     Перечислить все проблемы, которые вы видите в данном коде #2
Мой предыдущий ответ: Задания с++ с собеседования
Ferrari F1
Форумчанин
459 / 355 / 82
Регистрация: 27.01.2015
Сообщений: 2,134
Записей в блоге: 1
Завершенные тесты: 1
17.08.2016, 11:40     Перечислить все проблемы, которые вы видите в данном коде #3
Виртуальный деструктор?

Добавлено через 7 минут
Происходит сокрытие имени i базового класса в производном
Kastaneda
Форумчанин
Эксперт С++
 Аватар для Kastaneda
4252 / 2784 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
17.08.2016, 11:44     Перечислить все проблемы, которые вы видите в данном коде #4
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Происходит сокрытие имени i базового класса в производном
У каждого класса своя i, все нормально.

Плюс к сказанному советую заострить внимание на этой строке
C++
1
*f=*b;
Kastaneda
Форумчанин
Эксперт С++
 Аватар для Kastaneda
4252 / 2784 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
17.08.2016, 11:44     Перечислить все проблемы, которые вы видите в данном коде #5
ну и void main() уже 100500 раз перетирали.
Ferrari F1
Форумчанин
459 / 355 / 82
Регистрация: 27.01.2015
Сообщений: 2,134
Записей в блоге: 1
Завершенные тесты: 1
17.08.2016, 11:44     Перечислить все проблемы, которые вы видите в данном коде #6
К-тор мона запейсать так
C++
1
Foo(int j):  i(new int[j]())   {     }
Kastaneda
Форумчанин
Эксперт С++
 Аватар для Kastaneda
4252 / 2784 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
17.08.2016, 11:45     Перечислить все проблемы, которые вы видите в данном коде #7
а, виртуальный деструктор то никто не упомянул.
Kastaneda
Форумчанин
Эксперт С++
 Аватар для Kastaneda
4252 / 2784 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
17.08.2016, 11:47     Перечислить все проблемы, которые вы видите в данном коде #8
thechicho, это тестовое задание от работодателя, как наши ответы помогут тебе устроится на работу?
Ferrari F1
Форумчанин
459 / 355 / 82
Регистрация: 27.01.2015
Сообщений: 2,134
Записей в блоге: 1
Завершенные тесты: 1
17.08.2016, 11:48     Перечислить все проблемы, которые вы видите в данном коде #9
Kastaneda, класс бар содержит bar::i и foo::i, последний тупо болтается и доступа к нему нет, проблемой это не назвать
gru74ik
Модератор
Эксперт CЭксперт С++
 Аватар для gru74ik
3836 / 1594 / 185
Регистрация: 20.02.2013
Сообщений: 4,585
Записей в блоге: 21
17.08.2016, 11:53     Перечислить все проблемы, которые вы видите в данном коде #10
Цитата Сообщение от Kastaneda Посмотреть сообщение
а, виртуальный деструктор то никто не упомянул.
В посте #3 упомянули же:
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Виртуальный деструктор?
Kastaneda
Форумчанин
Эксперт С++
 Аватар для Kastaneda
4252 / 2784 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
17.08.2016, 11:57     Перечислить все проблемы, которые вы видите в данном коде #11
Цитата Сообщение от gru74ik Посмотреть сообщение
В посте #3 упомянули же:
да, я слепой сегодня)
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
последний тупо болтается и доступа к нему нет
судя по коду доступа и к первому нет, но при необходимости можно получить доступ к обоим. Это можно упомянуть, да, но хз проблема ли это. Возможно на собеседовании (если ТС до него дойдет)) поднимут этот вопрос, типа как бы вы получили доступ к foo::i, а к bar::i?
Ferrari F1
Форумчанин
459 / 355 / 82
Регистрация: 27.01.2015
Сообщений: 2,134
Записей в блоге: 1
Завершенные тесты: 1
17.08.2016, 11:57     Перечислить все проблемы, которые вы видите в данном коде #12
Плюс ко всему, раз определен кастомный десруктор то нада еще определять свои операции управления копированием
Kastaneda
Форумчанин
Эксперт С++
 Аватар для Kastaneda
4252 / 2784 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
17.08.2016, 12:02     Перечислить все проблемы, которые вы видите в данном коде #13
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
то нада еще определять свои операции управления копированием
ага, как раз в 4-ом посте на это намекал)

Добавлено через 4 минуты
нет, я чуть больше подумал, просто добавление оператора = и КК (на всякий) недостаточно. Сделать оператор виртульным тоже не поможет.
John Prick
757 / 690 / 124
Регистрация: 27.07.2012
Сообщений: 1,975
Завершенные тесты: 3
17.08.2016, 12:03     Перечислить все проблемы, которые вы видите в данном коде #14
Непонятен такой момент: приватное наследование использовано намеренно или это типа "ошибка"? Если первое, то нет смысла о копировании говорить между объектами двух этих классов. Всё равно это не скомпилится ведь.
Ferrari F1
Форумчанин
459 / 355 / 82
Регистрация: 27.01.2015
Сообщений: 2,134
Записей в блоге: 1
Завершенные тесты: 1
17.08.2016, 12:07     Перечислить все проблемы, которые вы видите в данном коде #15
C++
1
*f=*b;
А тут базовому объекту присваивается базовая часть произв. объекта, судя по синтезируемому оператору присваивания
John Prick
757 / 690 / 124
Регистрация: 27.07.2012
Сообщений: 1,975
Завершенные тесты: 3
17.08.2016, 13:16     Перечислить все проблемы, которые вы видите в данном коде #16
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
А тут базовому объекту присваивается базовая часть произв. объекта
Ну да, срезка. Но это всё имело бы смысл, только если наследование было бы открытое.
DrOffset
17.08.2016, 13:22
  #17

Не по теме:

Похоже на яндексовские задачки с сайта. Автор, если ты надеешься заучить ответы и рассказать их потом, то лучше сразу брось. Нормальный интервьер сразу раскусит тебя.

Babysitter
 Аватар для Babysitter
78 / 103 / 34
Регистрация: 23.11.2015
Сообщений: 318
Завершенные тесты: 1
17.08.2016, 14:27     Перечислить все проблемы, которые вы видите в данном коде #18
Цитата Сообщение от John Prick Посмотреть сообщение
приватное наследование использовано намеренно или это типа "ошибка"?
ошибка, иначе вот это

Цитата Сообщение от thechicho Посмотреть сообщение
Foo* b=new Bar(200);
вообще смысла не имеет
hoggy
5715 / 2306 / 417
Регистрация: 15.11.2014
Сообщений: 5,149
Завершенные тесты: 1
17.08.2016, 19:07     Перечислить все проблемы, которые вы видите в данном коде #19
Цитата Сообщение от thechicho Посмотреть сообщение
C++
1
2
Foo(int j) { i=new int[j]; }
* * ~Foo() { delete i; }
new int[j];
delete i;


нарушение правила трех
(отсутствия конструкторов копии/перемещения/оператор=/перемещающий оператор=)

про остальное вроде уже сказали

Добавлено через 51 секунду
Цитата Сообщение от thechicho Посмотреть сообщение
Foo(int j)
Цитата Сообщение от thechicho Посмотреть сообщение
Bar(int j)
у базового класса нет дефолтного конструктора

Добавлено через 41 секунду
Цитата Сообщение от thechicho Посмотреть сообщение
class Bar: Foo
Цитата Сообщение от thechicho Посмотреть сообщение
Foo* b=new Bar(200);
приведение существует.
но не доступно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2016, 19:20     Перечислить все проблемы, которые вы видите в данном коде
Еще ссылки по теме:

C++ Используется ли в данном коде ООП?
Что делает (->) в данном коде C++
Зачем переменная size в данном коде? C++
C++ Перечислить все подмножества n элементного множества {1,2,.,n}
Перечислить все K элементные подмножества n элементарного множества C++

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

Или воспользуйтесь поиском по форуму:
DrOffset
6817 / 4028 / 924
Регистрация: 30.01.2014
Сообщений: 6,847
17.08.2016, 19:20     Перечислить все проблемы, которые вы видите в данном коде #20
Цитата Сообщение от hoggy Посмотреть сообщение
приведение существует.
но не доступно.
Кстати, недоступное приведение можно легально обойти, если использовать с-style cast.
5.4/4
... the conversion is valid even if the base class is inaccessible ...
Yandex
Объявления
17.08.2016, 19:20     Перечислить все проблемы, которые вы видите в данном коде
Ответ Создать тему
Опции темы

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