Тест по дисциплине «Объектно -ориентированное программирование»
B. Набор текстовых значений в формате Unicode, которые расположены в случайном порядке.
C. Набор данных типа int (32-бит целое)
20. Какие бывают массивы ?
B. Сложные и простые
C. Одномерные и многомерные
D. Резиновые и статичные
21. Что такое цикл и для чего они нужны
A. Циклы нужны для многократного запуска программы
B. Циклы нужны для многократного выполнения кода.
C. Циклы нужны для многократного размещения данных.
D. Циклы нужны чтобы выполнить код без ошибок.
22. Какие бывают циклы?
A. Большие и маленькие
B. Цикл , Форич , Двойной цикл , Многократный
C. for, while, do-while, foreach
D. ref, out, static, root
23 Какой оператор возвращает значение из метода ?
2 4 . Что такое константа ?
A. Переменная типа string
B. Переменная которая может быть изменена в любое время.
C. Глобальная переменная
D. Переменная значение которой нельзя изменить.
25. Что обозначает ключевое слово var ?
A. Устраивает войну между программами
B. Обозначает что переменная без явного типа данных (+)
C. Обозначает что переменная имеет явный тип данных
D. Такого слова нету в C#
26. Что такое Куча ?
A. Это структура данных
B. Именованная область памяти
C. Область динамической памяти
D. Куча переменных
A. любой тип данных, определяемый пользователем
B. тип данных, определяемый пользователем и сочетающий в себе данные и функции их обработки
C. структура, для которой в программе имеются функции работы с нею
28. Членами класса могут быть
A. — как переменные, так и функции, могут быть объявлены как private и как public
B. — только переменные, объявленные как private
C. — только функции, объявленные как private
D. — только переменные и функции, объявленные как private
E. — только переменные и функции, объявленные как public
29. Что называется конструктором?
A. метод, имя которого совпадает с именем класса и который вызывается автоматически при создании объекта класса
B. метод, имя которого совпадает с именем класса и который вызывается автоматически при объявлении класса (до создания объекта класса)
C. метод, имя которого необязательно совпадает с именем класса и который вызывается при создании объекта класса
D. метод, имя которого совпадает с именем класса и который необходимо явно вызывать из головной программы при объявлении объекта класса
A. — переменная, содержащая указатель на класс
B. — экземпляр класса
C. — класс, который содержит в себе данные и методы их обработки
31. Отметьте правильные утверждения
A. — конструкторы класса не наследуются
B. — конструкторов класса может быть несколько, их синтаксис определяется программистом
C. — конструкторов класса может быть несколько, но их синтаксис должен подчиняться правилам перегрузки функций
D. — конструктор возвращает указатель на объект
E. — конструктор не возвращает значение
32. Что называется деструктором?
A. — метод, который уничтожает объект
B. — метод, который удаляет объект
C. — метод, который освобождает память, занимаемую объектом
D. — системная функция, которая освобождает память, занимаемую объектом
33. Выберите правильные утверждения
A. — у конструктора могут быть параметры
B. — конструктор наследуется, но должен быть перегружен
C. — конструктор должен явно вызываться всегда перед объявлением объекта
D. — конструктор вызывается автоматически при объявлении объекта
E. — объявление каждого класса должно содержать свой конструктор
F. — если конструктор не создан, компилятор создаст его автоматически
34. Выберите правильные утверждения
A. — деструктор — это метод класса, применяемый для удаления объекта
B. — деструктор — это метод класса, применяемый для освобождения памяти, занимаемой объектом
C. — деструктор — это отдельная функция головной программы, применяемая для освобождения памяти, занимаемой объектом
D. — деструктор не наследуется
E. — деструктор наследуется, но должен быть перегружен
35. Что называется наследованием?
A. — это механизм, посредством которого производный класс получает элементы родительского и может дополнять либо изменять их свойства и методы
B. — это механизм переопределения методов базового класса
C. — это механизм, посредством которого производный класс получает все поля базового класса
D. — это механизм, посредством которого производный класс получает элементы родительского, может их дополнить, но не может переопределить
36. Выберите правильное объявление производного класса
A. — class MoreDetails :: Details ;
B. class MoreDetails: public class Details;
C. class MoreDetails: public Details;
D. class MoreDetails: class(Details);
37. Выберите правильные утверждения:
A. — если элементы класса объявлены как private , то они доступны только наследникам класса, но не внешним функциям
B. — если элементы класса объявлены как private , то они недоступны ни наследникам класса, ни внешним функциям
C. — если элементы объявлены как public , то они доступны наследникам класса, но не внешним функциям
D. — если элементы объявлены как public , то они доступны и наследникам класса, и внешним функциям
38. Возможность и способ обращения производного класса к элементам базового определяется
A. — ключами доступа: private , public , protected в теле производного класса
B. — только ключом доступа protected в заголовке объявления производного класса
C. — ключами доступа: private , public , protected в заголовке объявления производного класса
D. — ключами доступа: private , public , protected в теле базового класса
39. Выберите правильные соответствия между спецификатором базового класса, ключом доступа в объявлении производного класса и правами доступа прозводного класса к элементам базового
A. -ключ доступа — public ; в базовом классе: private ; права доступа в производном классе — protected
B. ключ доступа — любой; в базовом классе: private ; права доступа в производном классе — нет прав
C. ключ доступа — private ; в базовом классе: public ; права доступа в производном классе — public
D. ключ доступа – любой; в базовом классе: public ; права доступа в производном классе – такие же, как ключ доступа
40. Выберите правильные утверждения:
A. — одна функция может быть дружественной нескольким классам
B. — дружественная функция не может быть обычной функцией, а только методом другого класса
C. — дружественная функция объявляется внутри класса, к элементам которого ей нужен доступ
D. — дружественная функция не может быть методом другого класса
Какой тип переменной надо использовать в счетчике цикла и объявлении массива?
Попробую пояснить. В любом языке программирования всегда все борятся за то, чтобы программа кушала как можно меньше памяти. Как бы не было утечки. Особенно в C++ нужно корректно выделять, освобождать. Каждый тип данных занимает сколько-то места в памяти в байтах. Примеры буду писать на C# Объясните мне пожалуйста. Почему программисты, зная, например, что в цикле будет пробегаться по массиву длиной 10 символов и эта длина будет константна, то все равно пишут
for (int i = 0; i < someVar.Length; i++) < // do something >
Почему счетчик типа int ? Почему не sbyte или byte ? Да, может она отработает быстро в данной области видимости. Но таких блоков много же по коду. Аналогично с массивами. Зная точно длину (Поправочка. Т.к. ответы уже есть, а вопрос был задан. немного сбил с толку. : не длину, кончено же, а точно зная максимальные числа.. к примеру что будут числа от 1 до 100 ). Все равно зачастую все объявляют
int[] arr = new int[8];
ushort[] arr = new ushort[8];
byte[] arr = new byte[8];
Данный массив будет же занимать память уже пока его не убьют или программа не закончит работу. Так отсюда вопрос. Почему так все делают? Я чего-то не знаю еще пока или это просто лень программисткая?
Отслеживать
user177221
задан 2 ноя 2015 в 11:00
Алексей Шиманский Алексей Шиманский
71.1k 12 12 золотых знаков 90 90 серебряных знаков 180 180 бронзовых знаков
1) for (int i = 0; i < someVar.Length; i++) <. >— Length — это int же? почему тогда я должен использовать меньший тип данных? А если там завтра вдруг окажется больше элементов, чем я думал? Потом менять это в куче мест? А оно мне надо? 2) Да, может она отработает быстро в данной области видимости. Но таких блоков много же по коду. — это не то место, где надо оптимизировать 3) ushort[] arr = new ushort[8]; — а разве так вы не меняете смысл исходного массива? У вас был массив int, а стал массив ushort. Здесь же не в длине массива дело, а в его значениях
2 ноя 2015 в 11:06
В любом языке программирования всегда все борятся за то, чтобы программа кушала как можно меньше памяти. — это уже давно не так. Современные программы предпочитают расходовать больше памяти, чтобы ускорить вычисления. Любой кэш есть контрпример к вашему утверждению.
2 ноя 2015 в 11:13
К тому же, программист скорее всего воспользуется foreach-ем
2 ноя 2015 в 11:21
@danpetruk зачем же юзать форич, когда размерность известна? зачем накладные расходы на получение енумераторов и тд?
2 ноя 2015 в 11:27
@Dmitry: Лёгкость поддержки кода и очевидное отсутствие ошибок перекрывают с лихвой расходы на один несчастный итератор. Который, кстати, скорее всего будет всё равно выкинут оптимизатором.
2 ноя 2015 в 11:31
4 ответа 4
Сортировка: Сброс на вариант по умолчанию
Ваше основное предположение — экономия памяти любой ценой — неверно.
Например, процессор намного более эффективно работает с типом данных int , чем с byte , поэтому для ускорения работы программисты и компилятор используют int где только возможно, пренебрегая мелкими потерями в памяти и выигрывая в производительности. Точно так же обычно используется тип данных double вместо float потому, что он работает быстрее, хоть и занимает вдвое больше места.
Затем, выравнивание структур данных. Компиляторы вставляют дополнительные байты между полями структур данных для выравнивания и тем самым более быстрого доступа.
Ещё пример — loop unrolling и function inlining. Оптимизирующий компилятор разворачивает цикл
for (int i = 0; i < 10; i++) f(i);
f(0); f(1); f(2); f(3); f(4); f(5); f(6); f(7); f(8); f(9);
потому что это быстрее. Выигрыш в три байта никому не нужен, выигрыш в три миллисекунды ощущает любой.
Далее, по поводу цикла. В современном программировании код должен быть достаточно общим, чтобы не акцентировать низкоуровневые оптимизации, а делать акцент на семантику, смысл кода. Поэтому низкоуровневые детали стараются прятать где только возможно.
С этой точки зрения та деталь, что данные массив имеет конкретно 10 элементов, и для его индексации можно было бы использовать 4 бита (экономия!), просто игнорируется. Кроме того. возможность индексации «узким» типом данных не проверяема компилятором, а значит, если завтра этот код получит на вход массив с бОльшим количеством элементов, код молча перестанет работать.
Правильный современный подход к перебору элементов массива таков:
foreach (var item in array) < // process item >
Здесь мы абстрагируемся от размера массива (будет работать с любым размером), от конкретного способа перебора (мы не кодируем явно порядок перебора элементов), от самого массива (тот же код сработает и со списком), таким образом перекладываем заботу о низкоуровневым оптимизациях на компилятор, и делаем код более простым в поддержке.
Не стоит делать простые, тривиальные вещи сложно. Оставьте мощь вашего мыслительного процесса для реально сложных задач и для алгоритмической оптимизации. Пусть за вас оптимизирует компилятор, поверьте, он умеет это лучше.
Отслеживать
ответ дан 2 ноя 2015 в 11:16
206k 28 28 золотых знаков 291 291 серебряный знак 526 526 бронзовых знаков
я не был бы столь категоричен и рассмотрел вариант со случайным доступом по индексам массива, когда массив char[] полностью помещается в кэш, а массив int[] (он же в 4 раза больше) уже нет. Разница может быть в разы. При последовательном доступе это может не так ощущаться из-за предвыборки данных. Но, практически в любом случае (imho) (в Си коде на современном Intel) char (если нет дополнительных алгоритмических затрат) будет не медленнее int-а.
2 ноя 2015 в 12:53
@avp: Это да, но я бы сделал более акцент на maintainability. Не дело экономить там, где необходимость экономии не показал профайлер. Думаю, что использование char превращается в int компилятором на достаточно хороших настройках оптимизации.
2 ноя 2015 в 13:10
Вряд ли компилятором (по крайней мере Си). Вообще-то преобразование (в long) естественным образом происходит при загрузке данных в регистр.
2 ноя 2015 в 14:00
@avp: А это недолго и проверить. Сейчас сделаю.
2 ноя 2015 в 14:10
@avp: Угу, вы правы, я неправильно выразился. У меня gcc развернул в смысле unroll на 4-х итерациях. А в смысле направления изменения всегда, когда не unroll'ит.
2 ноя 2015 в 14:40
Объявлять в этом цикле
for (int i = 0; i < someVar.Length; i++) < // do something >
переменную i , как имеющую тип, например, byte не имеет никакого смысла, так как в данном условии
она будет преобразована к типу int . То есть при генерации объектного кода будут добавлены дополнительные команды. Более того эта переменная локальная и большого влияние на использование памяти не оказывает.
Что касается массивов, то обычно объявляют массив того типа, объекты которого требуются. Не всегда заранее можно сказать, какое будет верхнее и нижнее значения элементов массива.
Если же вы точно знаете, что вас устраивает массив типа byte , то вы можете определить массив такого типа. Однако, опять-таки, в различных арифметических и других операциях объекты вашего массива будут постоянно преобразовываться к типу int .
Есть и другие связанные с этим проблемы. Например, в C++ вы можете объявить массив, имеющий тип int8_t . Однако этот тип является алиасом для типа char . Тогда при выводе элементов такого массива на консоль, используя оператор operator
int8_t a[] = < 1, 2, 3, 4, 5, 6, 7, 8, 9 >;
то при выводе его на консоль
for ( int8_t x : a ) std::cout
на экране консоли появятся странные знаки, или же при выводе числа 9 вообще ничего не появится, а курсор перескочит на несколько позиций вперед, так как значение 9 будет рассматриваться оператором вывода как символ табуляции.
Поэтому вам придется постоянно помнить, что вместо вышеуказанного предложения вам надо писать
for ( int x : a ) std::cout
Это все лишь может служить источником трудно находимых ошибок.
Вот еще один пример на C++, который может привести к ошибке. Допустим у вас есть следующие объявления
unsigned short a = 5; unsigned short b = 10; std::cout
Как видите, все переменные имеют беззнаковый целочисленный тип и одни и те же значения. Спрашивается, будет ли вывод на консоль у двух операторов вывода
std::cout
одинаков?:) Проверьте это сами.:)
Есть дилемма: больше памяти - больше скорость выполнения, меньше памяти - меньше скорость выполнения.
Вы можете оптимизировать свою программу, исходя из тех критериев, которые для вас приоритетны.
Но заниматься оптимизацией надо тогда, когда вы точно знаете причину и место неудовлетворительной работы программы.
Отслеживать
ответ дан 2 ноя 2015 в 11:23
Vlad from Moscow Vlad from Moscow
44.8k 3 3 золотых знака 38 38 серебряных знаков 89 89 бронзовых знаков
Есть дилемма: больше памяти - больше скорость выполнения, меньше памяти - меньше скорость выполнения. -- далеко не всегда. См. мой комментарий к ответу @VladD
2 ноя 2015 в 13:03
@avp Это всегда так и безусловно, потому что по крайней мере вы, имея больше памяти, можете использовать код, который был написан для меньшей памяти. Обратное же неверно.:)
2 ноя 2015 в 13:35
А, Вы в этом смысле (количество доступной памяти (или даже установленной в комп)). Я имел в виду память занятую переменными в программе.
2 ноя 2015 в 13:58
Про оптимизацию на спичках.
В выражении for (int i = 0; i < someVar.Length; i++) < . >происходит единичное выделение памяти и единичное освобождение после выхода. Даже если таких блоков много, каждый раз вы получите единичное выделение и освобождение. Дело меняется, только если у Вас есть вложенные циклы, но и данном случае речь идет о единичных выделениях, которые сразу же освобождаются. В итоге ваша программа в любой момент времени на таких блоках, сколько бы их ни было, будет экономить в среднем 4-7 байта(12-21 в случае с двумя-тремя вложенными циклами) и терять кучу производительности. Ответьте себе на вопрос, с учетом вышесказанного, так ли важны для программы эти пару байтов?
В массивах не путайте их длину и их хранимый тип данных. В длину в квадратных скобках передают int и она опять же является единичным выделением памяти, а тип массива определяют именно исходя из хранящихся в нем данных( Int16 , Int32 , Int64 ). Хотя если данных не много и памяти точно хватит, иногда можно и пренебречь поставив обычный Int32 .
В любом случае в Вашей программе наверняка найдется куча других мест, которые гораздо критичнее с точки зрения выделения памяти и скорости, чем выше приведенные.
Тест с ответами на тему программирование на языке C#
Набор текстовых значений в формате Unicode, которые расположены в случайном порядке.
Набор данных типа int (32-бит целое)
A20. Какие бывают массивы ?
Сложные и простые
Одномерные и многомерные (+)
Резиновые и статичные
A20. Что такое цикл и для чего они нужны
Циклы нужны для многократного запуска программы
Циклы нужны для многократного выполнения кода. (+)
Циклы нужны для многократного размещения данных.
Циклы нужны чтобы выполнить код без ошибок.
A21. Какие бывают циклы?
Большие и маленькие
Цикл, Форич, Двойной цикл, Многократный
for, while, do-while, foreach (+)
ref, out, static, root
A22. Какой оператор возвращает значение из метода ?
veni
return (+)
out
end
A23. Что такое константа ?
Переменная типа string
Переменная которая может быть изменена в любое время.
Переменная значение которой нельзя изменить. (+)
A24. Что обозначает ключевое слово var ?
Устраивает войну между программами
Обозначает что переменная без явного типа данных (+)
Обозначает что переменная имеет явный тип данных
Такого слова нету в C#
A25. Что такое Куча ?
Это структура данных
Именованная область памяти
Область динамической памяти (+)
Какой тип переменной используется в коде int a 5
Для чего используется этот участок кода?
Варианты ответов:
- вычисление НОК
- вычисление факториала с использованием рекурсии
- вычисление факториала
Какой результат выдаст программа?
Варианты ответов:
- 10
- 1 2 3 4 5 6 7 8 9 10
- ничего не выведет
- выдаст ошибку
- 1
Какой результат вернёт метод?
Варианты ответов:
- 0
- False
- True
- Выдаст ошибку
Варианты ответов:
Варианты ответов:
Варианты ответов:
- Не изменится
- Уменьшится
- Увеличится
Варианты ответов:
Варианты ответов:
Идет подсчет результатов
Сообщить о нарушение
Ваше сообщение отправлено, мы постараемся разобраться в ближайшее время.
Поделиться тестом:
- 1
- 0
Вставить на сайт: HTML-код
Попробуйте пройти эти тесты:
Комментарии:
Комментариев нет, будьте первыми! Команда Разработчиков 27 ноября 2017
Подписывайтесь на наши странички! Обязательно делитесь с друзьями! Впереди много новых интересных тестов! Ежедневные добавления! Страницы: Яндекс Дзен, ВКонтакте, Одноклассники, Facebook
Популярные тесты
Преимущества
Можете встраивать тесты на Ваш сайт. Тест показывается нашем и других сайтах. Гибкие настройки результатов. Возможность поделиться тестом и результатами. Лавинообразный ("вирусный") трафик на тест. Русскоязычная аудитория. Без рекламы!
Создавайте тесты онлайн, всё бесплатно. У нас можно бесплатно: создать тест онлайн для для учеников, друзей, сотрудников, для вашего сайта, с ответами и результатами - Все Бесплатно!
Пользователям
Вам захотелось отдохнуть? Или просто приятно провести время? Выбирайте и проходите онлайн-тесты, делитесь результатом с друзьями. Проверьте, смогут они пройти также как Вы, или может лучше?
Конструктор Тестов ру - это огромное количество интересных и бесплатных тестов на сообразительность, IQ, зрение, знания правил дорожного движения, программирования и многое другое. Если Вам понравилось, обязательно поделитесь со своими друзьями в социальных сетях или просто ссылкой. А еще Вы можете легко создать свой тест и его будут проходить десятки тысяч людей.
Внимание! Наши тесты не претендуют на достоверность – не стоит относиться к ним слишком серьезно!
Информация
- Контакты
- Реклама на проекте
- ВКонтакте
- Одноклассники
HTML-код для вставки на сайт Разрешить комментарии Автор теста запретил комментарии Блок Новинок и Популярных тестов Теперь тесты из блоков новинок и популярных отображаются внутри вашего сайта, что увеличивает просмотры ваших страниц в 5 раз! Все комментарии после публикации проходят строгую модерацию!