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

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

Упражнение 1:
Номер 1
Отметьте все утверждения, которые считаете верными:

Ответ:

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

 (2) цель введения шаблонов – создание функций, которые могут обрабатывать разнотипные данные 

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


Номер 2
Какой правильный заголовок шаблона

Ответ:

 (1) template <class t1, class t2> 

 (2) template <class t1,t2> 

 (3) template <class t, class t> 

 (4) template <class t,t> 


Номер 3
Отметьте правильный вариант описания функции шаблона:

Ответ:

 (1) template (class T) void change(T *p1, T *p2) { . . . }; 

 (2) template <class T>; void change<T *p1, T *p2> { . . . }; 

 (3) template <class T> void change(T *p1, T *p2) { . . . }; 

 (4) template {class T} void change(T *p1, T *p2) ( . . . ); 


Упражнение 2:
Номер 1
Имеется функция шаблон

template <class T>
T func1(T a,T b)
{
  if(a)
  a=a%b;
  return a;
}
 Верен ли код 

float a=5,b=6,c;
c=func1(a,b);


Ответ:

 (1) да, все верно 

 (2) нет, ошибка связана с типом операндов в операторе if 

 (3) нет, ошибка связана с типом операндов в операторе % 


Упражнение 9:
Номер 1
Существует ли в С++ готовый набор шаблонов:

Ответ:

 (1) нет 

 (2) да,существует специальная библиотека STL 

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


Номер 2
Можно ли в шаблоне класса определить статический метод?

Ответ:

 (1) да 

 (2) нет, будет ошибка компиляции 

 (3) да, но результат работы программы непредсказуем 


Номер 3
Исходя только из назначения шаблонов имеет ли смысл делать из данного кода функцию-шаблон 

  if(a){
  a=a%b;
 }
 else
 cout << error;  

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

Ответ:

 (1) нет, данный код можно использовать только для целых чисел 

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

 (3) да, данный код можно использовать для переменных типа int и char 


Упражнение 3:
Номер 1
Отметьте все утверждения, которые считаете верными:

Ответ:

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

 (2) цель введения шаблонов – создание функций, которые могут обрабатывать разнотипные данные 

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


Номер 2
Какой правильный заголовок шаблона

Ответ:

 (1) template <class t1, class t2> 

 (2) template <class t1,t2> 

 (3) template <class t, class t> 

 (4) template <class t,t> 


Номер 3
Отметьте правильный вариант описания функции шаблона:

Ответ:

 (1) template (class T) void change(T *p1, T *p2) { . . . }; 

 (2) template <class T>; void change<T *p1, T *p2> { . . . }; 

 (3) template <class T> void change(T *p1, T *p2) { . . . }; 

 (4) template {class T} void change(T *p1, T *p2) { . . . }; 


Упражнение 4:
Номер 1
Шаблон A и его специализации объявлены следующим образом:
  
template <class T> class A
{  
public:
  A(){ printf("1   ");}
};
template <> class A<int>
{  
public:
  A(){ printf("2   ");}
};
template <> class A<char*>
{  
public:
  A(){ printf("3   ");}
};
  
  Какой будет результат после выполнения кода
  
A<int> a;
A<char> a1;
A<long> a2;
  
  

Ответ:

 (1) 2 3 1 

 (2) 2 1 1 

 (3) 1 1 1 

 (4) ошибка компиляции в строке "template <> class A<int>" 


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

Ответ:

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

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

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

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

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


Номер 3
Что будет делать функция find(arr+2,arr+ARR_SIZE,5)?

Ответ:

 (1) искать число 5 на интервале от 2 до ARR_SIZE 

 (2) искать 5 в массиве arr начиная от второго элемента 

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


Упражнение 5:
Номер 2
Сколько параметров может быть у шаблона при определении шаблона функции ?

Ответ:

 (1)

 (2) столько, сколько аргументов у функции 

 (3) столько, сколько типов используется для параметризации 


Номер 3
При определении класса-шаблона

Ответ:

 (1) он должен быть включен в общий контекст (namespace) STL 

 (2) он должен быть наследован от класса Template 

 (3) он должен быть отмечен ключевым словом template 

 (4) он должен включать в себя, по крайней мере, один параметр-тип 


Упражнение 6:
Номер 1
Отметьте правильный заголовок шаблона функции:

Ответ:

 (1) template <class T> void Sum(T x1, T x2); 

 (2) class template <class T> Sum 

 (3) template <T> class 

 (4) template class <class T> Sum(T x1, T x2); 


Номер 2
Какой правильный вариант описания шаблона семейства классов?

Ответ:

 (1) template <class T> class Array {. . . }; 

 (2) template (class T) class Array {. . . }; 

 (3) template {class T} class Array {. . . } 


Номер 3
Какой правильный вариант создания экземпляра объекта?
    
 template <class T> class Matrix
 {  public : Matrix(int, int);
      ~Matrix() { }
 }
    

Ответ:

 (1) Matrix x(4, 5) 

 (2) Matrix <float> x(4, 5); 

 (3) Matrix :: <float> x(4, 5) 


Упражнение 7:
Номер 1
Какая строка данного кода производит специализацию шаблона?
  
1:template<class Т> class А{
2:int х;
3:};
4:template<class Т> class А<Т*> {
5:long х;
6:};
7:template<template<class U> class V> class C{
8:V<int> y;
9:V<int*> z;
10:};
11:C<A> c;
  
  

Ответ:

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

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

 (3) седьмая 

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


Номер 2
В каких случаях код будет работать правильно
  
...

vector <int> IntVector;//объект класса вектор
/*запись значений в IntVector*/
int d=IntVector[0];
... 
}
  
  

Ответ:

 (1) если оператор [] переопределен соответствующим образом 

 (2) если существует элемент IntVector[0] 

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


Номер 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;} 


Упражнение 8:
Номер 1
Какой будет результат следующего выражения?
    
    template <class T> T sum(T *a, T *b)
    {  T f = 5;
       return (*a + *b) - f;
    }
    int main()
    { int i = 10, j = 20;  double x = 5.1, y = 2.2;
      cout << sum(&i, &j) << " " << sum(&x, &y);
    }
    

Ответ:

 (1) 25 2.3 

 (2) 20 2.3 

 (3) 25 22 

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


Номер 2
Что будет выведено на экран?
    
    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) ошибка компиляции 


Номер 3
Отметьте верное утверждение:

Ответ:

 (1) шаблон может быть членом класса или шаблона класса 

 (2) шаблон может быть членом только шаблона класса 

 (3) шаблон может быть членом только класса 

 (4) шаблон не может быть членом класса или шаблона-класса 




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