Какими будут значения B::a и C::a после выполнения следующего кода?
tеmрlаtе<сlаss Т> 
struсt А{ 
    stаtiс int а; 
    А(){а++;} 
}; 
struсt В : А<В>{}; 
struсt С : А<С>{}; 
tеmрlаtе<сlаss Т> int А<Т>::а; 
tеmрlаtе<> int А<С>::а=4; 
С с1,с2; 
В b[10];
Варианты ответов:
1) 
В::а
неопределено,
С::а == 5
2) 
В::a
неопределено,
С::a == 6
3) 
В::а == 9
,
С::а == 5
4) 
В::а == 10
,
С::а == 6
   
                                                                       Какими будут значения B::a и C::a после выполнения следующего кода?
tеmрlаtе<сlаss Т> 
struсt А{ 
    stаtiс int а; 
    А(){а++;} 
}; 
struсt В : А<В>{}; 
struсt С : А<С>{}; 
tеmрlаtе<сlаss Т> int А<Т>::а; 
tеmрlаtе<> int А<С>::а=4; 
С с1,с2; 
В b[10];
Варианты ответов:
1) 
В::а
неопределено,
С::а == 5
2) 
В::a
неопределено,
С::a == 6
3) 
В::а == 9
,
С::а == 5
4) 
В::а == 10
,
С::а == 6
   
                                   
                                    
                                 
                                    
                                        
                                        
                                    
                                 
                                
                                    
								
	
                                
                             
                            
                            
                            
      
                            
 
                            
                                
                                
                                    Отметьте верные способы специализации функции
tеmрlаtе<сlаss Т> vоid f(Т а, Т b);
для типа bооl:
1) 
tеmрlаtе<> vоid f<>(bооl а,bооl b);
2) 
tеmрlаtе<> vоid f(bооl а,bооl b);
3) 
tеmрlаtе<> vоid f<bооl>(bооl а,bооl b);
   
                                                                       Отметьте верные способы специализации функции
tеmрlаtе<сlаss Т> vоid f(Т а, Т b);
для типа bооl:
1) 
tеmрlаtе<> vоid f<>(bооl а,bооl b);
2) 
tеmрlаtе<> vоid f(bооl а,bооl b);
3) 
tеmрlаtе<> vоid f<bооl>(bооl а,bооl b);
   
                                   
                                    
                                 
                                    
                                        
                                        
                                    
                                 
                                
                                    
								
	
                                
                             
                            
                            
                            
      
                            
 
                            
                                
                                
                                    Какой из приведенных ниже вариантов подходит больше всего?
#include <iostream> 
 
//... 
 
// 1 
inline int const& max(int const& a, int const& b) 
{ 
    return a < b ? b : a; 
} 
 
// 2 
template<typename T>  
inline T const& max (T const& a, T const& b) 
{ 
    return a < b ? b : a; 
} 
 
//... 
int main()  
{  
    //... 
    std::cout << ::max('a', 42.7) << std::endl; //3 
    //... 
     
    return 0;  
}  
Варианты ответов:
1) В строке //3 будет вызвана перегрузка функции //2.
2) В строке //3 будет вызвана перегрузка функции //1.
3) Чтобы код скомпилировался, в строке //3 необходимо явно указать тип: max<int>(...).
4) Чтобы код скомплировался, в строке //3 необходимо указать пустой тип: max<>(...).
5) Произойдет ошибка компиляции потому, что нету подходящей перегрузки для функции max().
   
                                                                       Какой из приведенных ниже вариантов подходит больше всего?
#include <iostream> 
 
//... 
 
// 1 
inline int const& max(int const& a, int const& b) 
{ 
    return a < b ? b : a; 
} 
 
// 2 
template<typename T>  
inline T const& max (T const& a, T const& b) 
{ 
    return a < b ? b : a; 
} 
 
