Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Объясните, что такое класс свойств (класс трактовок).






Параметры шаблонов, используемые для выбора того или иного алгоритма.

194. Каким образом можно использовать возможность наследования обычного класса от шаблона?

Создавать типонезависимые интерфейсы к внутреннему средству.

195. Может ли шаблонный конструктор быть конструктором по умолчанию?

Нет.

196. Для чего применяются директивы явного инстанцирования?

Чтобы соответствующий экземпляр был скомпилирован/слинкован. При объявлении инстанцированного типа.

197. Объясните, в чем состоят проблемы, возникающие при разделении шаблонного класса на интерфейс и реализацию?

Реализация не может быть вынесена в cpp файл (так как экспорт шаблонов не поддерживается большинством компиляторов)

198. Что такое «модель явного инстанцирования» и как она работает?

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

Например, template basic_stringstring;

199. Может ли шаблонный класс иметь «друзей»?

Да.

200. Какие проблемы возникают при объявлении дружественной функции для класса-шаблона?

Заранее неизвестен тип, с которым ведётся работа.

201. Разрешается ли определять в классе-шаблоне статические поля? А статические методы?

Да. Да.

202. Что такое «инициализация нулем»?

Инициализация объекта значением 0, преобразованным в тип объекта.

203. Что является единицей памяти в С++? Какие требования к размеру единицы памяти прописаны в стандарте С++?

Байт. Это самая малая величина, достаточная для хранения самых маленьких базовых типов С++. Каждый байт – непрерывная последовательность бит, имеющая уникальный адрес.

204. В каких единицах выдает результат операция sizeof? Какие типы данных имеют размер 1?

В единицах char.

все виды char, пустой объект и указатель

205. Какие три вида памяти входят в модель памяти С++?

Статическая

Автоматическая(стек)

Свободная(куча)

206. Сколько видов динамической памяти обеспечивает С++?

Автоматическая и свободная(стек и куча)

207. Какие функции для работы с динамической памятью достались С++ по наследству от С? В какую библиотеку они включены?

семейство alloc и free

cstdlib

208. Какие функции выделяют память, и с помощью каких функций память освобождается?

malloc, free

209. Какое важное отличие имеет функция calloc() от функции malloc()?

Обнуление выделенной памяти.

210. Какие действия выполняют функции выделения памяти, если память не может быть выделена?

Возвращают NULL.

211. Зависит ли объем выделенной памяти от типа указателя? Влияет ли выравнивание на объем выделяемой динамической памяти?

Нет. Да.

212. Можно ли с помощью функции realloc() уменьшить объем выделенной памяти?

Да.

213. Что произойдет, если функции free() передать в качестве аргумента нулевой указатель?

Ничего.

214. В чем главное отличие объектно-ориентированного механизма new/delete от механизма malloc()/free()?

Он оперирует на уровне объектно-ориентированной абстракции, а не на машинном уровне. Машинная низкоуровневая модель рассматривает память как массив битов. Высокоуровневая модель, как объект.

215. Сколько существует форм new/delete? В чем их отличие?

new, new[], delete, delete[]

Возможность создавать массив объектов.

есть операторы с размещением, есть с параметром nothrow

216. Какие типы являются POD-типами? Чем отличается работа механизма new/delete с POD-объектами и nonPOD-объектами?

Plain old data. Те типы, которые есть в С. Классы или структуры, содержащие только POD-поля.

new X – не инициализируется

new X() – инициализируется

217. Какие функции выполняет обработчик new?

Пытается найти память в случае неудачи при помощи new_handler или просто возвращает исключение.

218. Можно ли реализовать собственный обработчик new и «прицепить» его к механизму new/delete?

Да. set_new_handler()

219. В чем главное отличие объединения от других видов классов С++?

Это структура, в которой все члены расположены по одному и тому же адресу.

220. Может ли объединение участвовать в иерархии наследования? Что такое анонимное объединение?

Нет. Объединение без имени, в области видимости структуры.

221. Разрешается ли определять для объединения конструкторы и деструктор? А виртуальные функции?

Нет. Нет.

222. В чем похожи и чем отличаются объединение и размещающий new?

Похожи моделью “конкретный кусок памяти – размещаю в нём, что хочу”. Отличаются – объединение интерпретирует кусок памяти по-разному.

223. Объясните, почему при использовании размещающего new нужно явным образом вызывать деструктор?

Потому что мы помещаем объект в область, которая явно не управляется стандартным распределителем памяти.

224. Зачем нужны интеллектуальные указатели?

Для облегчения управления памятью.

Для реализаций стратегий владения.

225. Что такое «стратегия владения»? Сколько стратегий владения вы знаете?

Способ, которым умные указатели ссылаются на объект

Глубокое копирование – копирование объекта, на который он ссылается

копирование при записи – копирование объекта происходит только при первой попытке его модификации

подсчёт ссылок – подсчёт указателей, ссылающихся на объект. когда 0 – сборка мусора

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

связывание ссылок – нет необходимости считать указатели, получается список владельцев(полезно при недостатке динамической памяти).

226. Какой интеллектуальный указатель реализован в стандартной библиотеке STL, и какую стратегию владения он реализует?

auto_ptr, разрушающее копирование


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.008 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал