игра брюс 2048
Главная / Программирование / Язык программирования C++ для профессионалов / Тест 8

Язык программирования C++ для профессионалов - тест 8

Упражнение 1:
Номер 1
Выберите правильное (синтаксически верное) объявление функции-шаблона func, принимающей два параметра параметризующего типа template <class T> 

Ответ:

 (1) template <class T> void func(T a, T b); 

 (2) template <T> void func(T a, T b); 

 (3) template <struct T> void func(T a, T b);а 


Номер 2

Какое объявление функции-шаблона func верно?


Ответ:

 (1) void func<T>(T a, T b); 

 (2) template <T> void func( a, b); 

 (3) template <class T> void func(T a, T b); 


Номер 3

Укажите правильное объявление шаблона функции, если в программе производится вызов double х = zero<double>();


Ответ:

 (1) template <class TT> TT zero() { return 0;} 

 (2) template TT zero() { return 0;} 

 (3) template <class TT> TT zero { return 0;} 


Упражнение 2:
Номер 1

Какой будет результат следующего выражения?

template <class T> T sum(T *a, T *b) { T f = 5; return (*a + *b) - f; } int main() { int i = 10, j = 2; double x = 10.1, y = 1.1; cout << sum(&i, &j) << " " << sum(&x, &y); }

Ответ:

 (1) 5 6.2 

 (2) 6.2 7 

 (3) 7 6.2 

 (4) ошибка компиляции 


Номер 2

Какая ошибка в таком определении шаблона: template <class T, T def_val> class My {};


Ответ:

 (1) ошибки нет 

 (2) ошибка во втором параметре типа шаблона 

 (3) ошибка в первом параметре типа шаблона 


Номер 3

Какие шаблоны функций записаны неправильно?


Ответ:

 (1) template <class T> void f(T); 

 (2) template <class T> void f(T*); 

 (3) <template class T> T f(int); 

 (4) template<int i void> f(int = i); 


Упражнение 3:
Номер 1

Сколько в программе может быть определений шаблона типа для функции-члена шаблонного класса?


Ответ:

 (1) ни одного 

 (2) только одно 

 (3) несколько 


Номер 2

Шаблоны каких функций можно определить в программе?


Ответ:

 (1) только глобальных функций  

 (2) только функций членов класса 

 (3) глобальных функций и функций членов класса 


Номер 3

Какой будет результат следующего выражения?

template <class T> T sum(T *a, T *b) { T f = 1; return (*a + *b) - f; } int main() { int i = 5, j = 1; double x = 5., y = 6.; cout << sum(&i, &j) << " " << sum(&x, &y); }

Ответ:

 (1) 6 7 

 (2) 5 10 

 (3) ошибка компиляции 


Упражнение 4:
Номер 1
Синтаксис объявления шаблона функции имеет вид:

Ответ:

 (1) template <список-параметров_шаблона> тип_возвращаемого_значения имя_функции (список параметров) {} 

 (2) template (список-параметров_шаблона) определение_функции 

 (3) <список-параметров_шаблона> template тип_возвращаемого_значения имя_функции (список параметров) {} 


Номер 2

Выберите верные прототипы шаблонов функций:


Ответ:

 (1) template <class T> void f1(T); 

 (2) template <class T, class U> char f2(T*, U); 

 (3) template <class T> *T f3(long); 

 (4) template <class T, class U> U f4(&T); 


Номер 3

Синтаксис объявления шаблона класса имеет вид:


Ответ:

 (1) template <список-параметров_шаблона> определение_класса 

 (2) template (список-параметров_шаблона) определение_класса 

 (3) <список-параметров_шаблона> template определение_класса 


Упражнение 5:
Номер 1

Для списка с принудительной связью верно следующее:


Ответ:

 (1) в каждом заносимом в список объекте есть поле связи 

 (2) объект может попасть в односвязный список с принудительной связью только в том случае, если он является производным от типа, определяющего поле связи 

 (3) в односвязный список с принудительной связью можно поместить объект любого типа 


Номер 2

Для списка без принудительной связи верно следующее:


Ответ:

 (1) связь предусмотрена в реализации специального шаблонного класса 

 (2) объект можно включить только в один список без принудительной связи 

 (3) список без принудительной связи позволяет создавать более эффективные программы 

 (4) если нужно создавать список из каких-либо сложных объектов, вместо списка объектов выгоднее создать список указателей на них 


Номер 3

Какие два основных вида шаблонов существуют в языке С++?


Ответ:

 (1) шаблоны функций и классов 

 (2) шаблоны конструкторов и деструкторов 

 (3) шаблоны классов и структур 


Упражнение 6:
Номер 1

Имеется программный код:

template<class For> For adjacent_find(For first, For last); template<class For, class BinPred> For adjacent_find(For first, For last, BinPred pred); Для чего он предназначен?

Ответ:

 (1) для нахождения пары соседних значений 

 (2) для вывода первого и последнего чисел в последовательности  

 (3) для формирования шаблонного полиморфизма 


Номер 2

Имеется программный код:

template <class In1, class In2> bool equal(In1 first1, In1 last1, In2 first2); template <class In1, class In2, class BinPred> bool equal(In1 first1, In1 last1, In2 first2, BinPred pred); Для чего он предназначен?

Ответ:

 (1) для попарного сравнения элементов двух последовательностей 

 (2) для нахождения среднего арифметического чисел задаваемой последовательности 

 (3) для суммирования чисел задаваемой последовательности 

 (4) этот программный код содержит синтаксическую ошибку в предпоследней строке 


Номер 3

Отметьте все неверные утверждения:


Ответ:

 (1) генерация класса из шаблона создает объект этого класса 

 (2) память, занимаемая объектом класса, сгенерированного из шаблона, освобождается автоматически 

 (3) шаблон не является классом 

 (4) все классы-шаблоны наследуют класс Template 

 (5) объекты классов, сгенерированных из шаблонов, занимают в памяти меньше места, чем объекты других классов 


Упражнение 7:
Номер 1

Выберите верные прототипы шаблонов функций:


Ответ:

 (1) template <class T> void f1(T, int); 

 (2) template <class T> void f3(const T&, long); 

 (3) template <class T > T f4(int); 


Номер 2

Определен шаблон и описаны объекты класса:

template <class A, int n> class my_template {A x[n]; /*…*/}; my_template <char, 20> y1; my_template <int, 20> y2; my_template <char, 30> y3; my_template <int, 20> y4; Какой из следующих операторов не содержит ошибки:

Ответ:

 (1) y2=y4 

 (2) y1=y2 

 (3) y1=y3 

 (4) y1=y4 


Номер 3

Определен шаблон и описаны объекты класса:

template <class A> class Array { /*…*/}; Array <int> x1; Array <int> x2; Array <char> x3; Array <short> x4; Какие из следующих операторов не содержат ошибки:

Ответ:

 (1) x1=x2 

 (2) x2=x3 

 (3) x1=x3 

 (4) x2=x4 


Упражнение 8:
Номер 1
Определена шаблонная функция 
template <class T> bool cmp(T a, T b){ return a>b? true : false;}; 

Как осуществить вызов функции cmp() для параметров int a1, double b1?


Ответ:

 (1) bool c = cmp(a1, int(b1)); 

 (2) b2 = int(b1); bool c = cmp(a1, b2); 

 (3) bool c = cmp(a1, b1); 


Номер 2

Выберите вариант правильного объявления шаблона класса A:

1.template<class T> class A { public: void f(); }; template<class T> void A<T>::f(){}; 2.template<class T> class A { public: void f(); }; void A<T>::f(){};

Ответ:

 (1) первый 

 (2) второй 

 (3) оба верны 


Номер 3

Выберите вариант правильного объявления шаблона класса A:

1.class A<T> { public: void f(); }; void A<T>::f(){}; 2.template<class T> class A { public: void f(){} }; template<class T> void A::f(){};

Ответ:

 (1) первый 

 (2) второй 

 (3) оба ошибочны 