//... 
int main()  
{  
    //... 
    std::cout << ::max('a', 42.7) << std::endl; //3 
    //... 
     
    return 0;  
}  
Варианты ответов:
1) В строке //3 будет вызвана перегрузка функции //2.
2) В строке //3 будет вызвана перегрузка функции //1.
3) Чтобы код скомпилировался, в строке //3 необходимо явно указать тип: max<int>(...).
4) Чтобы код скомплировался, в строке //3 необходимо указать пустой тип: max<>(...).
5) Произойдет ошибка компиляции потому, что нету подходящей перегрузки для функции max().
   
                                   
                                    
                                 
                                    
                                        
                                        
                                    
                                 
                                
                                    
								
	
                                
                             
                            
                            
                            
      
                            
 
                            
                                
                                
                                    Могут ли динамические библиотеки экспортировать шаблонные функции и классы?
1) Все шаблонные классы и функции автоматически экспортируются
2) Экспортироваться могут только специфицированные шаблонные функции и классы
3) Экспортировать шаблоны нельзя - их имплементацию необходимо полностью помещать во включаемых файлах (*.h, *.hpp etc.)
   
                                                                       Могут ли динамические библиотеки экспортировать шаблонные функции и классы?
1) Все шаблонные классы и функции автоматически экспортируются
2) Экспортироваться могут только специфицированные шаблонные функции и классы
3) Экспортировать шаблоны нельзя - их имплементацию необходимо полностью помещать во включаемых файлах (*.h, *.hpp etc.)
   
                                   
                                    
                                 
                                    
                                        
                                        
                                    
                                 
                                
                                    
								
	
                                
                             
                            
                            
                            
      
                            
 
                            
                                
                                
                                    Содержит ли следующий код ошибки (компиляции, выполнения, линковки, UB)?
template <int T> void f(); 
template <> void f<0>() {} 
 
void Test() { 
  f<1>(); 
} 
   
                                                                       Содержит ли следующий код ошибки (компиляции, выполнения, линковки, UB)?
template <int T> void f(); 
template <> void f<0>() {} 
 
void Test() { 
  f<1>(); 
} 
   
                                   
                                    
                                 
                                    
                                        
                                        
                                    
                                 
                                
                                    
								
	
                                
                             
                            
                            
                            
      
                            
 
                            
                                
                                
                                    Шаблоны могут быть использованы как параметры шаблонов:
   
                                                                       Шаблоны могут быть использованы как параметры шаблонов:
   
                                   
                                    
                                 
                                    
                                        
                                        
                                    
                                 
                                
                                    
								
	
                                
                             
                            
                            
                            
      
                            
 
                            
                                
                                
                                    Что будет выведено на экран в результате выполнения программы?
#include <iostream> 
 
typedef    int***    INT; 
 
template <typename T> 
struct  S { 
    enum    {result = 2}; 
}; 
 
template<typename T> 
struct S<T*> { 
    enum {result = 1 + S<T>::result}; 
}; 
 
int main() { 
     
    std::cout << S<INT>::result; 
    return 0; 
} 
   
                                                                       Что будет выведено на экран в результате выполнения программы?
#include <iostream> 
 
typedef    int***    INT; 
 
template <typename T> 
struct  S { 
    enum    {result = 2}; 
}; 
 
template<typename T> 
struct S<T*> { 
    enum {result = 1 + S<T>::result}; 
}; 
 
int main() { 
     
    std::cout << S<INT>::result; 
    return 0; 
} 
   
                                   
                                    
                                 
                                    
                                        
                                        
                                    
                                 
                                
                                    
								
	
                                
                             
                            
                            
                            
      
                            
 
                            
                                
                                
                                    Скомпилируется ли код?
template<typename T> class  A{ A(){} };    // 1 
 
template<typename T> struct B{ B(){} };    // 2 
 
template<typename T> union  C{ C(){} };    // 3 
 
template<template<typename> class U, typename V> 
struct D 
{ 
    D() 
    { 
        U<V> u; 
    } 
}; 
 
int main() 
{ 
    D<A, int> a;    // 4 
    D<B, int> b;    // 5 
    D<C, int> c;    // 6 
}
   
                                                                       Скомпилируется ли код?
template<typename T> class  A{ A(){} };    // 1 
 
template<typename T> struct B{ B(){} };    // 2 
 
template<typename T> union  C{ C(){} };    // 3 
 
template<template<typename> class U, typename V> 
struct D 
{ 
    D() 
    { 
        U<V> u; 
    } 
}; 
 
