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

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

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

Свои вопросы для тестов можно добавлять на странице с информацией о тесте. При этом для некоторых тестов добавление вопросов закрыто

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

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

Тест знаний C++ - Основы

Вам необходимо зарегистрироваться и войти в систему для прохождения тестов.
head tail Информация о тесте
категория
C++
пройден5166 из 12213
вопросов в тесте20 из 130
требуется0.0 Q
сертификационныйнет
в рейтинге да
время20 минут
авторadmin
head tail Модераторы
 neyrox    valyala    zavisimosti    akmal  

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

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

Для специалистов, которые хотят получить представление о возможностях языка программирования C++ или только начинают изучать этот мощный язык, создан тест "Основы C++".

Этот тест будет полезен для закрепления материала по основам C++, а также проверки уровня своих знаний.

Предварительные требования к тесту по C++

Подразумевается, что перед прохождением теста вы уже знаете основные понятия, такие как "переменная", "структура", "функция", знаете синтаксис основных операторов и конструкций языка C++, умеете компилировать, отлаживать и запускать программы написанные на Си.

Также рекомендуем к прочтению следующие статьи - Основы C++ (static, const, preprocessor), Статические проверки в C++, а также Перегрузка функций в C++ по возвращаемому значению

Структура теста по C++

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

  • Синтаксис: вопросы этого раздела проверят знание ключевых слов языка, оперторов, основных типов (char, long, double), условного оператора, циклов, констант, комментариев.
  • Функции: этот раздел содержит вопросы касающиеся объявлений и вызовов функций. Рассматриваются вопросы передачи параметров в функцию и возврата значения. Часть вопросов посвящена inline функциям, шаблонам функций, а также понятию рекурсии.
  • Классы: в этом разделе рассматриваются вопросы связанные с объявлением классов, отличиями между классами (class) и структурами (struct), описаниями конструкторов, деструкторов, полей и методов класса. Рассматриваются базовые понятия о наследовании, перегрузке методов и операторов.
  • Другое: здесь рассматриваются вопросы, которые не вошли в остальные разделы: директивы препроцессора, компиляция, запуск, отладка программ и другое.

Если вы уверенно отвечаете на большинство вопросов данного теста, Вам наверняка будет интересно попробовать себя в тестировании по более сложным тематикам, например, "C++ (средний уровень)" или "C++ Templates".


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

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

Комментариев: 73
 black_27.07.2010 | 19:35:50
Тесты отличные, мне очень понравились, много узнал и научился
ответить
 xega16.06.2010 | 15:26:43
Почему-то всегда в первом вопросе код отображется в одну строку. Это так задумано?
ответить
 art16.06.2010 | 15:57:23
Нет, это баг. Какой ОС и браузером Вы пользуетесь?
ответить
 xega16.06.2010 | 16:05:00
Пользуюсь Firefox 3.6.3 в XP Prof x64 Edition c SP2. На домашнем XP Prof x32 Edition это тоже проявлялось.
ответить
 art16.06.2010 | 16:20:11
Нам не удается воспроизвести. Скорее всего связано с тем, что не догружается джаваскрипт. Попробуйте обновить страницу и скажите результат.
ответить
 xega17.06.2010 | 10:32:41
Обновление страницы не помогает. Заметил, что если перейти к другому вопросу, а затем вернуться проблема исчезает.
Посмотрел через firebug - проблема видимо в том что в первом случае строки не разделены тэгом <br>, а потом они появляются.
ответить
 art17.06.2010 | 12:45:01
Скорее всего глючит подсветка кода. Будем еще перепроверять.
ответить
 Elvis26.05.2010 | 17:17:40
Я прошёл ггг :) Elvis Great King
ответить
 JohnKEA26.05.2010 | 14:54:09
Тест завалил, не смотря на то, что почитываю Страустрапа + опыт в разработке. Вопросы очень интересные и как правило метят в самые слабые места, браво, удовольствие получил + шок для самооценки.
ответить
 zavisimosti25.06.2010 | 19:06:51
шок тоже полезен:)
ответить
 linkmagic05.05.2010 | 16:17:54
Очень интересный тест, и вопросы хорошие и время в самый раз для данного уровня.

