|
10.09.2011, 04:45
|
#1
|
Дэвелопер
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений (для 4,642 пользователей)
|
Почувствуй себя ламьем
Мр.Ф прислал ссылку на тест
http://www.proprofs.com/quiz-school/...andidate-tests
У мну 2 из 6. При чем я даже не уверен, где именно точно правильно ответил. Печально.
__________________
|
(Offline)
|
|
Эти 11 пользователя(ей) сказали Спасибо .Squid за это полезное сообщение:
|
ABTOMAT (10.09.2011), baton4ik (10.09.2011), Dream (10.09.2011), falcon (10.09.2011), Mhyhr (10.09.2011), moka (10.09.2011), Randomize (10.09.2011), Reizel (10.09.2011), Reks888 (10.09.2011), SBJoker (10.09.2011), St_AnGer (10.09.2011)
|
10.09.2011, 15:00
|
#2
|
ПроЭктировщик
Регистрация: 24.02.2011
Сообщений: 188
Написано 13 полезных сообщений (для 18 пользователей)
|
Ответ: Почувствуй себя ламьем
Хм.... странно я два раза нашару прошёл тест результат 2 of 6.
развод походу
Upd. А нет! повезло (ну чтобы два раза хмм...).Эт не развод.
|
(Offline)
|
|
10.09.2011, 15:01
|
#3
|
Элита
Регистрация: 26.07.2008
Сообщений: 1,972
Написано 1,095 полезных сообщений (для 3,923 пользователей)
|
Ответ: Почувствуй себя ламьем
6 из 6
Ошибок
|
(Offline)
|
|
Эти 5 пользователя(ей) сказали Спасибо Nuprahtor за это полезное сообщение:
|
|
10.09.2011, 17:35
|
#4
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,358
Написано 2,472 полезных сообщений (для 6,854 пользователей)
|
Ответ: Почувствуй себя ламьем
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо Randomize за это полезное сообщение:
|
|
10.09.2011, 18:36
|
#5
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Почувствуй себя ламьем
2 из 6.
Блин почему не пишут что неправильно было.
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
10.09.2011, 19:16
|
#6
|
Разработчик
Регистрация: 12.07.2008
Сообщений: 523
Написано 196 полезных сообщений (для 470 пользователей)
|
Ответ: Почувствуй себя ламьем
http://www.quizful.net/test
советую вот этот ресурс.
после прохождения есть ответы и коментарии чо как и почему.
настоятельно советую помимо чтения книг и стандарта, почаще проходить такие вещи, мозги стимулирует (да и на практике некоторые задачки попадаются, но не часто конечно)
|
(Offline)
|
|
Эти 7 пользователя(ей) сказали Спасибо falcon за это полезное сообщение:
|
|
11.09.2011, 01:24
|
#7
|
Мастер
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений (для 504 пользователей)
|
Ответ: Почувствуй себя ламьем
17 из 100
1 из 6
мудрёный этот с++
это как изучить китайский, чтобы программировать. А зачем это надо?
пытался понять по логике, но корючки языка не знаю.
|
(Offline)
|
|
11.09.2011, 01:36
|
#8
|
Дэвелопер
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений (для 4,642 пользователей)
|
Ответ: Почувствуй себя ламьем
Некорректное сравнение, имхо. Скорее, это как выучить иностранный язык на уровне филолога + носителя языка. Круто, но практический смысл теряется, т.к. можно успешно использовать язык и с гораздо меньшим словарным запасом. Возможно, речь будет не настолько изящна, но с другой стороны, и завернуть что-то заумное и непонятное не получится.
__________________
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо .Squid за это полезное сообщение:
|
|
11.09.2011, 01:47
|
#9
|
Разработчик
Регистрация: 12.07.2008
Сообщений: 523
Написано 196 полезных сообщений (для 470 пользователей)
|
Ответ: Почувствуй себя ламьем
.Squid
Круто, но практический смысл теряется
|
часто приходится спорить по поводу требуемых навыков, до какой степени действительно стоит погружаться в язык и т.п.
и на самом деле смысл не теряется. В реальной практике гуру языка действительно нужны, но их в команде много не надо, ибо они дорого стоят, а с основной массой задачь и правда справятся и менее прокаченые люди.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
11.09.2011, 14:23
|
#10
|
Мастер
Регистрация: 12.01.2009
Сообщений: 979
Написано 388 полезных сообщений (для 631 пользователей)
|
Ответ: Почувствуй себя ламьем
2 из 6. А там вообще больше можно набрать? =)
|
(Offline)
|
|
11.09.2011, 17:43
|
#11
|
Разработчик
Регистрация: 12.07.2008
Сообщений: 523
Написано 196 полезных сообщений (для 470 пользователей)
|
Ответ: Почувствуй себя ламьем
http://www.proprofs.com/quiz-school/...uname=falco n
Samodelkin ды как бы можно..
я вот чо не понял, вопрос там такой:
class A
{
public:
A(){ cout<<"1"<<endl; }
~A() { cout<<"2"<<endl; }
}
class B:public A
{
B() { cout<<"3"<<endl; }
~B() { cout<<"4"<<endl; }
}
void foo( A a )
{
}
что происходит при вызове func? Вроде ж должен вызываться A( A& ) для аргумента, не?
|
(Offline)
|
|
11.09.2011, 20:20
|
#12
|
Дэвелопер
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений (для 2,920 пользователей)
|
Ответ: Почувствуй себя ламьем
Под спойлером, по просьбам общественности, Кнайтэ дает ответы на все задачи с объяснением почему и как, а так же рассказывает, почему этот тест говно и его составил мудак не разбирающийся в стандарте С++.
Алсо для начала вброс:
Итак, скандалы, интриги, расследования:
1.
Верный ответ: a will have accidental value
Почему: члены объекта будут проинициализированны строго в порядке их объясления (и уничтожены в обратном). Поэтому нет разницы, что с вписке инициализаторов мы написали b перед а, а потом заюзали в инициализации а. Все равно а проинициализируется первым. Т.к. стандарт не говорит нам, чем должны инициализироваться скалярные типы, значение а будет равно какому-то мусору (значение b до инициализации) - 2. Точное значение зависит от платформы. В общем-то, в некоторых условиях можно словить и ошибку компиляции (есть там такой вариант), т.к. компилятор может кинуть ворнинг на неверный порядок инициализаторов, а ворнинги могут считаться и ошибками. Но это очень и очень маловероятно.
2.
(вариация где надо вбить ответ)
Верный ответ: 112.
Почему: при new Derived() сперва вызовется конструктор базового класса. В нем дернется виртуальный метод. Но. На этом этапе, объект еще не мутировал в Derived и является типа Base (пункт 10.4.6), поэтому вызовется реализация Base::method() (а если бы это была чисто виртуальная функция мы либо сразу отхватили Segmentation Fault, либо что хуже поломали бы стэк и получили фиерические баги в самых неожиданных местах). В метод будет передано 0, и он вернет 0 + 1 = 1, что и будет выведено. Далее произойдет мутация в Derived и будет выполнен его конструктор. Вызовется Derived::method() с аргументом 2, он вернет 2 - 1 = 1, что и будет выведенно. Далее это все ляжет в автопоинтер, это все херня и ни на что не влияет, исключая то, что как и полагается автопоинтеру, он уничтожит объект которым владеет при выходе из области видимости. Т.е. шаблон автопоинтера инстанциирован с типом Base, произойдет вызов деструктора Base::~Base(). Т.к. деструктор не виртуальный (а он обязан им быть) не произойдет вызова Derived::~Derived(), поэтому в результате будет выведено 2. После чего программа захлопнется. Итог - 112.
3.
(тут нас спрашивают в чем же проблема этого кода)
Правильный ответ: Base class should declare virtual desctructor
Почему: ну, это было выше, объект типа Derived будет уничтожен как Base, что может привести к утечкам памяти и неверному поведению. Поэтому надо сделать деструктор виртуальным. Вообще, его надо делать виртуальным и у отнаследованного класса, но это не важно. Алсо тут проблема вызова виртуальных методов из конструктора и деструктора., этим можно себе прострелить ногу.
4.
ПравильныйТипа правильный ответ: Compilation error because const_cast must be called as const_cast(i)
Почему: вообще этот вопрос придумал идиот. Во-первых, я подозреваю что там должно быть Compilation error because const_cast must be called as const_cast<int>(i). В таком случае у меня для него плохие новости, оно вернет rvalue, и, конечно же, в него невозможно присвоить значение. Еще вариант - Compilation error because const_cast must be called as *const_cast<int*>(&i). О да, мы сможем присвоитьзначение. Но тогда у меня еще более плохая новость для автора вопроса - пункт 7.1.5.1.4 стандарта, который говорит нам, что изменение константы это UB. Все. Никаких других вариантов, мы должны тут ответить вариантом об UB, но он неверный, очень приятно.
5.
ПравильныйТипа правильный ответ: 132242
Почему: сразу - автор неимевший дела с кросс-платформенным программирвоанием мудак и ответ действителен только для MSVC, другой компилятор скорее всего выдаст 13242. Теперь растолковывавние: При конструировании объекта типа B сперва вызовется конструктор А (выход 1), потом уже конструктор В (выхлоп 3). После этого что поизодйет в студии - она создаст проксирующий объект типа А из В (используя конструктор копирования A(const A & other), который не определен и, следовательно, ничего не выведет, т.к. будет использован сгенерированный компилятором, тупо копирующий все поля класса), а потом из него скопирует этим же конструктором копирования аргумент для func (и опять конструктор ничего не выведет). После этого функция отработает свое (тупо ничего не сделает) и аргумент будет убит. Вызоается деструктор А (выхлоп 2). После этого убъется проксирующий объект (опять 2). Вот это место никак не оговоренно стандартом и проксирующий объект инициатива студии (понятия не имею зачем, может есть какие-то реальные причины). Тот же GCC не будет создавать ничего лишнего и напрямую скопирует аргумент из b, поэтому и выведет только одну двойку. Далее все просто и по стандарту - вызовется деструктор B (выхлоп 4) и за них деструктор базового класса А (выхлоп 2). Поэтому и получает 132(2)42.
6.
Правильный ответ: Provide implementation of copy constructor and assignment operator
Почему: тут думаю все ответили правильно, ибо тривиальный вопрос. Хотя на самом деле хватит конструктора копирования, т.к. String b = a; это вызов конструктора копирования, а не вызов дефолтного конструктора и следом оператора присваивания. А нужно это все для того, чтобы у каждой строки был свой буфер символов (который уничтожится в деструкторе).
Собственно и все, ничего сложного и сверхъестественного в этих вопросах нет, даже нигде не присутствует черная шаблонная магия (а я могу на эту тему дать задачу, вот там действительно глубокое понимание стандарта С++).
Таким образом, человеки посчитавшие этот тест неибацо сложным могут облить себя бензином и поджечьидут курить стандарт С++
|
(Offline)
|
|
Эти 16 пользователя(ей) сказали Спасибо Knightmare за это полезное сообщение:
|
ANIK123 (10.10.2011), baton4ik (11.09.2011), den (11.09.2011), Dream (11.09.2011), falcon (11.09.2011), ffinder (11.09.2011), Harter (15.09.2011), HolyDel (11.09.2011), LLI.T.A.L.K.E.R. (11.09.2011), moka (11.09.2011), Mr_F_ (11.09.2011), NitE (11.09.2011), pepel (11.09.2011), Reks888 (11.09.2011), SBJoker (11.09.2011), St_AnGer (11.09.2011)
|
11.09.2011, 20:23
|
#13
|
Дэвелопер
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений (для 2,419 пользователей)
|
Ответ: Почувствуй себя ламьем
а так же рассказывает, почему этот тест говно и его составил мудак не разбирающийся в стандарте С++.
|
кнайтэ вернулся
|
(Offline)
|
|
11.09.2011, 20:33
|
#14
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Почувствуй себя ламьем
Олсо этот тест выводит рандомные вопросы в рандомном порядке. Хотя думается их там мало.
__________________
|
(Offline)
|
|
11.09.2011, 22:14
|
#15
|
Разработчик
Регистрация: 12.07.2008
Сообщений: 523
Написано 196 полезных сообщений (для 470 пользователей)
|
Ответ: Почувствуй себя ламьем
про прокси объект - новость, спс))
про константность вопрос действительно совсем косячный, да..
а ваще, подобного рода вопрсы самое то, для собеседования по плюсам, имхо)
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:08.
|