int main() 
{ 
    D<A, int> a;    // 4 
    D<B, int> b;    // 5 
    D<C, int> c;    // 6 
}
   
                                   
                                    
                                 
                                    
                                        
                                        
                                    
                                 
                                
                                    
								
	
                                
                             
                            
                            
                            
      
                            
 
                            
                                
                                
                                    Какие из объявлений шаблонов верны?
1)
template<template<typename> class T> class A{};
2) 
template<template<typename> struct T> class A{};
3) 
template<template<typename> union T> class A{};
4) 
template<template<typename> typename T> class A{};
   
                                                                       Какие из объявлений шаблонов верны?
1)
template<template<typename> class T> class A{};
2) 
template<template<typename> struct T> class A{};
3) 
template<template<typename> union T> class A{};
4) 
template<template<typename> typename T> class A{};
   
                                   
                                    
                                 
                                    
                                        
                                        
                                    
                                 
                                
                                    
								
	
                                
                             
                            
                            
                            
      
                            
 
                            
                                
                                
                                    Что выведет следующий код?
#include <iostream> 
 
class Rose {}; 
 
class A { public: typedef Rose rose; }; 
 
template<typename T> 
class B: public T { public: typedef typename T::rose foo; }; 
 
template<typename T> 
void smell(T) { std::cout << "Жуть!" << std::endl; } 
void smell(Rose) { std::cout << "Прелесть!" << std::endl; } 
 
int main() 
{ 
    smell(A::rose()); 
    smell(B<A>::foo()); 
    return 0; 
}
Варианты ответов:
1) Жуть!
Жуть!
2) Прелесть!
Прелесть!
3) Прелесть!
Жуть!
4) Жуть!
Прелесть!
5) Программа не скомпилируется
   
                                                                       Что выведет следующий код?
#include <iostream> 
 
class Rose {}; 
 
class A { public: typedef Rose rose; }; 
 
template<typename T> 
class B: public T { public: typedef typename T::rose foo; }; 
 
template<typename T> 
void smell(T) { std::cout << "Жуть!" << std::endl; } 
void smell(Rose) { std::cout << "Прелесть!" << std::endl; } 
 
int main() 
{ 
    smell(A::rose()); 
    smell(B<A>::foo()); 
    return 0; 
}
Варианты ответов:
1) Жуть!
Жуть!
2) Прелесть!
Прелесть!
3) Прелесть!
Жуть!
4) Жуть!
Прелесть!
5) Программа не скомпилируется
   
                                   
                                    
                                 
                                    
                                        
                                        
                                    
                                 
                                
                                    
								
	
                                
                             
                            
                            
                            
      
                            
 
                            
                                
                                
                                    Параметром шаблона может быть:
1) Любой тип, за исключением локальных и безымянных
2) Значение перечислимого типа
3) Значение любого встроенного типа, за исключением указателей и стороковых констант
4) Любой тип данных, кроме тех у которых конструктор по умолчанию не определён
   
                                                                       Параметром шаблона может быть:
1) Любой тип, за исключением локальных и безымянных
2) Значение перечислимого типа
3) Значение любого встроенного типа, за исключением указателей и стороковых констант
4) Любой тип данных, кроме тех у которых конструктор по умолчанию не определён
   
                                   
                                    
                                 
                                    
                                        
                                        
                                    
                                 
                                
                                    
								
	
                                
                             
                            
                            
                            
      
                            
 
                            
                                
                                
                                    Шаблонные функции определяют:
   
                                                                       Шаблонные функции определяют:
   
                                   
                                    
                                 
                                    
                                        
                                        
                                    
                                 
                                
                                    
								
	
                                
                             
                            
                            
                            
      
                            
 
                            
                                
                                
                                    Имеется шаблонная функция:
template <class T> T max (T a, T b)  
{  
    if a<b return b; 
           return a; 
} 
Какая специализация будет создана компилятором при вызове max( 'a' , 3 )?
   
                                                                       Имеется шаблонная функция:
template <class T> T max (T a, T b)  
{  
    if a<b return b; 
           return a; 
} 
Какая специализация будет создана компилятором при вызове max( 'a' , 3 )?
   
                                   
                                    
                                 
                                    
                                        
                                        
                                    
                                 
                                
                                    
								
	
                                
                             
                            
                            
                            
      
                            
 
                            
                                
                                
                                    Каким будет результат выполнения следующего кода?
