Темы, которые касаются не только тестов, IT и Quizful, вы можете создавать в новом разделе Обсуждения.

Вдобавок, появилась возможность комментировать профиль пользователя на странице профиля.

Надеемся, эти нововведения Вам понравятся.
Знаете ли Вы, что

Вы можете подписаться на RSS ленту новых тестов сервиса Quizful, в том числе и отдельно по каждой категории

Топ контрибуторов
loading
loading
Статистика

Тестов: 127, вопросов: 5126. Пройдено: 54989 / 186427.

Тест знаний C++ - Средний уровень

Вам необходимо зарегистрироваться и войти в систему для прохождения тестов.
head tail Информация о тесте
категория
C++
пройден1804 из 8207
вопросов в тесте20 из 122
требуется0.0 Q
сертификационныйда
в рейтинге да
время20 минут
авторadmin
head tail Модераторы
 WebCumo    Aye_Aye  
head tail Последние сертификаты
26.07.2010
09.07.2010
02.07.2010
18.06.2010
18.04.2010

Введение в тест C++

Тест "C++ - Средний уровень" является вторым по сложности тестом по языку программирования C++.

Тест C++ среднего уровня поможет вам закрепить приобретенные практические и теоретические знания по этому языку программирования.

Рекомендуем пройти данный тест всем, кто уверенно себя чувствует в фундаментальных основах C++.

Целевая аудитория теста C++

Тест будет интересен широкому кругу специалистов. Тем не менее целевой аудиторией все-таки являются программисты с реальным опытом в разработке программного обеспечения с использованием C++ и родственных технологий.

Перед прохождением теста рекомендуем Вам познакомиться с тестом по основам С++. Он доступен по следующей ссылке - тест по C++

Также очень рекомендуем к прочтению следующую статью - Использование перечислений в C++ (enum). В самом тесте мало вопросов по enum, но статья заслуживает внимания и наверняка Вам понравится.

Еще статьи, которые могут Вас заинтересовать:

Тематика теста C++

Кроме вопросов теоретического плана, которые проверяют глубокое понимание специалистом различных аспектов языка C++, в тесте также присутствует множество вопросов с фрагментами программного кода.

В тесте рассматриваются следующие темы:

  • Синтаксис: проверяется знание и понимание особенностей использования операторов, типов данных, констант.
  • Операторы и операции: в этом разделе рассмотрены вопросы по операторам, перегрузке операторов и по особенностям их использования.
  • Функции: рассматриваются вопросы передачи параметров в функцию и возврата значения, а также шаблоны функций.
  • Классы: в этом разделе рассматриваются вопросы связанные с классами, структурами, параметризируемыми типами, дружественными функциями. Рассматриваются базовые понятия о наследовании, полиморфизме и инкапсуляции.
  • Другое: здесь рассматриваются вопросы, которые не вошли в остальные разделы.

Дальнейшее развитие теста по C++

Онлайн тест C++ периодически пополняется новыми вопросами. Часть из них добавляется нашими посетителями.

В ближайшее время будут добавлены вопросы по параметризируемым функциям и методам (generics), а также вопросы по работе с памятью (memory allocation).

Оставляйте Ваши отзывы о том, что можно улучшить в тесте, и мы обязательно это сделаем.


Важно: Ниже обсуждается только тест в целом: покрытие тематик, типы вопросов, пути улучшения теста и так далее.

Замечания, касающиеся отдельных вопросов теста, просьба оставлять в соответствующих топиках,
которые доступны на странице результатов прохождения теста возле каждого вопроса.

Комментариев: 44
 xega05.07.2010 | 22:14:03
Хороший ресурс, неплохо помогает найти пробелы в знаниях. Спасибо всем кто работает над ним. Вот если бы ещё и варианты ответов в разной последовательности отображались, хотя-бы там где это возможно. А то при многократном прохождении теста в подсознании невольно откладывается ещё и номер правильного ответа :)
ответить
 art07.07.2010 | 15:16:13
Варианты ответов перемешиваются, но не во всех вопросах.
ответить
 stbzh23.03.2010 | 18:03:41
По-моему, слишком много внимания (я насчитал как минимум три вопроса) уделено факту что: The expression E1[E2] is identical (by definition) to *((E1)+(E2)). По сути, его знание не является гипернеобходимым для теста на знание основ и базы языка. А по-хорошему за такие вещи в реальном коде надо еще и наказывать.
ответить
 admin23.03.2010 | 18:40:37
Согласен, что это не самая важная вещь, которую нужно знать, но так отработал рандом - в следующий раз ни одного не попадется (и не минимум 3, а максимум 2 :)).

"А по-хорошему за такие вещи в реальном коде надо еще и наказывать." - это тесты, они проверяют знания языка, писать реальный код с помощью тестов научиться невозможно.
ответить
 Rpahut12.03.2010 | 21:12:54
А чего код не во всех вопросах подсвечивается?
Думал - вот чего нехватает, и тут же в тесте сразу два вопроса с подсветкой.
ответить
 art12.03.2010 | 22:03:49
