Изменения

Перейти к: навигация, поиск

Старые вопросы на экзамен по C++

1826 байт добавлено, 05:47, 16 июня 2011
Часть 4
# Объясните, что такое «срезка» или «расщепление».
# Объясните, зачем нужны виртуальные функции.
#: Чтобы перегрузить их поведение при наследовании.
# Что такое связывание?
# Чем «раннее» связывание отличается от «позднего»?
# Какие два вида полиморфизма реализованы в С++?
#: Статический и динамический
# Дайте определение полиморфного класса.
# Может ли виртуальная функция быть дружественной функцией класса?
# Наследуются ли виртуальные функции?
#: наследуются(иначе нафига они? :) ).
# Каковы особенности вызова виртуальных функций в конструкторах и деструкторах?
# Можно ли сделать виртуальной перегруженную операцию, например, сложение?
#: Можно
# Может ли конструктор быть виртуальным? А деструктор?
# Как виртуальные функции влияют на размер класса?
#: К размеру класса добавляется размер виртуальной таблицы функций.
# Как объявляется «чистая» виртуальная функция?
#: В конце сигнатуры пишут =0;
# Дайте определение абстрактного класса.
#: Абстрактный класс - класс, содержащий чисто абстрактные функции. У чисто абстрактного класса не может быть экзмепляра, но можно хранить на него указатель.
# Наследуются ли чистые виртуальные функции?
#: Да
# Можно ли объявить деструктор чисто виртуальным?
# Чем отличается чистый виртуальный деструктор от чистой виртуальной функции?
# Объясните разницу наследования интерфейса от наследования реализации.
# Назовите причины, требующие разделения программ на части.
#: во-первых, просто декомпозиция, для меньшей путаницы
#: во-вторых, для того чтобы уменьшить время компиляции
# Дайте определение термина «единица трансляции»?
# Чем отличается файл с исходным текстом от единицы трансляции?
# Что такое «объектный модуль»? Программа, которая «собирает» объектные модули в программу, называется _____________ ?
# В чем заключается отличие аргумента «файл» от <файл> в директиве #include?
#: <file> - ищет в папках, которые указаны в свойствах какой-то переменной Include(в вижаке задается свойствами проекта), "file" - в текущей директории.
# Что такое ODR?
#: One Definition Rule - принцип, по которому, переменная/класс/метод может быть опеределена только один раз в одной из единиц трансляции. При этом объявлять можно сколько угодно.
# Объясните, что такое «страж» включения и зачем он нужен.
#: Это или #pragma once или #ifndef H_NAME #define H_NAME //код хедера #endif. Нужен чтобы соблюдать ODR.
# Является ли интерфейс класса его определением?
# Сколько определений класса может быть в единице трансляции?
#: одно
# Сколько определений класса может быть в многофайловой программе?
#: одно
# Чем отличаются стандартные заголовки <string>, <string.h> и <cstring>?
#: <string> - строки C++, библиотеки STL. <string.h> - Строки C. <cstring> - то же, что <string.h>, но все обернуто в пространство имен std.
# Объясните суть идиомы Pimpl.
 
== Часть 5 ==
# Что такое делегирование и как его можно использовать для повышения степени инкапсуляции?

Навигация