#include <iostream> 
 
struct A { 
  virtual int f(int) { 
      return 1; 
  } 
}; 
 
struct B : A { 
  template <typename T> 
  int f(T) { 
    return 2; 
  } 
}; 
 
int main(int argc, char**argv) { 
  A* pa = new B; 
 
  std::cout << pa->f(1) << '\n'; 
 
  delete pa; 
  return 0; 
} 
   
                                                                       Каким будет результат выполнения следующего кода?
#include <iostream> 
 
struct A { 
  virtual int f(int) { 
      return 1; 
  } 
}; 
 
struct B : A { 
  template <typename T> 
  int f(T) { 
    return 2; 
  } 
}; 
 
int main(int argc, char**argv) { 
  A* pa = new B; 
 
  std::cout << pa->f(1) << '\n'; 
 
  delete pa; 
  return 0; 
} 
   
                                   
                                    
                                 
                                    
                                        
                                        
                                    
                                 
                                
                                    
								
	
                                
                             
                            
                            
                            
      
                            
 
                            
                                
                                
                                    Отметьте верные утверждения:
1) Вы можете явным образом указывать параметры шаблонов в угловых скобках
2) Для функций могут быть заданы параметры шаблона по умолчанию,используя знак = после объявления параметра шаблона
3) Шаблонные параметры указанные явным образом должны совпадать с типами параметров переданных в функцию
4) Шаблонные функции можно перегружать
   
                                                                       Отметьте верные утверждения:
1) Вы можете явным образом указывать параметры шаблонов в угловых скобках
2) Для функций могут быть заданы параметры шаблона по умолчанию,используя знак = после объявления параметра шаблона
3) Шаблонные параметры указанные явным образом должны совпадать с типами параметров переданных в функцию
4) Шаблонные функции можно перегружать
   
                                   
                                    
                                 
                                    
                                        
                                        
                                    
                                 
                                
                                    
								
	
                                
                             
                            
                            
                            
      
                            
 
                            
                                
                                
                                    Имеются следующие объявления:
template <class T> class TDB{ 
      T* rp; 
      int num; 
public:   TDB(int n)  { rp=new T[num=n];} 
      ~TDB()  { delete [ ]rp;} 
       T& GetRec(int rn){ 
               T*crp=rp; 
                if (0<=rn && rn<num) 
                     while (rn-->0) 
 crp++; 
       return *crp; 
       } 
   }; 
 
class TRec { 
                   private: char name[21]; 
                   public: TRec() {name[0]=0;} 
TRec(const char * s) { Assign(s);} 
void Assign(const char * s) { strncpy(name,s,20);} 
char * Get() {return name;} 
               }; 
 
 TDB<TRec *> *pdb; 
Как добавить в массив pdb одну запись?
   
                                                                       Имеются следующие объявления:
template <class T> class TDB{ 
      T* rp; 
      int num; 
public:   TDB(int n)  { rp=new T[num=n];} 
      ~TDB()  { delete [ ]rp;} 
       T& GetRec(int rn){ 
               T*crp=rp; 
                if (0<=rn && rn<num) 
                     while (rn-->0) 
 crp++; 
       return *crp; 
       } 
   }; 
 
class TRec { 
                   private: char name[21]; 
                   public: TRec() {name[0]=0;} 
TRec(const char * s) { Assign(s);} 
void Assign(const char * s) { strncpy(name,s,20);} 
char * Get() {return name;} 
               }; 
 
 TDB<TRec *> *pdb; 
Как добавить в массив pdb одну запись?
   
                                   
                                    
                                 
                                    
                                        
                                        
                                    
                                 
                                
                                    
								
	
                                
                             
                            
                            
                            
      
                            
 
                            
                                
                                
                                    Что будет выведено на экран?
#include <iostream> 
#include <string> 
 
template<int T> 
std::string StrangeFunc() 
{ 
    return StrangeFuncStruct<T>::value(); 
} 
 
template<int T, bool lt16 = (T<16)> 
struct StrangeFuncStruct 
{ 
    static std::string value() 
    { 
        return StrangeFuncStruct<T, (T<16)>::value(); 
    } 
}; 
 
