На сайте Quizful добавлен
Тест по Django.

Благодарим пользователя Averrin за составление теста.
Знаете ли Вы, что

индивидуальный рейтинг по категориям можно просмотреть в Вашем профиле

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

Тестов: 120, вопросов: 4351. Пройдено: 41935 / 131394.

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

Вам необходимо зарегистрироваться и войти в систему для прохождения тестов.
head tail Информация о тесте
категория
C++
пройден1393 из 6105
вопросов в тесте20 из 89
требуется0.0 Q
сертификационныйда
в рейтинге да
время20 минут
авторadmin
head tail Модераторы
Этот тест еще никто не модерирует
head tail Последние сертификаты
11.02.2010
08.02.2010
06.01.2010
14.12.2009
25.11.2009

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Комментариев: 33
 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. Лично мне наплевать на то что вывел ваш компилятор. Это тест по языку, а не косякам компиляторов.
ответить
 rroller09.03.2010 | 21:21:57
Компилятор не может обнаружить такую ошибку. Однако же она есть и программа упадет во время исполнения.
ответить
 Nez18.02.2010 | 17:57:00
Это улет, хотелось бы чтобы "писатели" этих вопросов при отправлении вопроса должны были подписываться "да, я клянусь что ПРОВЕРЯЛ 'правильность' вариантов хотя бы на одной платформе". А то просто ппц, пока не понял что лажа даже глаза на уши слазили... :(
ответить
 analizer18.02.2010 | 18:11:13
искренне надеюсь, что слезание глаз на уши помогает вам принять более гуманоидные формы.
ответить
 Sekt10404.12.2009 | 19:18:01
как я узнаю что мой вопрос добавлен ?
ответить
 admin04.12.2009 | 19:56:25
В пункте меню "Профиль" есть подпункт "мои вопросы". Статус вопросов изменится с "проверяется" на "утвержден", что и означает, что он был опубликован. Кроме того, Вам добавится Q.
Спасибо за добавление вопросов. Скоро их проверим.
ответить
 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++
ответить
 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
А что толку в споре о "правильном" ответе если у каждого будет свой "эталон"? ;)
Стопроцентная поддержка стандарта действительно невозможна, но приблизиться к нему можно, и каждый комплятор это делает со своей стороны :)
ответить
Добавить комментарий