Хочу предложить разработчикам сделать тест англоязычным, или хотя бы добавить выбор языка (рус/англ) перед началом тестирования, т.к. русский очень хорош для собственного понимания сути, а английский нужен для того, что бы было проще сдавать экзамен по сертификации, что бы, так сказать, заранее готовить почву.
ответить
 zavisimosti25.06.2010 | 19:07:44
возьметесь за перевод?:)
ответить
 Ramaloke07.04.2010 | 13:16:58
Закончили изучать т.с. основы. Тест завалил, 12/20, но действительно у меня небольшие еще непонятки с указателями (опыт надо).

Но тест интересный, поучительный.
ответить
 asmatic05.04.2010 | 16:27:24
Отличный тест на знание C++! Я его 2 раза завалил - прошел только с 3-ей попытки, хотя программирую на нем уже 8 лет! После теста возникает непреодолимое желание схватить книгу Страуструпа и читать до посинения! Жаль что времени на это у меня нет и не предвидится :( А так Автору теста - 5!
ответить
 madridist4ever18.03.2010 | 21:13:56
очень давно ничерта на С++ не писал,удивиляюсь что ответил на большенство вопросов верно,почти прошел тест :)
ИМХО,слишком уж легкий...
ответить
 admin28.03.2010 | 21:40:26
Потому он и называется C++ _основы_
ответить
 al_stal13.03.2010 | 14:24:14
До прохождения теста считал себя если не крутым, то неплохим знатоком С++, благо кодирую на нем уже года три, есть несколько завершенных проектов... но тест оказался "ушатом холодной воды" выявил кучу моих пробелов в теории - пройти его сумел только с 4го раза. Почувствовал себя невеждой. Срочно открыл книги Кернигана, Страуструпа и Майерса - сидеть мне с ними по вечерам месяц, пока не пройду без ошибок все тесты.
ответить
 riffmaster04.02.2010 | 11:22:29
Это грустно... это печально.


PS: лучше уметь писать программы, чем знать C++ )
ответить
 Ihorko23.02.2010 | 19:34:14
Если не знаеш С++ , тогда и програм писать не будешь!
ответить
 analizer23.02.2010 | 20:40:32
А если не знаешь русский язык, то лучше на нём и не писать.
ответить
 ksean02.02.2010 | 09:35:03
Хороший тест, учитывает многие тонкости языка.
ответить
 maxkoryukov16.01.2010 | 12:14:39
В идеале - фрагменты кода набрать в MS VS, чтобы была подсветка и проч., сделать PrintScreen, вырезать изображение кода и вставить в тесты. Это круто, и защищает от копипасты кода в эту самую студию во время прохождения теста. Наверно это трудно, но как было бы круто, да?


А так, хорошо было бы номера строк в сорцах вытянуть влево, чтобы это были номера строк, а не комментарии. Я вот проходил тесты на нетбуке - не видно иногда номера строк))
ответить
 analizer17.01.2010 | 17:12:12
MS VS не нужен.
ответить
 AngryKid19.11.2009 | 00:05:14
Да уж на счет методов не понятно. Конструктор вызывается при создании переменной. В дальнейшем вызвать конструктор не возможно. Тобишь нельзя будет воспользоваться методом класса. Я лично считаю что всеж метод он на то и метод чтоб им пользоваться:))
ответить
 analizer19.11.2009 | 00:51:17
А я лично считаю, что стандарт он на то и стандарт чтобы его читать... ну ещё чтить и восхвалять и ожидать пришествия C++0x
ответить
 diman_28.11.2009 | 23:01:07
class Foo
{
Foo()
{
cout << "A";
}
~Foo()
{
this->Foo::Foo();
}
};
\\кажися так
ответить
 suhorukovs23.10.2009 | 19:01:48
Являются ли конструкторы и деструкторы методами класса?

Да - "правильный ответ"

Нет

а что можно написать указатель на декструктор??
ответить
 analizer25.10.2009 | 18:38:55
А возможность получения указателя является обязательным признаком метода класса?
ответить
 suhorukovs23.10.2009 | 18:59:45
Когда выполняются директивы препроцессора?

"правильный ответ": До компиляции - т.е. во "время редактирования" ? :)
ответить
 analizer25.10.2009 | 18:37:10
Во время препроцессирования. Ваш К.О.
ответить
 VFenix28.09.2009 | 21:48:59
Могу показать конструктор который возвращает значение :)
А чем отличается объявление конструктора от обычного метода?