template<int T> 
struct StrangeFuncStruct<T, true> 
{ 
    static std::string value() 
    { 
        return std::string(1, T + ((T>9)?'A'-10:'0')); 
    } 
}; 
 
template<int T> 
struct StrangeFuncStruct<T, false> 
{ 
    static std::string value() 
    { 
        return StrangeFuncStruct<(T/16)>::value() 
             + StrangeFuncStruct<(T%16)>::value(); 
    } 
}; 
 
int main() 
{ 
    std::cout << StrangeFunc<137+137*256>() << std::endl; 
}
   
                                                                       Что будет выведено на экран?
#include <iostream> 
#include <string> 
 
template<int T> 
std::string StrangeFunc() 
{ 
    return StrangeFuncStruct<T>::value(); 
} 
 
template<int T, bool lt16 = (T<16)> 
struct StrangeFuncStruct 
{ 
    static std::string value() 
    { 
        return StrangeFuncStruct<T, (T<16)>::value(); 
    } 
}; 
 
template<int T> 
struct StrangeFuncStruct<T, true> 
{ 
    static std::string value() 
    { 
        return std::string(1, T + ((T>9)?'A'-10:'0')); 
    } 
}; 
 
template<int T> 
struct StrangeFuncStruct<T, false> 
{ 
    static std::string value() 
    { 
        return StrangeFuncStruct<(T/16)>::value() 
             + StrangeFuncStruct<(T%16)>::value(); 
    } 
}; 
 
int main() 
{ 
    std::cout << StrangeFunc<137+137*256>() << std::endl; 
}
   
                                   
                                    
                                 
                                    
                                        
                                        
                                    
                                 
                                
                                    
								
	
                                
                             
                            
                            
                            
      
                            
 
                            
                                
                                
                                    Какой из вариантов кода не содержит ошибки?
1) 
typedef int Type; 
template <class Type> 
class Class { 
    ... 
    public: 
    Type val; 
} 
2) 
template <class Type> 
class Class { 
    ... 
    public: 
        typedef int Type; 
        Type val; 
} 
3) 
Оба варианта не верны
   
                                                                       Какой из вариантов кода не содержит ошибки?
1) 
typedef int Type; 
template <class Type> 
class Class { 
    ... 
    public: 
    Type val; 
} 
2) 
template <class Type> 
class Class { 
    ... 
    public: 
        typedef int Type; 
        Type val; 
} 
3) 
Оба варианта не верны
   
                                   
                                    
                                 
                                    
                                        
                                        
                                    
                                 
                                
                                    
								
	
                                
                             
                            
                            
                            
      
                            
 
                            
                                
                                
                                    Какое число будет выведено на экран при выполнении данной программы?
tеmрlаtе<сlаss T> T f(){ 
    stаtiс unsignеd n = 0; 
    rеturn ++n; 
} 
... 
соut<<f<int>()*100 + f<сhаr>()*10 + f<int>()<<еndl;
   
                                                                       Какое число будет выведено на экран при выполнении данной программы?
tеmрlаtе<сlаss T> T f(){ 
    stаtiс unsignеd n = 0; 
    rеturn ++n; 
} 
... 
соut<<f<int>()*100 + f<сhаr>()*10 + f<int>()<<еndl;
   
                                   
                                    
                                 
                                    
                                        
                                        
                                    
                                 
                                
                                    
									
                                
                             
                            
                            
                            
      
                            
 
                            
                                
                                
                                    Что будет выведено в результате выполнения данной программы:
template<class T, class U> 
struct A{ 
    struct dummy{char _[2];}; 
    static char _(T); 
    static dummy _(...); 
    static const bool value=sizeof(_(U()))==sizeof(char); 
}; 
struct B{}; 
struct C:B{}; 
... 
cout << A<B,C>::value << A<B,B>::value << A<C,B>::value;
   
                                                                       Что будет выведено в результате выполнения данной программы:
template<class T, class U> 
struct A{ 
    struct dummy{char _[2];}; 
    static char _(T); 
    static dummy _(...); 
    static const bool value=sizeof(_(U()))==sizeof(char); 
}; 
struct B{}; 
struct C:B{}; 
... 
cout << A<B,C>::value << A<B,B>::value << A<C,B>::value;