Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
прога экзамен.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
272.38 Кб
Скачать

Void main()

{ base B, *pb = &B;

dir D, *pd = &D;

pb->f1();

pb->f2();

pb->f3();

pd->f1();

pd->f2();

pd->f3();

pd->f3(0);

pb = &D;

pb->f2();

pb->f3();

pb->f3(3);

}

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

89.    Что такое связывание? Чем «раннее» связывание отличается от «позднего»? Зачем виртуализируются методы класса?

90.    *Как «сделать виртуальными»friend-функции для перегруженных операторов ввода-вывода?

91.    Можно ли наследовать деструктор? Зачем виртуализировать деструктор?

92.    Определите понятие «чистый виртуальный метод», «абстрактный класс». Как объявляется «чистая» виртуальная функция?

93.    Если известно, что метод никогда не будет вызываться в базовом классе, а будут вызываться только его переопределенные версии в производных классах, то как лучше объявить такой метод?

94.    *Опишите понятие «множественное наследование». Размеры классов при множественном наследовании. Какие проблемы возникают при множественном наследовании?

95.    Укажите результат:

class B{

public:

virtual void msg () {cout << "classB ";}

};

class D: public B{

public:

virtual void msg() {cout << "classD ";}

};

Int main() {

B * var = new D;

var->msg();

}

 

96.    Дайте определение контейнера. Какие виды встроенных контейнеров в С++ вы знаете?

97.    Какие виды доступа к элементам контейнера вам известны? Чем отличается прямой доступ от ассоциативного? Перечислите операции, которые обычно реализуются для последовательного доступа к элементам контейнера.

98.    Дайте определение итератора. Можно ли реализовать последовательный доступ без итератора? В чем преимущества реализации последовательного доступа с помощью итератора? Что играет роль итератора для массивов С++?

99.    Имеются ли ошибки в следующих определениях?

       int ia[ 7 ] = { 0, 1, 1, 2, 3, 5, 8 };

       vector< vector< int > > ivec;

       vector< int > ivec = { 0, 1, 1, 2, 3, 5, 8 };

       vector< int > ivec( ia, ia+7 );

       vector< string > svec = ivec;

       vector< string > svec( 10, string( "null" ));

 

100. Проиллюстрируйте графически трассировку алгоритма проверки баланса фигурных скобок и покажите состояние стека на каждом этапе:

x{{yz}} {x{y{{z}}} {{{x}}}

101. *Примените решение задачи о балансе фигурных скобок для выражения, содержащего 3 типа разделителей: ( ), [ ], { }. Проиллюстрируйте графически трассировку алгоритма проверки баланса скобок:

[x{(yz)}] {x[y{(z)}] ({[x]}) )

102. *Расскажите алгоритм вычисления постфиксного выражения ab-c+ (a=7, b=3, c=-2). Покажите состояние стека после каждого шага.

103. *Есть стеки aStack и auxStack. Выполнить задание, пользуясь лишь операциями над абстрактным стеком (стеком, не зависящим от реализации):

  • вывести содержимое aStack в обратном порядке;

  • определить количество элементов в aStack, оставив его неизменным;

  • удалить все вхождения заданного элемента в aStack, оставив порядок следования его элементов неизменным.

 

104. Схема памяти класса.

105. Как необходимо объявить переменную a, чтобы вызов a.Ouput() выводил результат "Goodbye":

        template<class T, class T2>

class A {

public:

void Output()

{

cout << "Hello";

}

};

        template<class T2>

class A<char, T2> {

public:

void Output()

{

cout << "Goodbye";

}

};

 

106. Исключения. Ключевые слова С++, которые используются для обработки исключений. Каким образом исключение генерируется? Каковы функции контролируемого блока? Что обозначается ключевым словом catch?

 

107.Куда передается управление после обработки исключения? Перечислите возможные способы выхода из блока обработки.

 

108. Какого типа может быть исключение? Какими способами разрешается передавать исключение в блок обработки? Сколько параметров разрешается писать в заголовке секции-ловушки? Объясните, каким образом преодолеть ограничение на передачу единственного параметра в блок обработки.

 

109. Сколько секций-ловушек должно быть задано в контролируемом блоке? Как определяется, какому блоку catch передается исключение для обработки? Что произойдет, если несколько обработчиков соответствуют типу исключения?

 

110.Напишите конструкцию, которая позволяет перехватить любое исключение.

 

111. Могут ли контролируемые блоки быть вложенными? Если в блоке try не генерируются никакие исключения, куда передается управление после его завершения? Что произойдет, если исключение сгенерировано вне блока try?

 

112. Как организуется передача исключения в объемлющий блок? Каким образом исключение «передать дальше»?

 

113. Что такое «иерархия исключений»?

 

 

114. Что такое «спецификация исключений»? Как описывается список исключений, которые могут быть сгенерированы в функции? Что происходит, если функция нарушает спецификацию исключений? Учитывается ли спецификация исключений при перегрузке функций?

 

115. Прокомментируйте приведенный код. Будет ли сделан вызов b->printBase();

class CBase

{

int m_i;

public:

CBase() : m_i (0){}

void printBase() { cout<<"CBase"<<endl; }

};

 

int main()

{

CBase* b = NULL;

b->printBase();

return 0;

}