int a;
float b = 3.14;
a = b;

ДАЙТЕ МНЕ ЭТОТ ЧУДО КОМПИЛЯТОР!!!!!!!

sum(int a = 7, int b = 8) - а кто сказал что так функция не вызовется???
ответить
 analizer28.09.2009 | 22:07:11
>Могу показать конструктор который возвращает значение :)
Покажите
Вот только чтобы он компилировался более чем одним компилятором

>ДАЙТЕ МНЕ ЭТОТ ЧУДО КОМПИЛЯТОР!!!!!!!
Вышлю диск с сырцами после того как получу от вас письмо с вложенной кнопкой Caps Lock выдранной из вашей клавиатуры

>sum(int a = 7, int b = 8) - а кто сказал что так функция не вызовется???
Стандарт
ответить
 Hexxx23.12.2009 | 17:31:20
Согласен с VFenix, конструктор возвращает значение. И это значение указатель на экземпляр класса, и так делают все компиляторы. Как минимум Gcc, Visual C, Realview Arm.
Это позволяет не делать лишних движений при присвоении значения переменной:
MyClass * a = new MyClass ();
Результат оператора new не сохраняется, он передается в конструктор MyClass();
А вот результат выполнения функции MyClass() будет записан в переменную a.
Такова реальность. А тест видимо на теорию.
ответить
 analizer23.12.2009 | 17:39:27
Вы бредите. Nuff said.
ответить
 Hexxx23.12.2009 | 22:21:28
Да 8 леть брежу. Занимаясь реверсингом кода всевозможных компиляторов и платформ.
ответить
 analizer24.12.2009 | 09:06:59
А я занимаюсь программированием. И вопрос именно по программированию, а не тому что вы наковыряли в отдельно взятом компиляторе.
ответить
 Hexxx24.12.2009 | 11:07:18
Ок, не хотите верить словам. Проверьте код.
class MyClass
{
public:
MyClass();
};

MyClass::MyClass()
{
throw 0;
}


int _tmain(int argc, _TCHAR* argv[])
{
MyClass * p=(MyClass *)0x12345678;
try
{
p=new MyClass();
}
catch(...)
{
}
printf("%08X",p);
return 0;
}
Как вы думаете что напечатает данный пример?
Правильный ответ: 0x12345678
Если бы результат new сохранялся в переменную, то p было бы равно указателю на память. Но как я уже говорил, переменной присваивается результат возвращаемый конструктором. Здесь конструктор не отработает, поэтому p продолжит быть равно 0x12345678
ответить
 analizer24.12.2009 | 11:31:18
Comeau C/C++ 4.3.10.1 (Oct 6 2008 11:28:09) for ONLINE_EVALUATION_BETA2
Copyright 1988-2008 Comeau Computing. All rights reserved.
MODE:strict errors C++ C++0x_extensions

"ComeauTest.c", line 13: error: identifier "_TCHAR" is undefined
int _tmain(int argc, _TCHAR* argv[])
^

"ComeauTest.c", line 23: error: identifier "printf" is undefined,
If in C++ mode: Did you #include <stdio.h> or #include <cstdio>?
If in C mode: Did you #include <stdio.h>?
printf("%08X",p);
^

2 errors detected in the compilation of "ComeauTest.c".
ответить
 Hexxx24.12.2009 | 11:34:33
Детский сад...

Я понял ваш уровень. Спорить дальше не буду.
ответить
 analizer24.12.2009 | 11:42:14
Детский сад - это не уметь писать на языке С++ и при этом спорить о нём.
ответить
 analizer24.12.2009 | 11:41:09
Я же уже сказал - вы бредите.
в переменную "p" производится запись значения возвращаемого оператором new, который в качестве параметра принимает в качестве параметра только количество байт, которые он должен выделить.
В вашем примере, который может работать только на одной линейке компиляторов, вызов конструктора прерывается раскруткой стека (вызванной исключением), таким образом оператор new не вызывается. Именно поэтому значение "p" не меняется, а не потому что "переменной присваивается результат возвращаемый конструктором"
ответить
 rudyard_k28.03.2010 | 02:15:10
А new, вроде бы, операция, а не оператор?

Непонятно, как new может не вызываться, если вызов конструктора прерывается раскруткой стека. Ведь конструктор должен быть вызван для инициализации области памяти. А область памяти выделяется new, разве нет?
ответить
 VFenix28.09.2009 | 21:39:29
