Решил я сделать тест, по типу Brainbench, связанный с ООП и его реализации в С++ (ну как обычно, синтаксис, классы, наследование, перегрузка и т.д.)
Может быть у кого есть интересные вопросы? Основное требование : вопросы должны затрагивать действительно те вещи, который программист на C++ должен(обязан?) знать, желательно, чтобы вопрос занимал не много строк кода, а так же, что бы к нему можно было придумать варианты ответа.
Вообщем, был бы очень благодарен. Потом при желании можно сделать и на RSDN on-line версию такого тестирования.
Здравствуйте, Dr.Gigabit, Вы писали:
DG>Hello all!
DG>Решил я сделать тест, по типу Brainbench, связанный с ООП и его реализации в С++ (ну как обычно, синтаксис, классы, наследование, перегрузка и т.д.) DG>Может быть у кого есть интересные вопросы? Основное требование : вопросы должны затрагивать действительно те вещи, который программист на C++ должен(обязан?) знать, желательно, чтобы вопрос занимал не много строк кода, а так же, что бы к нему можно было придумать варианты ответа.
DG>Вообщем, был бы очень благодарен. Потом при желании можно сделать и на RSDN on-line версию такого тестирования.
Этот привет уже обсуждается примерно год на РСДН. Вся проблема как раз в набьоре вопросов и ответов к ним. Это нетривиальная работа. которая требует ОЧЕНЬ МНОГО ВРЕМЕНИ. Так что пока ищи сам. Собственно, на форуме — много таких вопросов, но их выбирать надо — тоже ОЧЕНЬ МНОГО ВРЕМЕНИ. Небольшой список есть в теме про виртуальный конструктор — посмотри в форуме Работа — перенесли туда почему-то.
Сами вопросы накидать — не проблема. Проблема в их тестовой формулировке и написании вариантов ответов. Вот для примера некоторый набо вопросов по наследованию
1. Какие две роли выполняет наследование?
2. Какие виды наследования возможны в С++?
3. Чем отличается модификатор доступа protected от модификаторов private и public?
4. Чем открытое наследование отличается от закрытого и защищенного?
5. Какие функции не наследуются?
6. Сформулируйте правила написания конструкторов в производном классе.
7. Каков порядок вызова конструкторов? А деструкторов?
8. Можно ли в производном классе объявлять новые поля? А методы?
9. Если имя нового поля совпадает с именем унаследованного, то каким образом разрешить конфликт имен?
10. Что происходит, если имя метода-наследника совпадает с именем базового метода?
11. Сформулируйте принцип подстановки.
12. Когда выполняется понижающее приведение типов?
13. Объясните, что такое "срезка" или "расщепление".
14. Объясните, зачем нужны виртуальные функции.
15. Что такое связывание?
16. Чем "раннее" связывание отличается от "позднего"?
17. Какие два вида полиморфизма реализованы в С++?
18. Дайте определение полиморфного класса.
19. Может ли виртуальная функция быть дружественной функцией класса?
20. Наследуются ли виртуальные функции?
21. Каковы особенности вызова виртуальных функций в конструкторах и деструкторах?
22. Можно ли сделать виртуальной перегруженную операцию, например, сложение?
23. Может ли конструктор быть виртуальным? А деструктор?
24. Как виртуальные функции влияют на размер класса?
25. Как объявляется "чистая" виртуальная функция?
26. Дайте определение абстрактного класса.
27. Наследуются ли чистые виртуальные функции?
28. Можно ли объявить деструктор чисто виртуальным?
29. Чем отличается чистый виртуальный деструктор от чистой виртуальной функции?
30. Зачем требуется определение чистого виртуального деструктора?
31. Наследуется ли определение чистой виртуальной функции?
32. Объясните, чем отличается множественное наследование от простого?
33. Приведите структуру и принцип действия паттерна Adapter.
34. Приведите классификацию целей наследования.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>Этот привет уже обсуждается примерно год на РСДН. Вся проблема как раз в набьоре вопросов и ответов к ним. Это нетривиальная работа. которая требует ОЧЕНЬ МНОГО ВРЕМЕНИ. Так что пока ищи сам. Собственно, на форуме — много таких вопросов, но их выбирать надо — тоже ОЧЕНЬ МНОГО ВРЕМЕНИ. Небольшой список есть в теме про виртуальный конструктор — посмотри в форуме Работа — перенесли туда почему-то. LVV>Сами вопросы накидать — не проблема. Проблема в их тестовой формулировке и написании вариантов ответов. Вот для примера некоторый набо вопросов по наследованию
Да, то что времени нужно много — это факт. А его времени-то как-раз и нет. Я думал, может у кого есть какие наработки. Все-таки на досуге попробую составить один вариант(мне по большому счету и нужен-то один). Если что получится — представлю на суд уважаемого community.
Здравствуйте, SchweinDeBurg, Вы писали:
SDB>Здравствуйте, LaptevVV, Вы писали:
SDB>Спасибо, Валерий Викторович — буду разминаться на досуге... хорошие вопросы...
На вот еще немного
1. Назовите ключевые слова С++, которые используются для обработки исключений.
2. Исключение — это:
1) событие;
2) ситуация;
3) объект;
4) ошибка в программе;
5) прерывание;
3. Каким образом исключение генерируется?
4. Каковы функции контролируемого блока?
5. Что обозначается ключевым словом catch?
1) контролируемый блок;
2) блок обработки исключения;
3) секция-ловушка;
4) генератор исключения;
5) обработчик прерывания;
6. Какого типа может быть исключение?
7. Сколько параметров разрешается писать в заголовке секции-ловушки?
8. Какими способами разрешается передавать исключение в блок обработки?
9. Объясните, каким образом преодолеть ограничение на передачу единственного параметра в блок обработки.
10. Почему нельзя выполнять преобразования типов исключений при передаче в секцию-ловушку?
11. Напишите конструкцию, которая позволяет перехватить любое исключение.
12. Могут ли контролируемые блоки быть вложенными?
13. Перечислите возможные способы выхода из блока обработки.
14. Каким образом исключение "передать дальше"?
15. Сколько секций-ловушек должно быть задано в контролируемом блоке?
16. Что такое "спецификация исключений"?
17. Что происходит, если функция нарушает спецификацию исключений?
18. Учитывается ли спецификация исключений при перегрузке функций?
19. Что такое "иерархия исключений"?
20. Существуют ли стандартные исключения? Назовите два-три типа стандартных исключений.
21. Поясните "взаимоотношение" исключений и деструкторов.
22. Объясните, зачем может понадобиться подмена стандартных функций завершения.
23. Какие виды нестандартных исключений вы знаете?
24. В чем отличие механизма структурной обработки исключений Windows от стандартного механизма?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>Здравствуйте, SchweinDeBurg, Вы писали:
SDB>>Здравствуйте, LaptevVV, Вы писали:
SDB>>Спасибо, Валерий Викторович — буду разминаться на досуге... хорошие вопросы... LVV>На вот еще немного
Здравствуйте, SchweinDeBurg, Вы писали:
SDB>Здравствуйте, LaptevVV, Вы писали:
SDB>>>Здравствуйте, LaptevVV, Вы писали:
LVV>>На вот еще немного
SDB><нахально> А можно адрес для высылки ответов?
Так это мои вопросы. которые я студентам задаю. Я их сам все написал, не заглядывая ни в какой сайт. Можешь слать мне.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Dr.Gigabit, Вы писали:
DG>Здравствуйте, LaptevVV, Вы писали:
LVV>>Здравствуйте, SchweinDeBurg, Вы писали:
SDB>>>Здравствуйте, LaptevVV, Вы писали:
SDB>>>Спасибо, Валерий Викторович — буду разминаться на досуге... хорошие вопросы... LVV>>На вот еще немного
DG>[skiped]
DG>Не завидую я вашим студентам
Тяжело в ученье — легко в бою! (с) Суворов александр васильевич.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вам можно позавидовать.
Мне приходилось интервьюировать претендентов.
3/4 можно было отсеять тремя вопросами:
1. Что такое абстрактный базовый класс и как его написать на С++
2. Как перевести слово inheritance
3. Сколько единичек в двоичном представлении числа 0xEE
такие дела...
Сейчас пытаюсь наладить тестирование уровня контрагентов.
Как вам нравятся такие задания (не только про ООП):
4. Как улучшить
assert( ::CloseHandle(x) );
5. Определить, не компилируя, что напечатает программа
Здравствуйте, LaptevVV, Вы писали:
LVV>Так это мои вопросы. которые я студентам задаю. Я их сам все написал, не заглядывая ни в какой сайт.
Это я понял. Отвечал тоже никуда не заглядывая, по голове.
LVV>Можешь слать мне.
Стормознул... забыл, что Янус адресов из профилей не показывает...
Вобщем, отослал на Ваше мыло из профиля. "Оценка" будет?
P.S.
Если Вы сочтете, что какие-то мои ответы требуют публичного "мытья костей" (распостраненное заблуждение, например, которое Вам часто встречается и с которым надо бороться) — You are welcome.
[ posted via RSDN@Home 1.1.4 beta 3 r231, accompanied by The Exploited — Stop The Slaughter ]
Здравствуйте, pvoid28, Вы писали:
P>Здравствуйте, LaptevVV, Вам можно позавидовать. P>Мне приходилось интервьюировать претендентов. P>3/4 можно было отсеять тремя вопросами: P>1. Что такое абстрактный базовый класс и как его написать на С++
неужто остались такие, кто не может ответить на этот вопрос? 3 семестр университета.
P>3. Сколько единичек в двоичном представлении числа 0xEE
Имхо, число можно и поменьше. Хотя бы вот такое 0x20 и на ответ 1 секунда
P>Сейчас пытаюсь наладить тестирование уровня контрагентов. P>Как вам нравятся такие задания (не только про ООП):
[skiped]
exellent!
Только вот 6-й имхо, лишний Можно заменить на следующий:
class A {};
class B {};
class C {};
class D : public B, public A, public C
{
B objB;
}
int main()
{
D objB;
return 0;
}
Какова последовательность вызовово конструкторов и деструкторов?
Здравствуйте, SchweinDeBurg, Вы писали:
SDB>Здравствуйте, LaptevVV, Вы писали:
LVV>>Так это мои вопросы. которые я студентам задаю. Я их сам все написал, не заглядывая ни в какой сайт. SDB>Это я понял. Отвечал тоже никуда не заглядывая, по голове.
LVV>>Можешь слать мне. SDB>Стормознул... забыл, что Янус адресов из профилей не показывает...
SDB>Вобщем, отослал на Ваше мыло из профиля. "Оценка" будет?
Уже получил. Замечания напишу в понедельник и пошлю ответ...
SDB>P.S. SDB>Если Вы сочтете, что какие-то мои ответы требуют публичного "мытья костей" (распостраненное заблуждение, например, которое Вам часто встречается и с которым надо бороться) — You are welcome.
Океюшки!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, SchweinDeBurg, Вы писали:
SDB>P.S. SDB>Если Вы сочтете, что какие-то мои ответы требуют публичного "мытья костей" (распостраненное заблуждение, например, которое Вам часто встречается и с которым надо бороться) — You are welcome.
Здравствуйте, pvoid28, Вы писали:
P>Здравствуйте, LaptevVV, Вам можно позавидовать. P>Мне приходилось интервьюировать претендентов. P>3/4 можно было отсеять тремя вопросами: P>1. Что такое абстрактный базовый класс и как его написать на С++ P>2. Как перевести слово inheritance P>3. Сколько единичек в двоичном представлении числа 0xEE
6 P>такие дела...
Сочувствую...
P>Сейчас пытаюсь наладить тестирование уровня контрагентов. P>Как вам нравятся такие задания (не только про ООП): P>4. Как улучшить P> assert( ::CloseHandle(x) );
Не совсем понял вопрос. Что значит "улучшить"?
::CloseHandle(x) очевидно выдает некий результат-число (надо в справочнике смотреть — это ж функция API) P>5. Определить, не компилируя, что напечатает программа P>
Класс!
Сначала A из конструктора, потом Х из последнего обработчика, а потом должна С из деструктора. Причем С — на новой строке, так как после выхода из обработчика сработает endl P>6. Объявите на С++ оператор вывода содержимого некоторого класса Some в стандартный поток вывода
Ну, это простой вопрос. Только надо не оператор вывода, а заголовок оператора — состав Some не известен
ostream& operator<<(ostream&, const Some&);
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Dr.Gigabit, Вы писали:
SDB>>Если Вы сочтете, что какие-то мои ответы требуют публичного "мытья костей" (распостраненное заблуждение, например, которое Вам часто встречается и с которым надо бороться) — You are welcome.
DG>Голос вдогонку: если можно в этот топик
Само собой.
[ posted via RSDN@Home 1.1.4 beta 3 r231, accompanied by Cherry Poppin' Daddies — Soul Cadillac ]
Здравствуйте, Dr.Gigabit, Вы писали:
DG>Hello all!
DG>Решил я сделать тест, по типу Brainbench, связанный с ООП и его реализации в С++ (ну как обычно, синтаксис, классы, наследование, перегрузка и т.д.) DG>Может быть у кого есть интересные вопросы? Основное требование : вопросы должны затрагивать действительно те вещи, который программист на C++ должен(обязан?) знать, желательно, чтобы вопрос занимал не много строк кода, а так же, что бы к нему можно было придумать варианты ответа.
DG>Вообщем, был бы очень благодарен. Потом при желании можно сделать и на RSDN on-line версию такого тестирования.
Вот. Не совсем тест в общем-то — на самом деле это на 99% краткое содержание справочника по С++ Шилдта — я по нему С++ учил, а вопросы типа для повторения. Соответственно некоторые из них сложно понять — потому как только на себя расчитывал. "?" в начале предложения == "Что есть". Могу кинуть на мыло в вордовском формате. Еще такая же бодяга по С есть.
Вопросы по С++.
1. Что такое инкапсуляция?
2. Что такое полиморфизм? Виды полиморфизма? Чем задаются?
3. Что такое наследование?
4. Как задать функцию без параметров?
5. Что будет разделителем для строки cin>>? (Напр. для «Один два»).
6. Требуется ли явно указывать тип возвращаемого значения в return?
7. Как определить булев тип?
8. Как надо задавать включаемые библиотечные файлы в С++? Как использовать заголовочные файлы из C?
9. Как задать пространство имен в котором определены все библиотечные функции С++?
10. Как перегрузить функцию? Как это связано с полиморфизмом?
11. Какие функции нельзя перегрузить?
12. Описать варианты наследования базового класса и к каким членам в каждом случае будет иметь доступ наследник?
13. Структура программы на С++?
14. Что такое класс и что такое объект?
15. Какие члены класса не могут иметь инициализатор? (с. 254)
16. Какие ключевые слова нельзя использовать при объявлении членов класса?
17. Может ли объявление класса включать в себя его объект или указатель на его объект?
18. Когда имеет смысл объявлять переменные класса открытыми?
19. 2 отличия между структурами и классами?
20. Что такое POD? Какие признаки у POD?
21. Как определить класс с помощью слова union? Будет ли у него конструктор и деструктор? Какие особенности имеют его члены? Какой уровень доступа такой класс будет иметь по умолчанию? (с. 256)
22. 2 ограничения наложенных на такие классы?
23. Чего не могут содержать такие классы (4 случая)?
24. Как осуществляется доступ к членам безымянного объединения?
25. Чего не может содержаться в безымянных объединениях (2 случая)?
26. Как объявить глобальное безымянное объединение?
27. Когда могут быть особенно полезны дружественные функции (3 случая)? Как их объявить? К каким членам класса они имеют доступ? Можно ли сделать ее доступной просто в проге (использовать 2-ой прототип)?
28. Что такое неполное объявление класса?
29. Может ли дружественная функция быть членом другого класса?
30. Как это записать?
31. Ограничения на дружественные функции (2 случая)? (с. 261)
32. Может ли класс быть дружественным?
33. К каким типам данных он будет иметь доступ?
34. Можно ли через дружественный класс узнать значение данных из класса которому он дружественен? Через его объект? Как это записывается?
35. Что гарантирует применение слова inline?
36. Какие функции компилятор может запретить подставлять?
37. Какие есть варианты определения inline функций в классе?
38. Способы объявлений объектов у которых конструктор класса принимает параметры (2 варианта)?
39. В чем особенность создания объектов класса у которого конструктор с одним параметром?
40. В чем особенности статических членов класса?
41. Чем инициализируются статические переменные-члены класса по умолчанию и когда это происходит?
42. В чем особенность задания статических переменных-членов класса?
43. Как правильно их задавать?
44. Особенности статических функций-членов (5 случаев)? (с. 271) Какие варианты перегрузки возможны?
45. Можно ли присваивать значения статическим переменным класса до создания объектов этого класса?
46. Когда вызываются конструкторы глобальных объектов?
47. Когда вызываются деструкторы глобальных объектов?
48. Как обратиться к глобальной переменной, если в функции определена локальная переменная с таким же именем?
49. Можно ли определить один класс внутри другого?
50. Можно ли определить класс внутри функции?
51. Какие ограничения накладываются на локальные классы (3 случая)? (с. 275)
52. Сколько раз будет вызываться конструктор и деструктор объекта, если его один раз передавали функции по значению?
53. Какие могут возникнуть проблемы при передаче объекта в функцию по значению?
54. Может ли функция возвращать объект?
55. Что будет в этом случае возвращаться и какие могут возникнуть проблемы?
56. Можно ли присваивать объекты друг другу?
57. В каких случаях можно использовать сокращенную форму инициализации массива объектов?
58. Как выглядит полная форма инициализации массива объектов?
59. О чем надо помнить создавая массив неинициализированных объектов?
60. Можно ли присвоить указателю адрес какого-либо члена объекта?
61. Что передается практически любой функции класса? Каким функциям это не передается (2 случая)? (с. 285)
62. На какие члены производного класса можно ссылаться с помощью базового типа указателя?
63. Как получить доступ к остальным членам производного класса?
64. Особенности адресной арифметики ввиду динамического полиморфизма?
65. Что такое указатель на член класса?
66. Его синтаксис?
67. Пример использования?
68. Синтаксис использования ссылки?
69. Что будет: int y = 8; int &s = y; s++;?
70. Может ли функция стоять в левой части оператора присваивания? Когда это возможно?
71. Что происходит с объектом которого вернули по ссылке после завершения работы вернувшей его функции?
72. Что такое независимая ссылка?
73. Когда можно присваивать значение ссылке?
74. Можно ли присваивать ссылке на базовый класс объекты производных классов?
75. Ограничения на ссылки (4 случая)?
76. Что происходит если new не смог выделить требуемую память?
77. 3 причины почему new, delete лучше malloc, free? (с. 297)
78. Как проинициализировать память выделяемую new?
79. Как с помощью new выделить память для массива?
80. Как для массива правильно вызывать delete?
81. Как проинициализировать объект созданный с помощью new?
82. Как проинициализировать массивы созданные с помощью new?
83. Что нужно помнить о классах, размещая динамически массивы их объектов?
84. Заголовочный include для new?
85. Как записать new возвращающий нулевой указатель в случае неудачи распределения памяти?
86. Буферизованный new?
87. Является ли это перегрузкой функции: void f (int* p); void f (int p[]);?
88. Является ли это перегрузкой функции: void f(int a); и void f(const int a);? void f(int a); & void f(unsigned int a);? void f(int a); & void f(int &a);?
89. Форма записи конструктора копирования? Пример перегрузки?
90. 3 случая когда может использоваться конструктор копирования для присваивания?(с. 308)
91. Вызывается ли здесь конструктор копирования: A a; B b; a = b;?
92. Как создать указатель на функции: void f (int a. float f); void f (int a);?
93. Где можно задать параметры по умолчанию для функции?
94. Можно ли создать конструктор с параметрами заданными по умолчанию?
95. Неоднозначность (2 случая)?
96. Общий вид операторной функции-члена?
97. Как перегрузить + чтобы можно было написать (ob.a + ob.b).show();? Когда разрушится объект в скобках?
98. Примеры перегрузок -, =, ++x, x++, +=?
99. Ограничения налагаемые на перегруженные операторы (3 случая)?
100. Какие операторы нельзя перегружать (4 экземпляра)?
101. Какие перегруженные операторы наследуются производными классами, а какие нет? Можно ли их перегрузить в производном классе?
102. Как перегрузить оператор с помощью дружественной функции?
103. Какие операторы нельзя перегрузить с помощью дружественных функций (4 штуки)?
104. Как перегрузить операторы x++, ++x с помощью дружественных функций?
105. Как перегрузить оператор сложения объекта с числом?
106. Примеры перегрузки new и delete?
107. Примеры перегрузки new и delete для массивов?
108. Перегрузка new и delete без генерирования исключительной ситуации?
109. Какие ограничения есть на перегрузку (), [], -> (2 случая)?
110. Пример перегрузки []?
111. Пример перегрузки ()?
112. Пример перегрузки ->?
113. Пример перегрузки ,?
114. Какие виды доступа при наследовании бывают и как при этом трактуются данные различных видов доступа из базового класса в производном?
115. Форма записи при множественном наследовании?
116. Порядок вызова конструкторов и деструкторов в производном классе? Если он использовал множественное наследование?
117. Как передать параметры конструктору базового класса?
118. Правило объявления переменных базового класса в конструкторе производного?
119. 2 Способа повысить уровень доступа к членам базового класса? На все ли члены базового класса это распространяется?(с. 360)
120. Как повысить уровень доступа к функции базового класса?
121. Неоднозначность при множественном наследовании?
122. 2 способа обойти ее?
123. А если d1 virtual наследует, а d2 нет?
124. Форма записи виртуального наследования?
125. Виды полиморфизма? На чем основаны?
126. Можно ли в классе-наследнике написать реализацию виртуальной функции с другим числом параметров (лишние имеют значения по умолчанию)?
127. Будет ли работать полиморфизм при использовании ссылок на базовый класс?
128. 3 ограничения для виртуальных функций?
129. Наследуется ли атрибут виртуальности функции?
130. Если в Base virtual f(), d1:B f(), d2:d1, то что будет: Base *p = &d1; p->f(); Base *p = &d2; p->f(); d1 *p1; p1 = &d2; p1->f();?
131. Принцип иерархичности наследования относительно выбора реализации функции?
132. Форма объявления чисто виртуальной функции?
133. Что такое раннее связывание и что такое позднее связывание? Их плюсы и минусы?
134. Форма записи шаблонных функций?
135. Как называется конкретная версия шаблонной функции создаваемая компилятором?
136. Как называется процесс генерации конкретной функции?
137. Сколько вариантов шаблонной функции генерирует компилятор?
138. Как явно перегрузить обобщенную функцию (2 варианта)?
139. Как перегрузить шаблонную функцию?
140. Пример объявления обобщенного класса и его объекта?
141. Пример записи объявления функции обобщенного класса и ее реализации?
142. Можно ли создать реализацию шаблонного класса с пользовательским типом данных?
143. Пример обобщенного безопасного массива?
144. То же самое, но с заданием размера этого массива?
145. Какие типы можно использовать в качестве стандартных параметров для шаблонного класса, функции?
146. Правила передачи стандартных параметров шаблонного класса?
147. Пример использования аргументов по умолчанию в шаблонных классах?
148. Пример явной специализации класса?
149. 2 случая применения typename?
150. Использование слова export применительно к шаблонам?
151. Общий вид операторов try и catch?
152. Пример try, throw, catch?
153. Что будет если генерируется исключительная ситуация для которой не предусмотрена обработка?
154. Пример, когда может генерироваться исключение вне блока try?
155. Может ли catch располагаться не сразу за try?
156. Пример использования нескольких catch?
157. Как надо выполнять перехват исключения описанного с помощью базового и производного типов?
158. Как ввести перехват всех исключительных ситуаций?
159. Как можно грамотно его использовать вместе с перехватчиками остальных исключений?
160. Как запретить функции генерировать исключительные ситуации?
161. Область действия ограничения функции на исключительные ситуации?
162. Как повторно сгенерировать исключительную ситуацию?
163. Какие функции вызываются при неверной обработке исключительной ситуации? И в каких конкретно случаях?
164. Заголовок для функций terminate & unexpected?
165. Какие функции вызывают terminate & unexpected?
166. Как поменять обработчик для функций terminate & unexpected?
167. Чего не должны делать новые обработчики?
168. Как узнать перехвачена ли уже сгенерированная исключительная ситуация?
169. ?Поток. Его принцип деятельности?
170. 2 основных класса С++ для ввода/вывода?
171. Высокоуровневая иерархия?
172. Какие потоки открываются при начале выполнения программы?
173. 2 способа форматирования данных при вводе/выводе?
174. 18 флагов fmtflags?
175. Функция для установки флагов формата?
176. Можно ли применить ее сразу для всех потоков?
177. Функция для сброса флагов формата?
178. Перегруженная форма функции setf()?
179. Функция для определения текущего состояния флагов форматирования?
180. Как установить группу флагов?
181. Функции изменения ширины, точности и символа заполнения?
182. 32 манипулятора формата?
183. Заголовок для манипуляторов с параметрами?
184. Пример перегрузки оператора вставки?
185. Может ли перегруженная функция вставки быть членом класса?
186. Как с помощью перегруженной функции вставки вывести закрытые члены класса?
187. Пример перегрузки оператора извлечения?
188. Как проверить какой поток вызвал перегруженный оператор извлечения/вставки?
189. Как создать собственный манипулятор?
190. Заголовок для реализации файлового ввода / вывода?
191. Класс для низкоуровневого управления файловым потоком?
192. Как связать файловый поток с файлом?(2)
193. Отличие текстового от бинарного режима открытия файла?
194. Режимы открытия файла?
195. Режимы открытия по умолчанию?
196. Как проверить успешность открытия файла?(2)
197. Функция закрытия файла?
198. Функции чтения / записи символов для файла?
199. Как определить закончился ли файл при его чтении?
200. Функции чтения / записи блоков бинарных данных?
201. Как записать / считать структуру?
202. Что будет если конец файла обнаружится раньше чем read считает num символов?
203. Как определить число считанных символов?
204. Перегрузки get()?
205. Отличие get() от getline()?
206. Функция определения конца файла?
207. Функция пропуска части символов?
208. Как считать следующий символ в потоке не извлекая его?
209. Как вернуть обратно считанный символ?
210. Как принудительно записать данные из буфера в файл? Когда рекомендуется это делать?
211. Функции произвольного доступа к файлу?
212. О чем надо помнить применяя эти функции к текстовым файлам?
213. Как определить текущую позицию курсоров доступа к файлу?
214. Как получить информацию о статусе ввода / вывода?(2)
215. Как сбросить флаги ошибок?
216. Оператор определения типа объекта и его заголовок?
217. Функции – члены type_info?
218. Важное ограничение на typeid() в связи с полиморфизмом?
219. ? Разыменованный указатель.
220. Можно ли применять typeid() к ссылкам?
221. Как проверить является ли объект таким-то типом?
222. Применение typeid() к шаблонным классам?
223. 5 операторов приведения типов?
224. ? оператор динамического приведения типов?
225. Требование к его результирующему типу?
226. Для приведения каких типов он предназначен?
227. Как проверить успешность dynamic_cast?
228. Тип исключительной ситуации при typeid и dynamic_cast?
229. Какие типы к каким приводятся dynamic_cast-ом?
230. Приведение типов с typeid и dynamic_cast?
231. Можно ли использовать dynamic_cast для шаблонных классов?
232. Можно ли привести T<int>* к T<double>*?
233. Как заместить const & volatile? Пример? Пример с ссылкой?
234. Оператор для неполиморфного приведения?
235. Проверяет ли он приведение типов?
236. Как привести разные типы данных?
237. Общий вид объявления пространства имен?
238. 2 способа обращения к данным из пространства имен вне его?
239. Если создать объект класса namespace_name::some_class, нужно ли при его использовании ставить область видимости?
240. 2 варианта использования using?
241. ?Неименованное пространство имен. Синтаксис?
242. Зачем оно нужно?
243. Можно ли разделить пространство имен?
244. Пример?
245. Где можно объявлять пространство имен?
246. Пример использования вложенного пространства имен?
247. Как включить только часть функций из std?
248. ? Функция преобразования класса. Синтаксис?
249. Пример?
250. Можно ли задать несколько type()?
251. Как объявить константную функцию – член и в чем ее особенность?
252. Как разрешить ей изменять какой-либо член класса?
253. Функция volatile и ее особенности?
254. ? Явные конструкторы. Синтаксис?
255. Как инициализировать константы и ссылки в конструкторе?
256. Как проинициализировать члены класса, имеющего только конструктор с аргументами, в другом, содержащем его классе?
257. Порядок создания и инициализации членов класса?
258. Как вставить код на ассемблере?
259. Спецификация связей функции? Синтаксис?
260. В каких местах ее можно объявлять?
261. Как связать с программой сразу несколько функций?
262. ? Буферизованный ввод / вывод.
263. Заголовок для него?
264. Синтаксис ввода / вывода?
265. Как узнать сколько символов записано в массив?
266. Динамический массив вывода? Пример использования?
267. 9 отличий С от С++?
268. ? Контейнеры. 2 типа?
269. ? Алгоритмы.
270. ? Итераторы. 5 видов?
271. ? Обратный итератор.
272. ? Распределитель.
273. ? Предикат. 2 вида? Специальная разновидность бинарных предикатов?
274. 2 заголовка STL общего типа (для pair и для функторов)?
275. ? Функторы. 15 экземпляров? Зачем они нужны?
276. Еще 2 вида функторов?
277. ? Адаптер.
278. 11 контейнеров? Заголовки для них?
279. Основные переопределенные типы контейнерных классов(12)?
280. 4 конструктора vector<T>? Пример использования?
281. Ограничение на объекты, хранящиеся в векторе?
282. Функции вектора?(20)
283. Пример вектора с использованием итератора?
284. На что указывает итератор возвращаемый end()?
285. В каком месте вставляет элемент insert?
286. Пример со вставкой и удалением?
287. Когда можно не перегружать операторы объектов для вектора?
288. Пример вектора с объектами?
289. 4 конструктора списка?
290. 6 операторов определенных в списке?
291. Основные функции – члены списка?(28)
292. Что должны иметь объекты, хранящиеся в списке?
293. Пример вставки одного списка с объектами в другой?
294. 3 конструктора map?
295. 6 операторов определенных в map?
296. Требования к объектам – ключам в map?
297. Основные функции map?(17)
298. ? Pair.
299. Пример с map? Пример с make_pair?
300. Заголовок для алгоритмов?
301. Стандартные алгоритмы?
302. Алгоритмы подсчета элементов? (2) Примеры?
303. ? remove_copy(). Пример?
304. ? replace_copy(). Пример?
305. ? reverse(). Пример?
306. ? transform().Пример?
307. ? negate(). Пример?
308. ? divides().Пример?
309. Пример создания простого функтора?
310. 2 биндера для связи аргументов функтора с определенными значениями?
311. Пример биндеров с remove_it?
312. 2 негатора?
313. 3 «за» string?
314. Главный «против»?
315. 3 основных конструктора string?
316. 12 операторов string?
317. Можно ли в выражениях смешивать string и строки?
318. 2 варианта функции – члена string для присвоения строк?
319. 2 варианта функции – члена string для добавления строк?
320. 2 варианта функции – члена string для вставки строк?
321. 2 варианта функции – члена string для замены строк?
322. Функция – член для удаления символов в string?
323. Функции – члены string для нахождения первого и последнего вхождения подстроки в строку?
324. Функции – члены string для сравнения строк?
325. Функции – члены string для создания С – строки?
326. Можно ли применять к string контейнерные функции?
327. Можно ли хранить string в контейнерах?
Мафиозная диктатура это нестабильность. Если не мафиозная диктатура, то Конституция и демократия.
Здравствуйте, Alexey_VL, Вы писали:
A_V>Здравствуйте, Dr.Gigabit, Вы писали:
DG>>Hello all!
DG>>Решил я сделать тест, по типу Brainbench, связанный с ООП и его реализации в С++ (ну как обычно, синтаксис, классы, наследование, перегрузка и т.д.) DG>>Может быть у кого есть интересные вопросы? Основное требование : вопросы должны затрагивать действительно те вещи, который программист на C++ должен(обязан?) знать, желательно, чтобы вопрос занимал не много строк кода, а так же, что бы к нему можно было придумать варианты ответа.
DG>>Вообщем, был бы очень благодарен. Потом при желании можно сделать и на RSDN on-line версию такого тестирования.
A_V>Вот. Не совсем тест в общем-то — на самом деле это на 99% краткое содержание справочника по С++ Шилдта — я по нему С++ учил, а вопросы типа для повторения. A_V> Могу кинуть на мыло в вордовском формате.
Здравствуйте, LaptevVV, Вы писали:
P>>Как вам нравятся такие задания (не только про ООП): P>>4. Как улучшить P>> assert( ::CloseHandle(x) ); LVV>Не совсем понял вопрос. Что значит "улучшить"? LVV>::CloseHandle(x) очевидно выдает некий результат-число (надо в справочнике смотреть — это ж функция API)
Здравствуйте, Alexey_VL, Вы писали:
A_V>Здравствуйте, Dr.Gigabit, Вы писали:
DG>>Hello all!
DG>>Решил я сделать тест, по типу Brainbench, связанный с ООП и его реализации в С++ (ну как обычно, синтаксис, классы, наследование, перегрузка и т.д.) DG>>Может быть у кого есть интересные вопросы? Основное требование : вопросы должны затрагивать действительно те вещи, который программист на C++ должен(обязан?) знать, желательно, чтобы вопрос занимал не много строк кода, а так же, что бы к нему можно было придумать варианты ответа.
DG>>Вообщем, был бы очень благодарен. Потом при желании можно сделать и на RSDN on-line версию такого тестирования.
A_V>Вот. Не совсем тест в общем-то — на самом деле это на 99% краткое содержание справочника по С++ Шилдта — я по нему С++ учил, а вопросы типа для повторения. A_V> Могу кинуть на мыло в вордовском формате.
Здравствуйте, Dr.Gigabit, Вы писали:
DG>Если не сложно на dr.gigabit@tut.by.
Скинул, но еще раз повторюсь — к этим вопросам имеет смысл книжку Шилдта "Полный справочник по С++" купить, иначе некоторые вопросы малость непонятны.
DG>А с последней задачей, имхо, перебор
Ну, эт на любителя
Мафиозная диктатура это нестабильность. Если не мафиозная диктатура, то Конституция и демократия.
LVV>Класс! LVV>Сначала A из конструктора, потом Х из последнего обработчика, а потом должна С из деструктора. Причем С — на новой строке, так как после выхода из обработчика сработает endl
Деструктор guard будет вызван при выходе из его области видимости, до входа в обработчик исключительной ситуации. Т.е. вывод программы должен быть ACX.
Здравствуйте, Alexey_VL, Вы писали:
A_V>Да, еще вдогонку пара задачек:
A_V>int x = 5;
A_V>Какой будет результат в случаях: A_V>1. x = x+++x; A_V>2. x = x+++++x; A_V>3. x = x+++++++x; A_V>4. ++x = x+++++x; A_V>5. x++ = x+++++x; A_V>
А это видимо вопросы для собеседования программистов с даром предвидения
Здравствуйте, LaptevVV, Вы писали:
P>>Сейчас пытаюсь наладить тестирование уровня контрагентов. P>>Как вам нравятся такие задания (не только про ООП): P>>4. Как улучшить P>> assert( ::CloseHandle(x) ); LVV>Не совсем понял вопрос. Что значит "улучшить"? LVV>::CloseHandle(x) очевидно выдает некий результат-число (надо в справочнике смотреть — это ж функция API)
Вся соль не в ::CloseHandle(x), а в assert(...) — это макрос, который в release версии приложения разворачивается в (void)(0) — т.е. вызова ::CloseHandle(x) не произойдет.
P>>5. Определить, не компилируя, что напечатает программа
LVV>Класс! LVV>Сначала A из конструктора, потом Х из последнего обработчика, а потом должна С из деструктора. Причем С — на новой строке, так как после выхода из обработчика сработает endl
Нет, не верно. Программа напечатает "ACX<endl>". Объект guard разрушится в момент выхода из области видимости, а момент этот наступает при выбросе исключения (throw 0).
По пятому вопросу:
Выполнение кода с обработкой исключений имеет некоторые особенности на разных платформах, например Borland не возбуждает исключение при делении на ноль, а у VC6 есть ключи компиляции и в некоторых экзотических случаях можно получить самых разных чертей: от несрабатывания деструктора локального объекта до неперехвата исключения. То есть, если бы вместо throw было бы int a=0; a = 1/a;, то вопрос был бы очень некорректным.
Но я был уверен, что тут все честно и по стандарту.
Остальные замечания может бросить на RSDN Bench?
Здравствуйте, Paranoik, Вы писали:
P>Здравствуйте, LaptevVV, Вы писали:
P>>>Как вам нравятся такие задания (не только про ООП): P>>>4. Как улучшить P>>> assert( ::CloseHandle(x) ); LVV>>Не совсем понял вопрос. Что значит "улучшить"? LVV>>::CloseHandle(x) очевидно выдает некий результат-число (надо в справочнике смотреть — это ж функция API)
P>Только в релизе она вызвана не будет...
Ну да, этож assert!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
LVV>>Класс! LVV>>Сначала A из конструктора, потом Х из последнего обработчика, а потом должна С из деструктора. Причем С — на новой строке, так как после выхода из обработчика сработает endl
K>Деструктор guard будет вызван при выходе из его области видимости, до входа в обработчик исключительной ситуации. Т.е. вывод программы должен быть ACX.
Да, похоже на то — он же внутри блока объявлен.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Igor Karablin, Вы писали:
IK>Здравствуйте, LaptevVV, Вы писали:
P>>>Сейчас пытаюсь наладить тестирование уровня контрагентов. P>>>Как вам нравятся такие задания (не только про ООП): P>>>4. Как улучшить P>>> assert( ::CloseHandle(x) ); LVV>>Не совсем понял вопрос. Что значит "улучшить"? LVV>>::CloseHandle(x) очевидно выдает некий результат-число (надо в справочнике смотреть — это ж функция API) IK>Вся соль не в ::CloseHandle(x), а в assert(...) — это макрос, который в release версии приложения разворачивается в (void)(0) — т.е. вызова ::CloseHandle(x) не произойдет.
Океюшки. Тогда вопрос надо несколько поменять, а то я не понял, что улучшать-то? P>>>5. Определить, не компилируя, что напечатает программа IK>
LVV>>Класс! LVV>>Сначала A из конструктора, потом Х из последнего обработчика, а потом должна С из деструктора. Причем С — на новой строке, так как после выхода из обработчика сработает endl IK>Нет, не верно. Программа напечатает "ACX<endl>". Объект guard разрушится в момент выхода из области видимости, а момент этот наступает при выбросе исключения (throw 0).
Да, это я не обратил внимание. Правильно.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>11. Сформулируйте принцип подстановки.
? LVV>13. Объясните, что такое "срезка" или "расщепление".
? LVV>23. Может ли конструктор быть виртуальным? А деструктор?
По поводу конструктора интересен ответ. Какова Ваша религия ? LVV>34. Приведите классификацию целей наследования.
Приведите плз.
Вообще некоторые вопросы смахивают не на общепризнанное знание, а на знание лекций конкретого преподавателя.
Здравствуйте, s.ts, Вы писали:
ST>Здравствуйте, LaptevVV, Вы писали:
LVV>>11. Сформулируйте принцип подстановки. ST>?
Впервые его сформулировала Барбара Лисков
Ответ из моей книжки
Открытое наследование устанавливает между классами отношение "является": класс-наследник является разновидностью класса-родителя. И это не просто словесная формулировка — она непосредственно поддерживается компилятором. Когда мы пишем, что класс Derived (производный) открыто наследует от класса Base (базовый), мы сообщаем компилятору, что каждый объект типа Derived является также объектом класса Base. С практической точки зрения это означает, что везде, где может быть использован объект типа Base, вместо него разрешается подставлять объект типа Derived — это и есть принцип подстановки.
Этот принцип работает и для ссылок, и для указателей: вместо ссылки (указателя) на базовый класс может быть подставлена ссылка (указатель) на класс-наследник. Преобразование типа при этом прописывать не обязательно — оно выполняется автоматически. Эккель называет такое приведение типов повышающим.
Обратное — неверно! Например, будильник является часами, но не всякие часы — будильник. Здесь часы — базовый класс, а будильник — производный.
LVV>>13. Объясните, что такое "срезка" или "расщепление". ST>?
Коротко — в производном классе могут быть определены дополнительные поля. Во время присваивания при преобразовании по принципу подстановки "лишние поля в объект базового класса. естественно, не попадают.
Чтобы понять, в чем дело, обратимся к классам точек. Рассмотрим простой пример с двумерными и трехмерными точками.
Point3D b(1,2,3);
Point2D a = b; // подстановка в конструкторе копирования - срезка
a = b; // подстановка в присваивании - срезка
Работает принцип подстановки, однако нас поджидает неприятность: так как базовый класс ничего не знает о своих наследниках, то в переменную a копируется только Point2D-часть трехмерной точки. Этот эффект называется срезкой [Страуструп] или расщеплением [Брюс Эккель]; он частенько приводит к ошибкам. Например, при передаче параметра по значению, как мы знаем, работает конструктор копирования, поэтому в таких случаях тоже может произойти срезка. При передаче параметра по ссылке (или по указателю) ничего подобного не происходит.
LVV>>23. Может ли конструктор быть виртуальным? А деструктор? ST>По поводу конструктора интересен ответ. Какова Ваша религия ?
Синтаксически это запрещено стандартом. Однако можно определить виртуальную производящую (термин Элджера) функцию. Эту функцию и можно назвать виртуальным конструктором, так как ее назначение — сконструировать объект. Идиома виртуального конструктора — основа паттерна Фабрика LVV>>34. Приведите классификацию целей наследования. ST>Приведите плз.
Тимоти Бадд приводит интересную классификацию форм наследования. Форма наследования определяет — для чего, с какой целью используется наследование. Бадд считает, что порождение дочернего класса может быть выполнено по следующим причинам:
специализация. Класс-наследник является специализированной формой родительского класса — в наследнике просто переопределяются методы. Принцип подстановки выполняется. Очевидно, что такая форма наследования в С++ реализуется простым открытым наследованием. Примером является наследование часы -> будильник;
спецификация. Дочерний класс реализует поведение, описанное в родительском классе. Ясно, что в С++ такая форма реализуется простым открытым наследованием от абстрактного класса;
конструирование. Класс-наследник использует методы базового класса, но не является его подтипом (принцип подстановки не выполняется). В С++ такую форму можно реализовать простым закрытым наследованием;
расширение. В класс-потомок добавляют новые методы, расширяя поведение родительского класса. Хотя Т. Бадд выделяет эту форму наследования в отдельный вид, однако, на мой взгляд, она мало отличается от специализации, особенно учитывая то, что принцип подстановки в такой форме выполняется;
обобщение. Дочерний класс обобщает поведение базового класса. Обычно такое наследование используется в тех случаях, когда мы не можем изменить поведение базового класса (например, базовый класс является библиотечным классом);
ограничение. Класс-наследник ограничивает поведение родительского класса. Очевидно, что в С++ такой вид наследования реализуется простым закрытым наследованием (пример — TUniversalDeque -> TStack );
варьирование. Базовый класс и класс-потомок являются вариациями на одну тему, однако связь "класс-подкласс" произвольна, например, "квадрат-прямоугольник" или "прямоугольник-квадрат". Этот форму наследования лучше не применять;
комбинирование. Дочерний класс наследует черты нескольких классов — это множественное наследование.
ST>Вообще некоторые вопросы смахивают не на общепризнанное знание, а на знание лекций конкретого преподавателя.
Только последний
Остальные — должен знать каждый студент. Другое дело, что порядок вопросов — да. соответствует главе "Наследование" в лекциях.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Alexey_VL, Вы писали:
A_V>Да, еще вдогонку пара задачек:
A_V>int x = 5;
A_V>Какой будет результат в случаях: A_V>1. x = x+++x; A_V>2. x = x+++++x; A_V>3. x = x+++++++x; A_V>4. ++x = x+++++x; A_V>5. x++ = x+++++x; A_V>
Ответ стандарта: undefined behaviour — неопределенное поведение!
Во всех случаях, что бы там не выдавали компиляторы.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>Здравствуйте, Alexey_VL, Вы писали:
A_V>>Да, еще вдогонку пара задачек:
A_V>>int x = 5;
A_V>>Какой будет результат в случаях: A_V>>1. x = x+++x; A_V>>2. x = x+++++x; A_V>>3. x = x+++++++x; A_V>>4. ++x = x+++++x; A_V>>5. x++ = x+++++x; A_V>> LVV>Ответ стандарта: undefined behaviour — неопределенное поведение! LVV>Во всех случаях, что бы там не выдавали компиляторы.
Честно говоря, я не знаток стандарта, поэтому хотелось бы конкретики. Пример построен на таблице приоритетов и грамматике С++. Думаю, что они входят в стандарт. Меня в плане неопределенности только пятый пример смущает — почему компилятор не хочет принимать х++ как lvalue.
Мафиозная диктатура это нестабильность. Если не мафиозная диктатура, то Конституция и демократия.
Здравствуйте, Alexey_VL, Вы писали:
A_V>>>Да, еще вдогонку пара задачек:
A_V>>>int x = 5;
A_V>>>Какой будет результат в случаях: A_V>>>1. x = x+++x; A_V>>>2. x = x+++++x; A_V>>>3. x = x+++++++x; A_V>>>4. ++x = x+++++x; A_V>>>5. x++ = x+++++x; A_V>>> LVV>>Ответ стандарта: undefined behaviour — неопределенное поведение! LVV>>Во всех случаях, что бы там не выдавали компиляторы.
A_V>Честно говоря, я не знаток стандарта, поэтому хотелось бы конкретики. Пример построен на таблице приоритетов и грамматике С++. Думаю, что они входят в стандарт. Меня в плане неопределенности только пятый пример смущает — почему компилятор не хочет принимать х++ как lvalue.
Для пунктов 2-5 компилятор должен выдать ошибку потому что x++ не является lvalue, а следовательно к нему неприменимы операции ++ и =. Читать здесь
П.1 должен скомпилироваться, но мы получим неопределенное поведение, потому что для встроенных типов все операции в выражении x++ + x производятся как-бы одновременно, и для int x = 5 можем получить как 5 + 6, так и 5 + 5.
Здравствуйте, Alexey_VL, Вы писали:
LVV>>Ответ стандарта: undefined behaviour — неопределенное поведение! LVV>>Во всех случаях, что бы там не выдавали компиляторы.
A_V>Честно говоря, я не знаток стандарта, поэтому хотелось бы конкретики. Пример построен на таблице приоритетов и грамматике С++. Думаю, что они входят в стандарт. Меня в плане неопределенности только пятый пример смущает — почему компилятор не хочет принимать х++ как lvalue.
Зайди в поиск и набери строку "чудеса инкремента" — тема обсосана до костей и очень подробно...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Astaroth, Вы писали:
A>Здравствуйте, Dr.Gigabit, Вы писали:
DG>>Не завидую я вашим студентам
A>Мне бы такого препода...
Эх!!! Пообсуждали бы!....
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, folk, Вы писали:
F>Здравствуйте, Alexey_VL, Вы писали:
A_V>>>>Да, еще вдогонку пара задачек:
A_V>>>>int x = 5;
A_V>>>>Какой будет результат в случаях: A_V>>>>1. x = x+++x; A_V>>>>2. x = x+++++x; A_V>>>>3. x = x+++++++x; A_V>>>>4. ++x = x+++++x; A_V>>>>5. x++ = x+++++x; A_V>>>> LVV>>>Ответ стандарта: undefined behaviour — неопределенное поведение! LVV>>>Во всех случаях, что бы там не выдавали компиляторы.
Это, конечно, не совсем правильно..
1. x = x++ + x; // неопределенное поведение. Ошибок компиляции не должно быть
2. x = x++ + ++x; // неопределенное поведение. Ошибок компиляции не должно быть
3. x = x++++ + ++x; // Должна быть ошибка компиляции для х++++.
Постфиксный инкремент выдает значение, поэтому не транслируется даже (х++)++. А вот (++х)++ = работает.
4. ++x = x++ + ++x; // неопределенное поведение. Ошибок компиляции не должно быть.
Префикный инкремент выдает ссылку, поэтому так писать можно...
5. x++ = x++ + ++x; // Должна быть ошибка компиляции для х++ слева — это не l-value
F>Для пунктов 2-5 компилятор должен выдать ошибку потому что x++ не является lvalue, а следовательно к нему неприменимы операции ++ и =. Читать здесь
Здравствуйте, LaptevVV, Вы писали:
A>>Мне бы такого препода... LVV>Эх!!! Пообсуждали бы!....
Да не, правда.
Специальность — прикладная математика. Я на 3м курсе. Предметы, по которым требовалось бы делание хоть чего-нибудь за компом, кончились в первом семестре второго курса, начнутся снова где-то в районе диплома. 80% тех, кто учится в моей и параллельных группах, ни на что бОльшее, чем hello world, не способны. Болото...
Здравствуйте, Astaroth, Вы писали:
A>Здравствуйте, LaptevVV, Вы писали:
A>>>Мне бы такого препода... LVV>>Эх!!! Пообсуждали бы!....
A>Да не, правда. A>Специальность — прикладная математика. Я на 3м курсе. Предметы, по которым требовалось бы делание хоть чего-нибудь за компом, кончились в первом семестре второго курса, начнутся снова где-то в районе диплома. 80% тех, кто учится в моей и параллельных группах, ни на что бОльшее, чем hello world, не способны. Болото...
A>ВУЗ — МИРЭА.
Ну, тогда дело не в преподе, а в учебном плане твоей специальности...
Более программистской нет поблизости?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Astaroth, Вы писали:
A>Предметы, по которым требовалось бы делание хоть чего-нибудь за компом, кончились в первом семестре второго курса, начнутся снова где-то в районе диплома.
А книжки читать религия не позволяет? Если желания есть то можно и по книжкам научиться, а если нет — тут никакой препод не поможет.
Здравствуйте, yeti, Вы писали:
Y>А книжки читать религия не позволяет? Если желания есть то можно и по книжкам научиться, а если нет — тут никакой препод не поможет.
LaptevVV:
> A_V>>>>2. x = x+++++x;
[] > A_V>>>>4. ++x = x+++++x;
[] > 2. x = x++ + ++x; // неопределенное поведение. Ошибок компиляции не должно быть
[] > 4. ++x = x++ + ++x; // неопределенное поведение. Ошибок компиляции не должно быть.
[]
Валерий, вы же расставили пробелы не так как это сделал бы компилятор. Жадный лексический анализатор С распознает наиболее длинную возможную лексему. Так что для п.2 разбор будет произведен так
Здравствуйте, yeti, Вы писали:
Y>Если желания есть то можно и по книжкам научиться, а если нет — тут никакой препод не поможет.
Нельзя! Нельзя научиться "по книжкам", по ним можно лишь получить теоретическую подготовку, реальные проекты обламывают большинство "книжных" начинаний. Мой сенсей однажды сказал очень правильные слова — "заказчика не интересует, насколько красиво написана твоя программа, она просто должна работать..." Книги безусловно полезно читать, поскольку они развивают, но возводить их в абсолют не стоит... единственный человек, совместивший в себе "теоретика" и практического программиста — это доктор Страуструп (душевнейший человек, кстати). Отсюда мое ИМХО — "научиться" можно только по реальным проектам, пусть и сделанным на коленке.
P.S.
Павел, это наверно в "Филосифию..." надо перенести...
[ posted via RSDN@Home 1.1.4 beta 3 r241, accompanied by Mad Sin — She's So Bad It's Good ]
Здравствуйте, SchweinDeBurg, Вы писали:
SDB>Мой сенсей однажды сказал очень правильные слова — "заказчика не интересует, насколько красиво написана твоя программа, она просто должна работать..."
Не согласен. Заказчика может и не интерисует, но это точно будет инрерисовать того, кто будет читать твой код. (И этим кем-то можешь оказаться ты сам через пол года)
SDB>P.S. SDB>Павел, это наверно в "Филосифию..." надо перенести...
Если там такого нет, действительно в философию стОит.
Здравствуйте, Dr.Gigabit, Вы писали:
DG>Здравствуйте, SchweinDeBurg, Вы писали:
SDB>>Мой сенсей однажды сказал очень правильные слова — "заказчика не интересует, насколько красиво написана твоя программа, она просто должна работать..."
DG>Не согласен. Заказчика может и не интерисует, но это точно будет инрерисовать того, кто будет читать твой код. (И этим кем-то можешь оказаться ты сам через пол года)
SDB>>P.S. SDB>>Павел, это наверно в "Филосифию..." надо перенести...
DG>Если там такого нет, действительно в философию стОит.
Здравствуйте, SchweinDeBurg, Вы писали:
Y>>Если желания есть то можно и по книжкам научиться, а если нет — тут никакой препод не поможет.
SDB>Отсюда мое ИМХО — "научиться" можно только по реальным проектам, пусть и сделанным на коленке.
Я на самом деле примерно это и имел в виду — что ждать препода который придёт и всему научит не прокатит
ИМХО выучить по книжкам синтаксис вполне реально, а дальше "по реальным проектам, пусть и сделанным на коленке" (с)
Здравствуйте, SchweinDeBurg, Вы писали:
SDB>Нельзя! Нельзя научиться "по книжкам", по ним можно лишь получить теоретическую подготовку, реальные проекты обламывают большинство "книжных" начинаний.
Позвольте с вами не согласиться, уважаемый. Книги — это прежде всего чужой опыт. Есть книги содержащие голую теорию — справочники. По справочникам не учатся — уточняют детали.
Начинать проект, не основываясь ни на каком опыте, довольно трудно, долго и дорого.
SDB>Мой сенсей однажды сказал очень правильные слова — "заказчика не интересует, насколько красиво написана твоя программа, она просто должна работать..."
Полностью согласен с этим мудрым человеком.
SDB>Книги безусловно полезно читать, поскольку они развивают, но возводить их в абсолют не стоит... единственный человек, совместивший в себе "теоретика" и практического программиста — это доктор Страуструп (душевнейший человек, кстати).
Не возводить в абсолют чужой опыт может позволить себе только человек с неимоверным своим опытом.
SDB> Отсюда мое ИМХО — "научиться" можно только по реальным проектам, пусть и сделанным на коленке.
Учиться на свих ошибках можно, но на чужих — гораздо эффективнее.
Здравствуйте, nobody2, Вы писали:
N>Позвольте с вами не согласиться, уважаемый.
"Позвольте Вам этого не позволить..." (с) не помню
N>Книги — это прежде всего чужой опыт. Есть книги содержащие голую теорию — справочники. По справочникам не учатся — уточняют детали.
Согласен полностью. Хотя... а вот фундаментальный труд доктора Страуструпа (тот, что без Мэри Эллис написан) — это что? справочник? или учебник? ИМХО — ни то, ни другое. Учиться по нему плюсам, это страшное наказание, а вот читать, когда уже "все знаешь" — истинное удовольствие... столько нового для себя открываешь.
N>Полностью согласен с этим мудрым человеком.
Я тоже... теперь...
N>Учиться на свих ошибках можно, но на чужих — гораздо эффективнее.
Ну да, еще Бисмарк говорил — "только дураки учатся на собственных ошибках, а я предпочитаю учиться на ошибках других..." Тем не менее, для нас проблема "набивания шишек" все еще актуальна — ибо без них нет программиста (ИМХО). Только поизобретав велосипеды можно оценить красоту и удобство того, что "уже украдено до нас".
Как закоренелый виндовозник, я не жалею о том, что перед переходом на MFC я позанимался написанием собственных библиотек классов, переписыванием CRT (правда, это еще под Борландом было), etc. Да, я понимаю, что проходил кем-то уже "выстраданный" путь — но этого стоило, потому что параллельно я узнавал этот волшебный ЯП, носящий скромное имя C++. Я учился любить и ненавидеть его, "как можно любить и ненавидеть только самого себя" (с) Довлатов.
К сожалению, я не настолько тонко знаю Стандарт, как Павел, Андрей или Максим... но я люблю этот язык — безумный, неоднозначный... и такой красивый! И любовь эту питают не книжки, а реально сделанные проекты.
P.S.
Последняя фраза ене несет в себе ни малейшего сносбства.
[ posted via RSDN@Home 1.1.4 beta 3 r241, accompanied by Motorhead — Civil War ]
Здравствуйте, nobody2, Вы писали:
N>Не возводить в абсолют чужой опыт может позволить себе только человек с неимоверным своим опытом.
ИМХО Вы не правы... "Патриотизм — религия бешеных..." (с) Вальтер Скотт. Любой фанатизм вреден — не все, кто пользуются boost'ом, являются крутыми профи... программер (даже сейчас, в эпоху тотального засилья RAD) должен посвятить какое-то время "набиванию шишек". И потом: "опыт — это то, что выприобретаете, читая написанное мелким шрифтом..." (с) С.Н.Паркинсон
[ posted via RSDN@Home 1.1.4 beta 3 r241, accompanied by Motorhead — Dog-Face Boy ]
Здравствуйте, SchweinDeBurg, Вы писали:
SDB>Ну да, еще Бисмарк говорил — "только дураки учатся на собственных ошибках, а я предпочитаю учиться на ошибках других..." Тем не менее, для нас проблема "набивания шишек" все еще актуальна — ибо без них нет программиста (ИМХО). Только поизобретав велосипеды можно оценить красоту и удобство того, что "уже украдено до нас".
Вот этот Бисмарк — и есть самый главный дурак. Одна своя ошибка, осознанная и набившая шишку, стоит десяти прочтений о десяти ошибках, совершенных другими людьми. Все, чему можно научиться на чужих ошибках — это бесполезному словоблудию на дилетантском уровне. Настоящее знание приходит только через собственный опыт.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, McSeem2, Вы писали:
MS>Вот этот Бисмарк — и есть самый главный дурак.
Между прочим, он был канцлером Германии.
MS>Все, чему можно научиться на чужих ошибках — это бесполезному словоблудию на дилетантском уровне. Настоящее знание приходит только через собственный опыт.
Вы резки... но отчасти справдливы... как советский суд...
P.S.
Павел, этой ветке точно пора в "Философию..."
[ posted via RSDN@Home 1.1.4 beta 3 r241, accompanied by Motorhead — Out Of The Sun ]
Здравствуйте, SchweinDeBurg, Вы писали:
SDB>"Позвольте Вам этого не позволить..." (с) не помню SDB>Согласен полностью. Хотя... а вот фундаментальный труд доктора Страуструпа (тот, что без Мэри Эллис написан) — это что? справочник? или учебник? ИМХО — ни то, ни другое. Учиться по нему плюсам, это страшное наказание, а вот читать, когда уже "все знаешь" — истинное удовольствие... столько нового для себя открываешь. N>>Полностью согласен с этим мудрым человеком. SDB>Я тоже... теперь...
И я — тоже! И уже давно... SDB>Как закоренелый виндовозник, я не жалею о том, что перед переходом на MFC я позанимался написанием собственных библиотек классов, переписыванием CRT (правда, это еще под Борландом было), etc. Да, я понимаю, что проходил кем-то уже "выстраданный" путь — но этого стоило, потому что параллельно я узнавал этот волшебный ЯП, носящий скромное имя C++. Я учился любить и ненавидеть его, "как можно любить и ненавидеть только самого себя" (с) Довлатов. SDB>К сожалению, я не настолько тонко знаю Стандарт, как Павел, Андрей или Максим... но я люблю этот язык — безумный, неоднозначный... и такой красивый! И любовь эту питают не книжки, а реально сделанные проекты.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Dr.Gigabit, Вы писали:
DG>Здравствуйте, LaptevVV, Вы писали:
LVV>>Ответ из моей книжки
DG>Можно ли где достать Вашу книгу в электронном варианте? Было бы очень интересно ознакомится.
Это — вторая... Она ещше в работе и постоянно уточняется — по результатам исследования стандарта и бесед на RSDN. Как закнчу — поговорю с мужиками — вывесим на сайте... Правда, не всю — в договоре оковорено, что всю — нельзя... А по частям — в личное пользование — это пожалуйста...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, folk, Вы писали:
F>LaptevVV:
>> A_V>>>>2. x = x+++++x; F>[] >> A_V>>>>4. ++x = x+++++x; F>[] >> 2. x = x++ + ++x; // неопределенное поведение. Ошибок компиляции не должно быть F>[] >> 4. ++x = x++ + ++x; // неопределенное поведение. Ошибок компиляции не должно быть. F>[]
F>Валерий, вы же расставили пробелы не так как это сделал бы компилятор. Жадный лексический анализатор С распознает наиболее длинную возможную лексему. Так что для п.2 разбор будет произведен так
x = x ++ ++ + x ;
, а для п.4 так
++ x = x ++ ++ + x ;
и в обоих случаях получим ошибку компиляции.
Согласен... Два подряд постинкремента — не прокатят...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, SchweinDeBurg, Вы писали:
SDB>>>Книги безусловно полезно читать, поскольку они развивают, но возводить их в абсолют не стоит... единственный человек, совместивший в себе "теоретика" и практического программиста — это доктор Страуструп (душевнейший человек, кстати).
N>>Не возводить в абсолют чужой опыт может позволить себе только человек с неимоверным своим опытом.
SDB>ИМХО Вы не правы... "Патриотизм — религия бешеных..." (с) Вальтер Скотт. Любой фанатизм вреден — не все, кто пользуются boost'ом, являются крутыми профи... программер (даже сейчас, в эпоху тотального засилья RAD) должен посвятить какое-то время "набиванию шишек". И потом: "опыт — это то, что выприобретаете, читая написанное мелким шрифтом..." (с) С.Н.Паркинсон
Оверквотинг
Приобретение опыта через набивание шишек — несколько метафизично, такой подход был характерен еще до эпохи исторического материализма, во времена Максвела и Попова. Сейчас в науке преобладает другой подход.
Почему при изучении высш. матем. вам не приходит в голову дойти до интегрального исчисления эмпирическим путем? Почему принимаете на веру существование электро-магнитной индукции?
Отрицание, игнорирование и пр. предыдущего опыта занчительно увеличивает время обучения. А время — деньги, как говорит буржуазная протестантская этика. Тотальное засилье RAD также связано с экономией время и получением дополнительной прибыли в единицу времени.
Устроили на работе мини-опрос и возникли расхождения по следующим вопросам:
LVV>
LVV>17. Какие два вида полиморфизма реализованы в С++?
LVV>18. Дайте определение полиморфного класса.
LVV>29. Чем отличается чистый виртуальный деструктор от чистой виртуальной функции?
LVV>30. Зачем требуется определение чистого виртуального деструктора?
LVV>31. Наследуется ли определение чистой виртуальной функции?
Здравствуйте, valker, Вы писали:
V>Здравствуйте, LaptevVV, Вы писали:
V>Устроили на работе мини-опрос и возникли расхождения по следующим вопросам:
LVV>>
LVV>>17. Какие два вида полиморфизма реализованы в С++?
LVV>>18. Дайте определение полиморфного класса.
LVV>>29. Чем отличается чистый виртуальный деструктор от чистой виртуальной функции?
LVV>>30. Зачем требуется определение чистого виртуального деструктора?
LVV>>31. Наследуется ли определение чистой виртуальной функции?
V>Не могли бы вы в кратце просветить?
17 и 18
Александреску указывает, что в С++ реализованы два типа полиморфизма:
статический полиморфизм (compile-time polymorphism – полиморфизм времени компиляции), который осуществляется с помощью перегрузки и шаблонов функций;
динамический полиморфизм (run-time polymorphism – полиморфизм времени выполнения), реализуемый виртуальными функциями.
Класс, включающий виртуальные функции, называется полиморфным классом.
29 и 30
Класс, в котором определен чистый виртуальный деструктор, тоже является абстрактным, и создавать объекты этого класса запрещено. Однако чистые виртуальные деструкторы несколько отличаются от чистых виртуальных функций. Первое отличие проявляется при наследовании. Вспомним, что деструкторы не наследуются, а при отсутствии явного определения автоматически создаются в производном классе. Это означает, что класс-наследник не является абстрактным классом!
Второе отличие заключается в том, что при объявлении чисто виртуального деструктора нужно написать и его определение. Да-да, не поднимайте удивленно брови — нужно написать определение чистого виртуального деструктора для базового класса. Это несколько странное правило объясняется тем, что деструктор наследника обязательно вызывает деструктор базового класса — поэтому чистый деструктор должен все же быть определен
31.
Определять можно не только чистые деструкторы, но и чистые виртуальные методы. Класс, для которого это определение написано, по-прежнему является абстрактным классом. В отличие от чистых виртуальных деструкторов, даже определенная в базовом классе чистая виртуальная функция наследуется как чистая, поэтому производный класс тоже будет абстрактным при отсутствии собственного определения.
Из этого вроде следует. что определение не наследуется?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!