Не все те пользователи, которые добавляют вопросы, обрамляют правильно блоки кода. Будем понемногу это фиксить.
ответить
 gosen01.03.2010 | 21:57:48
Какое значение будет выведено в консоль в результате работы следующей программы:

#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?! Будет ошибка компиляции имхо... А ответ "Значение не определено" =\
ответить
 shikakito03.03.2010 | 09:56:15
Имеется оператор приведения типа к int. Так что все правильно
ответить
 rroller09.03.2010 | 21:19:19
Это потому, что оператор += принимает объект по значению, а не ссылке - b копируется (а конструктор копий не определен явно) вызывается деструктор - оператор делете и потом вы используете b с уже невалидным указателем (память - то освободили, а вы его разыменовываете). поведение программы - неопределено.
ответить
 motya20.02.2010 | 21:04:37
int main()
{
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
ответить
 admin23.02.2010 | 15:45:05
Ошибка в строке 4, а Вы указали, что ошибок нет. Просьба быть внимательнее.
И ,пожалуйста, оставляйте комментарии к конкретным вопросам, а то их потом очень долго искать. Спасибо.
ответить
 motya20.02.2010 | 21:02:27
В вопросе "В каких строках произойдут ошибки компиляции или, в случае успешной компиляции, ошибки времени выполнения при вызове функции:" указано что "ошибок не будет".

Я указал, что будет ошибка в строке 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
}
ответить
 analizer20.02.2010 | 22:01:45
1. Претензии к вопросу следует высказывать в комментариях к самому вопросу, а не всему тесту вцелом. Желания использовать телепатические способности и просматривать все 83 вопроса теста в поисках "того единственного" ни у кого нет.
2. Лично мне наплевать на то что вывел ваш компилятор. Это тест по языку, а не косякам компиляторов.
ответить
 Shodan13.03.2010 | 21:19:01
в общем, тест для болтунов-теоретиков, а не практиков?
ответить
 analizer14.03.2010 | 01:04:16
А вам бы хотелось чтобы тест был для тех кто знает из какой части учебника по программированию надо скопировать кусок кода чтобы что-то заработало?
ответить
 rroller09.03.2010 | 21:21:57
Компилятор не может обнаружить такую ошибку. Однако же она есть и программа упадет во время исполнения.
ответить
 Nez18.02.2010 | 17:57:00
Это улет, хотелось бы чтобы "писатели" этих вопросов при отправлении вопроса должны были подписываться "да, я клянусь что ПРОВЕРЯЛ 'правильность' вариантов хотя бы на одной платформе". А то просто ппц, пока не понял что лажа даже глаза на уши слазили... :(
ответить
 analizer18.02.2010 | 18:11:13
искренне надеюсь, что слезание глаз на уши помогает вам принять более гуманоидные формы.
ответить
 m_cplusplus08.10.2009 | 18:34:48
template <class T>
class myObj { template <class R> void memFunc() {} };
!!!Это ошибка Класс R не определен выше!!!
ответить
 analizer08.10.2009 | 18:44:56
lolwut?
ответить
 d9k18.11.2009 | 13:53:08
ящитаю, что при вызове метода нужно будет просто писать что-то типа

myObj<float> o;
o.<int>memFunc();
ответить
 analizer18.11.2009 | 13:55:27
А стандарт языка так не считает... Вы написали бред с точки зрения синтаксиса языка.
ответить
 rride30.08.2009 | 13:07:27
myObj *x = new myObj[100];
Какова прнципиальная разница между
delete x;
и
delete [] x;

по стандарту при удалении массива выделенных объектов оператором delete вместо delete[] поведение не определено.
ответить
 analizer30.08.2009 | 14:57:32
Разыменование NULL - это тоже UB, но у вас же не возникает вопрос о том какая разница какое значение записано в указатель когда вы его разыменовываете.
ответить
 COBA08.09.2009 | 06:32:31
rride прав, analizer - нет.
ответить
 analizer08.09.2009 | 06:45:57
может быть помимо слов у вас есть и аргументы? ну или хотя бы цитата из стандарта которую я упустил?
ответить
 legion21311.08.2009 | 10:03:24
Немного напрягают вопросы "на хитрость", даже не то что на хитрость, а на внимательность что ли, вот например:
for(int i = 0; i<5; i++) sum += i,
cout<<sum,
- я только в конце (в результатах) обнаружил что там запятые :)
Так как время ограничено, то стараешься тратить его как можно меньше на вопрос и сильно в код не всматриваешься (а потом удивляешься..).
ответить
 sli_ukraine03.11.2009 | 03:58:20
поддерживаю, так же не заметил.


Даже если кто то, когдато такое и написал бы, в чом я очень сомневаюсь. то уж точно так бы не форматировал.
ответить
 romanik08.08.2009 | 02:56:02