1. external уже не является конструктором внешних переменных?
2. Интересно какой компилятор воспринимает вывод массива без указания элементов?
3. Ключевые слова конструкции если это только if??? Прочитайте что такое ключевые слова.
4. *var*=2; - покажите компилятор который это проглотит!
5. Фундаментальные типы чего? vector например фундаментальный тип DirectX, уточняйте.
ответить
 analizer28.09.2009 | 22:04:08
0. Добавляйте пожалуйста комментарии непосредственно к вопросам. Фразы без контекста комментировать трудно
1. См. выше
2. См. выше
3. Где? Я вроде как уже все самые интересные места стандарта прочитал...
4. Все сырцы GCC сюда не влезут, так что я наверное ограничусь ссылкой на Como: http://comeaucomputing.com/tryitout/
5. Тест называется С++ - Основы, а фундаментальные типы Direct X не станут частью С++ даже в следующем стандарте. Sad but true...
ответить
 Lefast02.09.2009 | 17:57:15
с количеством вызываемых деструкторов классный вопрос! К сожелению не заметил, что в одной из функций объект передаётся как ссылка :( Прикольный тест!
ответить
 dimka_kep16.08.2009 | 07:30:06
Подучить...

А тест хорош!
ответить
 NewOne_15.08.2009 | 17:47:01
Пожалуй, соглашусь с тем что 12 считается проходным результатом, поскольку всегда можно забыть какие-то мелкие нюансы.
ответить
 breusov11.08.2009 | 06:36:42
Просто если есть несколько категорий, куда хотелось бы добавить вопросы, то очень неудобно открывать кучу вкладок и листать постоянно вниз.
В конце концов можно ли отправлять придуманные тесты вам на почту?
ответить
 admin11.08.2009 | 09:12:08
Конечно, тесты можно отправлять нам по почте.
ответить
 breusov11.08.2009 | 06:30:15
Два момента относительно добавления тестов:
1. На сайте представлены три формата ответов: выберите единственный правильный (radiobutton), выберите все правильные (checkbox), введите ответ(строка для ввода). Как/где надо указывать формат ответа при добавлении теста? В частности, что я хочу, чтобы был один правильный ответ, но пользователь мог отметить несколько или чтобы ответ надо было ввести. Дня три назад можно было выбирать формат ответа в выпадающем списке, но возможность я смотрю убрали...

2. Можно ли сделать добавление вопросов как-нибудь более удобно? В текущий момент действие выглядит где-то так: Зайти на сайт, открыть профиль, проклацать несколько раз, пока не отобразиться история о прохождении Нужного Теста, открыть его, добавить вопрос.
Например, чтобы при клике на зеленой галочке возле теста открывалась форма добавления вопроса ИЛИ на странице профиля была кнопка добавить вопрос и выпадающий список категорий куда можно добавлять. Лично мне был бы удобен второй вариант.
ответить
 admin11.08.2009 | 09:10:34
1. Мы немного упростили форму добавления вопросов. Это связано с несколькими причинами. В зависимости от добавленного вопроса и теста, куда добавлялся вопрос, уже и принимается решение о типе вопроса (single/multi/text).
2. Правильное замечание. В ближайшее время подумаем, как лучше сделать добавление вопросов. Второй вариант действительно лучше.
ответить
 tenzink01.08.2009 | 00:05:56
Странен вопрос "Когда выполняются директивы препроцессора?". Непонятно на основании чего сделан выбор в пользу "До компиляции" по сравнению с "Во время компиляции".
ответить
 Maestro01.08.2009 | 21:33:24
Ошиблись - спутали компиляцию и компилятор

Сначала проводятся изменения кода препроцессором, а потом уже с кодом работает компилятор. - Всё это относится к компиляции.

Например, смотри у Эккеля в "Философии С++": "Процесс Трансляции. Процесс компиляции"
ответить
 admin18.11.2009 | 22:23:17
Директивы препроцессора выполняются во время препроцессирования
ответить
 medvedev_ag29.07.2009 | 18:11:15
спасибо! отличные тесты
ответить
 RedEvil23.07.2009 | 22:14:34
Разминка неплохая, да и вспомнить основы тоже иногда надо!
ответить
 soilfall18.07.2009 | 22:33:37
Выпендрюсь - прошёл со второго раза)))