Упражнение 9:
Номер 1

Какая строка данного кода производит специализацию шаблона?

template<class Т> class А{ int х; }; template<class Т> class А<Т*> { long х; }; template<template<class U> class V> class C{ V<int> y; V<int*> z; }; C<A> c;

Ответ:

 (1) последняя 

 (2) предпоследняя 

 (3) седьмая 

 (4) четвертая 


Номер 2

Заголовок обобщенного метода print шаблона List имеет вид template <class Data> void List <Data>::print();. Что для данной записи обозначает следующее:

void List <char>::print(){ ... }

Ответ:

 (1) специализированный метод для вывода списка символов 

 (2) специализацию итераторов 

 (3) ничего, так как эта запись ошибочна 

 (4) вывод указателей на массив макросов 


Номер 3

Что обозначает запись typedef basic_filebuf<char> filebuf;?


Ответ:

 (1) специализацию шаблона класса basic_filebuf для типа данных char 

 (2) специализированный вывод итераторов типа char 

 (3) специализацию массива вывода идентификаторов типа char 

 (4) ничего, эта запись ошибочна 


Упражнение 10:
Номер 1

Можно ли создать шаблон сразу по нескольким типам?


Ответ:

 (1) можно 

 (2) нельзя 

 (3) зависит от типа 


Номер 2

Можно ли создать шаблон c несколькими параметрами?


Ответ:

 (1) можно 

 (2) нельзя 

 (3) зависит от параметров 


Номер 3

Есть ли ошибка в таком объявлении класса:

class A { public: template <class Type> void f1( Type ) {}; template <class Type> int f2( Type ) {}; };

Ответ:

 (1) ошибки нет 

 (2) класс следует объявить со словом template 

 (3) нельзя в одном классе объявить две шаблонные функции 


Упражнение 11:
Номер 1

Чем механизм шаблонов отличается от механизма перегрузки


Ответ:

 (1) шаблон создается для функций, различающихся типами данных 

 (2) перегрузка не требует единообразия алгоритмов перегружаемых функций 

 (3) ничем не отличается, это просто разные наименования одного и того же 


Номер 2

Чем отличается шаблон функции от обычной функции?


Ответ:

 (1) ничем, это обычная функция 

 (2) типом возвращаемого значения 

 (3) типом параметров 

 (4) тем, что в шаблоне типы параметров не определены 


Номер 3

Выберите правильный вариант программного кода:

1.template<typename T> class A { public: void f(){} }; class A<int> { public: void f(){} }; 2.template<typename T> class A { public: void f(){} }; template<> class A<int> { public: void f(){} };

Ответ:

 (1) первый 

 (2) второй 

 (3) оба верны 

 (4) оба ошибочны 


Упражнение 12:
Номер 1

Какой будет результат следующего выражения?

template <class T> class A { public : T x1; T x2; T func(T x3) { x3 += x1 + x2; return x3; } }; int main() { A <int> A1; A1.x1 = 3; A1.x2 = 10; cout << A1.func(1); }

Ответ:

 (1) 10 

 (2) 14 

 (3) 11 

 (4) ошибка компиляции 


Номер 2

Какой будет результат следующего выражения?

template <class T> class A { public : T x1; T x2; T func(T x3) { x3 += x1 + x2; return x3; } }; int main() { A <float> A1; A1.x1 = 5.5; A1.x2 = 0.6; cout << A1.func(1.1); }

Ответ:

 (1) 8.3 

 (2) 7.2 

 (3) 10.2 

 (4) ошибка компиляции 


Номер 3

Какой будет результат следующего выражения?

template <class T> class A { public : T x1; T x2; T func(T x3) { x3 += x1 + x2; return x3; } }; int main() { A <int> A1; A1.x1 = 5; A1.x2 = 12; cout << A1.func(1); }

Ответ:

 (1) 13 

 (2) 18 

 (3) 17 

 (4) ошибка компиляции 




Главная / Программирование / Язык программирования C++ для профессионалов / Тест 8