Введение в тест C++
Тест "C++ - Средний уровень" является вторым по сложности тестом по языку программирования C++.
Тест C++ среднего уровня поможет вам закрепить приобретенные практические и теоретические знания по этому языку программирования.
Рекомендуем пройти данный тест всем, кто уверенно себя чувствует в фундаментальных основах C++.
Целевая аудитория теста C++
Тест будет интересен широкому кругу специалистов. Тем не менее целевой аудиторией все-таки являются программисты с реальным опытом в разработке программного обеспечения с использованием C++ и родственных технологий.
Перед прохождением теста рекомендуем Вам познакомиться с тестом по основам С++. Он доступен по следующей ссылке - тест по C++
Также очень рекомендуем к прочтению следующую статью - Использование перечислений в C++ (enum). В самом тесте мало вопросов по enum, но статья заслуживает внимания и наверняка Вам понравится.
Еще статьи, которые могут Вас заинтересовать:
Тематика теста C++
Кроме вопросов теоретического плана, которые проверяют глубокое понимание специалистом различных аспектов языка C++, в тесте также присутствует множество вопросов с фрагментами программного кода.
В тесте рассматриваются следующие темы:
- Синтаксис: проверяется знание и понимание особенностей использования операторов, типов данных, констант.
- Операторы и операции: в этом разделе рассмотрены вопросы по операторам, перегрузке операторов и по особенностям их использования.
- Функции: рассматриваются вопросы передачи параметров в функцию и возврата значения, а также шаблоны функций.
- Классы: в этом разделе рассматриваются вопросы связанные с классами, структурами, параметризируемыми типами, дружественными функциями. Рассматриваются базовые понятия о наследовании, полиморфизме и инкапсуляции.
- Другое: здесь рассматриваются вопросы, которые не вошли в остальные разделы.
Дальнейшее развитие теста по C++
Онлайн тест C++ периодически пополняется новыми вопросами. Часть из них добавляется нашими посетителями.
В ближайшее время будут добавлены вопросы по параметризируемым функциям и методам (generics), а также вопросы по работе с памятью (memory allocation).
Оставляйте Ваши отзывы о том, что можно улучшить в тесте, и мы обязательно это сделаем.
#include <iostream>
using namespace std;
class Base
{
int* data;
public:
Base(int size, int value=0)
{
data = new int(value);
}
~Base() { delete data; }
Base &operator+=(Base src)
{
*data += *src.data;
return *this;
}
operator int() { return *data; }
};
int main()
{
Base a(2);
Base b(2, 10);
a += b;
cout << b << endl;
return 0;
}
Возникнет ошибка при компиляции
Значение не определено
0
10
А где перегрузка оператора вывода для Base?! Будет ошибка компиляции имхо... А ответ "Значение не определено" =\
{
const int * int_array = new int[25]; //1
const char* char_array= "1231"; //2
delete []int_array; //3
delete []char_array; //4
}
Указано что ошибок нет.
Я ответил что ошибка в //4.
И мой gcc 4.2.1 так тоже считает:
malloc: *** error for object 0x3e70: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
И ,пожалуйста, оставляйте комментарии к конкретным вопросам, а то их потом очень долго искать. Спасибо.
Я указал, что будет ошибка в строке delete []char_array; //4.
Это считается ошибкой почему-то. Но.
Как и ожидал, программа, скомпилированная gcc 4.2.1 выдала следующее:
malloc: *** error for object 0x3e70: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Если закомментировать строку "//4" то ошибок нет.
Это гцц "нестандартный" или что?
Код:
int main()
{
const int * int_array = new int[25]; //1
const char* char_array= "1231"; //2
delete []int_array; //3
delete []char_array; //4
}
2. Лично мне наплевать на то что вывел ваш компилятор. Это тест по языку, а не косякам компиляторов.
Спасибо за добавление вопросов. Скоро их проверим.
class myObj { template <class R> void memFunc() {} };
!!!Это ошибка Класс R не определен выше!!!
myObj<float> o;
o.<int>memFunc();
Какова прнципиальная разница между
delete x;
и
delete [] x;
по стандарту при удалении массива выделенных объектов оператором delete вместо delete[] поведение не определено.
for(int i = 0; i<5; i++) sum += i,
cout<<sum,
- я только в конце (в результатах) обнаружил что там запятые :)
Так как время ограничено, то стараешься тратить его как можно меньше на вопрос и сильно в код не всматриваешься (а потом удивляешься..).
Даже если кто то, когдато такое и написал бы, в чом я очень сомневаюсь. то уж точно так бы не форматировал.
Предложил новый вопрос для этого теста и сразу стали 3 вопроса:
- Как посмотреть статус предложеных вопросов? Возможно ли дополнить или подпраить предложение?
- Хорошо бы ввести "варианты" вопроса. Т.е. фактически один и тот же вопрос со слегка поменяными условиями. Но тогда надо внести ограничение на появление вариантов в тесте. Будет поддержка? Смысл - значительно поысить смысл поторной сдачи теста для "закрепления". Надо быть внимательным к услоиям, заучить ответы будет сложнее, только понимание "почему".
- Предлагая вопрос, хорошо бы иметь поле "сопроождающей" информации (ссылки на стандарт, на каких компиляторах тестировался, возможные варианты, цель...) - не все из этого есть смысл пихать в объяснение. Будет поддержка?
А вообще идея community quizz - респект.
Еще бы хорошо иметь отслежку количества новых для себя вопросов в тестах и приоритетность задания "свежих" вопросо или как минимум гарантированый вес для большего эффекта обучения.
Заранее спасибо
1. Пока что нет возможности посмотреть статус добавленных вопросов. В сайдбаре в соответствующем блоке есть опрос "Нужно ли иметь возможность следить за добавленными Вами вопросами?". Если будет достаточное количество голосов - то такую функциональность обязательно сделаем.
2. Идея неплохая, но трудно предсказать выгоду от ее реализации. У нас была похожая идея - создать вопросы-темплейты, в которых некоторые части кода в вопросе (и соответственно ответы) меняются.
3. В некоторых вопросах в блоке "объяснение" приводятся ссылки на стандарт и рассказывается, почему ответ на вопрос именно такой. По возможности стараемся добавлять объяснение к большинству вопросов.
4. В идеале мы хотим сделать так, чтобы в каждом тесте было столько вопросов, что вероятность их повторения при повторном прохождении теста была минимальной. Но это пока что мечты :).
5. Предварительно Ваш вопрос достаточно хороший. Он будет добавлен в тест после проверки модератором раздела C++
Стопроцентная поддержка стандарта действительно невозможна, но приблизиться к нему можно, и каждый комплятор это делает со своей стороны :)