Вопрос про 20 плюсов какой-то стрёмный. Я сомневаюсь, что вменяемый программист стал бы писать такой код, даже если бы это было можно скопилировать
ответить
 admin19.07.2009 | 11:29:43
вопрос про 20 плюсов проверяет знание, что такое r-value и l-value.
ответить
 seosterva26.06.2009 | 00:18:16
спасибо за тесты, готовлюсь к гос.экзамену по ООП на с++ с помощью вашего сервиса
ответить
 mat31.07.2009 | 11:15:22
лучше книжку почитай
ответить
 wheelly24.06.2009 | 19:36:57
Дайте, пожалуйста, определение "тривиального конструктора".
Заранее благодарен.
ответить
 analizer30.06.2009 | 22:59:23
Сказано же было в комментариях - страница 190:
A constructor is trivial if it is an implicitly-declared default constructor and if:
— its class has no virtual functions (10.3) and no virtual base classes (10.1), and
— all the direct base classes of its class have trivial constructors, and
— for all the nonstatic data members of its class that are of class type (or array thereof), each such class has a trivial constructor.
ответить
 romanik05.08.2009 | 00:58:10
А Вы видели _реально_психически_здорового_ человека, который оперирует понятием тривиальный конструктор? Ну, да, писал чистый математик, в принципе все логично судя по приведеной ссылке на стандарт, но мы же тестируем ЛЮДЕЙ. Хоть один аргумент, где это знание применяется. Пожалуйста. Просто редкая возможность составить ъороший опросник. Я б _очень_ хотел видеть его избавленым от этого мусора. Это ж БАЗОВЫЙ опросник по БАЗЕ языка.
ответить
 analizer05.08.2009 | 01:09:37
По результатам мед обследования в военкомате я был признан психически здоровым.
ответить
 romanik05.08.2009 | 09:33:20
И Вы считаете свои знания С++ базовым уровнем? ж) С медициной, конечно, я явно перегнул для эффекта усиления, но... эта терминология действительно не в ходу. И есть таки предложение заменить вариант "protected" в вопросе про типі конструкторов на что-либо менее провокационное. Или просто убрать этот вариант. В гугле на фразу "защищенный конструктор" под 30К ссылок. "C++ protected constructor" дает вообще около 300К.
ответить
 admin05.08.2009 | 09:43:10
В вопросе тривиальный конструктор упоминается только в пояснении к вопросу в целях общего развития.
Если Вы хотите обсудить вопрос, делайте это, пожалуйста, в комментариях к вопросу.
ответить
 analizer05.08.2009 | 10:01:55
Тем не менее понятием тривиального конструктора мы с сокурсниками оперировали в обсуждениях уже на втором-третьем курсах. Мой уровень владения С++ в то время был действительно базовым.
ответить
 moonshiner20.06.2009 | 16:56:11
Учить и ещё раз УЧИТЬ!
ответить
 clumsy18.06.2009 | 19:58:28
ниче так тест для встряки мозгов
ответить
 Konoplev_A01.06.2009 | 11:10:05
Бага в этом тесте:

Вопрос: Какие ключевые слова входят в состав условного оператора.

Есть вариант Else.

Я НЕ ВЫБЕРАЛ ЕГО!!! Выбрал if и then. Ответ засчитан как не правильный пояснение:

Пояснение: C++ является регистрозависимым языком, поэтому ответ "Else" не является верным
ответить
 admin01.06.2009 | 11:24:08
В С++ в условном операторе нет ключевого слова "then", а Вы его зачем-то выбрали.
Просьба при написании сообщений следить за клавишей Caps Lock или выковырять ее из клавиатуры.
ответить
 Konoplev_A01.06.2009 | 11:32:49
Мне кажется пояснение на счёт then стоит добавить, потому что сбивает с толку пояснение которое появляется к этому вопросу.

Капслуком выделил то, на что хотел обратить внимание (возможности выделить текст в комментарии например курсивом нету). Если Caps Lock раздражает, обещаю больше не использовать его на этом ресурсе и приношу свои извенения.
ответить
 Rickkk27.05.2009 | 15:34:09
Тест замечательный. Благодаря ему узнал о своих пробелах в знании C++
ответить
Добавить комментарий