Скорее по usability, но...
Предложил новый вопрос для этого теста и сразу стали 3 вопроса:
- Как посмотреть статус предложеных вопросов? Возможно ли дополнить или подпраить предложение?
- Хорошо бы ввести "варианты" вопроса. Т.е. фактически один и тот же вопрос со слегка поменяными условиями. Но тогда надо внести ограничение на появление вариантов в тесте. Будет поддержка? Смысл - значительно поысить смысл поторной сдачи теста для "закрепления". Надо быть внимательным к услоиям, заучить ответы будет сложнее, только понимание "почему".
- Предлагая вопрос, хорошо бы иметь поле "сопроождающей" информации (ссылки на стандарт, на каких компиляторах тестировался, возможные варианты, цель...) - не все из этого есть смысл пихать в объяснение. Будет поддержка?

А вообще идея community quizz - респект.
Еще бы хорошо иметь отслежку количества новых для себя вопросов в тестах и приоритетность задания "свежих" вопросо или как минимум гарантированый вес для большего эффекта обучения.
Заранее спасибо
ответить
 romanik08.08.2009 | 02:59:52
Упс, мои извинения за буквы "в/d'. опять малая печение точила над ноутом... Надо отучать малую и чистить клаву. Или это уже пушной зверек, подкрадывающийся к клаве ж) и пора заводить внешнюю.
ответить
 admin11.08.2009 | 10:36:13
Ваш вопрос проверен и опубликован в тесте по C++ среднего уровня. Спасибо, вопрос хороший.
ответить
 admin08.08.2009 | 12:54:18
Спасибо за комментари.
1. Пока что нет возможности посмотреть статус добавленных вопросов. В сайдбаре в соответствующем блоке есть опрос "Нужно ли иметь возможность следить за добавленными Вами вопросами?". Если будет достаточное количество голосов - то такую функциональность обязательно сделаем.
2. Идея неплохая, но трудно предсказать выгоду от ее реализации. У нас была похожая идея - создать вопросы-темплейты, в которых некоторые части кода в вопросе (и соответственно ответы) меняются.
3. В некоторых вопросах в блоке "объяснение" приводятся ссылки на стандарт и рассказывается, почему ответ на вопрос именно такой. По возможности стараемся добавлять объяснение к большинству вопросов.
4. В идеале мы хотим сделать так, чтобы в каждом тесте было столько вопросов, что вероятность их повторения при повторном прохождении теста была минимальной. Но это пока что мечты :).
5. Предварительно Ваш вопрос достаточно хороший. Он будет добавлен в тест после проверки модератором раздела C++
ответить
 JohnKEA23.06.2010 | 11:31:28
Сори, не нашел "В сайдбаре в соответствующем блоке есть опрос "Нужно ли иметь возможность следить за добавленными Вами вопросами?"", поэтому добавляю свой голос в пользу этой фичи, прямо здесь!
ответить
 art23.06.2010 | 11:35:33
Такой опрос был проведен еще довольно давно и соответствующая функциональность реализована. Сейчас пользователь может следить за своими вопросами в подменю "мои вопросы" меню "Профиль".
ответить
 JohnKEA23.06.2010 | 11:53:49
Да, конечно, спасибо. Тем не менее, после того, как я сохраняю вопрос, у меня нет возможности "следить" за ним, т.е., я не вижу поставлен ли он в очередь, какие вопросы не прошли, за какие вопросы сколько бонусов назначено, и т.д. Возможно эта тема уже тоже обсуждалась, в таком случае мои извинения за беспокойство.
ответить
 art23.06.2010 | 11:58:02
Следить за статусом добавленных вопросов можно на тех же "моих вопросах". Награждения за вопросы есть на профиле. Если вопрос "не прошел", то к нему будет оставлен комментарий и Вы получите нотификацию на почту.
ответить
 JohnKEA23.06.2010 | 12:10:57
Спасибо :-)
ответить
 fazenen21.07.2009 | 07:59:54
Хорошо, что я не знаю C++.
ответить
 wheelly05.07.2009 | 20:00:19
Я хотел бы добавить два вопроса в средний уровень, но не хочу проходить тесты снова, чтобы это сделать. Можно это сделать как-то по-другому?
ответить
 admin05.07.2009 | 20:49:55
Конечно. Вы можете со страницы с результатами зайти на тест , который прошли успешно, и внизу страницы есть ссылка "Предложить свой вопрос".
ответить
 skochkarev23.06.2009 | 15:07:02
В одном из вопросов нужно было указать типы C++. Так вот. enum - это не тип данных в C++. enum Days {} - тип, а сам по себе enum не может быть типом.
ответить
 AnaXarSys01.05.2009 | 23:43:06
Ааа дайте немного больше времени
ответить
 SadSido21.03.2009 | 22:38:18
"Вопросы должны основываться на стандарте" - это правда. Но что толку в стандарте, если нет компилятора, который его бы стопроцентно поддерживал? :)
ответить
 analizer22.03.2009 | 23:27:09
А что толку в споре о "правильном" ответе если у каждого будет свой "эталон"? ;)
Стопроцентная поддержка стандарта действительно невозможна, но приблизиться к нему можно, и каждый комплятор это делает со своей стороны :)
ответить
Добавить комментарий