Это 100% -ный теоретический вопрос, и, возможно, мнение основано.Неожиданный ответ на профессиональное интервью
В профессиональном интервью я получил печатную страницу с большим количеством ужасно написанного и неправильно отформатированного кода двух class
es, чтобы анализировать их по строкам в речи. Назовем эти структуры данных A
и B
. Не было никаких проблем или каких-либо сведений о ожидаемом поведении.
Однако один из их вопросов действительно разозлил меня.
После определения подозрительного поведения алгоритма и множества потенциальных и фактических ошибок они попросили меня идентифицировать еще одну ошибку. Я определил несколько других очевидных проблем, но я не понял, чего они хотят от меня. Ну, когда они сказали мне ответ, он взорвал мой разум. Упрощенная версия A
и B
является следующее (я оставил только те методы, которые являются частью их идеи):
template <typename T>
class A
{
public:
// elements are dynamically allocated on the heap
const T& getValue(unsigned i) const // I'm not even sure it was const
{
// return element at position 'i'
}
virtual void setValue(unsigned i, const T &value)
{
// sets the element at position 'i'
}
};
template <typename T>
class B: public A<T>
{
public:
virtual void setValue(unsigned i, const T &value)
{
// set the element at position 'i' using A<T>::setValue()
// then sort all elements in descending order
}
};
Ну, решение не компиляции, выполнения, или логическая ошибка. Даже потенциальный риск для них.Ошибка : с B::setValue
сортирует данные после размещения элемента, вы не можете проверить, являются ли данные, которые вы получаете в данной позиции, то же, что вы сохранили в этой заданной позиции. Однако с A
вы можете это сделать. Это непревзойденное поведение между A
и B
рассматривается как ошибка (и они добавили, что это не ошибка, но все же это ошибка).
Я думаю, что это полностью выбор дизайна (так как вся точка B
предназначена для хранения отсортированных данных), и я бы не сказал, что это ошибка, особенно без заявления о проблеме или какой-либо информации о ожидаемом поведении. Это даже не нарушает идею или концепцию полиморфизма.
Не могли бы вы назвать это ошибкой?
Почему кто-нибудь хочет проверить, остается ли элемент по-прежнему в том же положении после сортировки? – user463035818
'A :: setValue (1, 5)' имеет тип 'void', для которого нет выражения' == '. –
Я думаю, что они имели в виду, что они не могут быть проверены вне класса (так как они не предоставили никакого вспомогательного метода для этого). – plasmacel