Template in C ++

The template is the foundation of generic programming, ie code according to which is independent of any specific type.

The template is the foundation of generic programming, ie code according to which is independent of any specific type.

A Template is a blueprint or method to create a class or a general function. Container libraries like iterators and algorithms are examples of general programming and have been developed using the concept of Template.

Each container has a single definition, vector example, but we can define many different vector series, for example: vector or vector .

Template is a keyword in C ++, we can understand that it is an abstract data type, specific to the basic data types. A template is a keyword that tells the compiler that the following code defines multiple data types and that its source code will be compiled to correspond to each data type during compilation. There are two types of templates in C ++:

Function Template: is a function template that allows you to define general functions for multiple data types.

Class template: is a class template that allows to define general classes for many data types

Function Template in C ++

Here is the general syntax of a Function Template definition in C ++:

 template < class  kieu_du_lieu >  kieu_tham_chieu ten_ham ( danh sach tham so ) { // phan than ham } 

Here, kieu_du_lieu is a name of a data type used by the function. This name can be used within the function definition.

The following is an example of Function Template that returns the maximum value of two values:

 #include #include using namespace  std ; template < typename QTM > inline QTM const & Max ( QTM const &  a , QTM const &  b ) { return  a  <  b  ?  b : a ; } int  main  () { int  i  = 15 ; int  j  = 26 ;  cout  << "Gia tri lon nhat cua (i, j) la: " << Max ( i ,  j ) <<  endl ; double  f1  = 4.5 ; double  f2  = 14.2 ;  cout  << "Gia tri lon nhat cua (f1, f2) la: " << Max ( f1 ,  f2 ) <<  endl ; string  s1  = "HocLapTrinhCplusplus" ; string  s2  = "TaiQTM" ;  cout  << "Gia tri lon nhat cua (s1, s2) la: " << Max ( s1 ,  s2 ) <<  endl ; return 0 ; } 

At the template line, if you use the class instead of typename as in the syntax, the program still runs normally. Because with the class and typename defined in C ++. As for other names, like tenKieuCuaToi , it won't run !!

Compile and run the above C ++ program to see the results:

Class Template in C ++

Just like when we can define Function Template, we can also define the Class Template in C ++. The general syntax of defining a Class Template in C ++ is:

 template < class  kieu_du_lieu > class  ten_lop  { . . . } 

Here, kieu_du_lieu is the type name, which will be determined when a class is declared. You can define more than one generic data type by using a list separated by commas.

The following example defines the Stack class and implements general methods to push and pop elements from that Stack. (Stack: stack, push: add a new node to the top of the stack, pop: operation takes 1 element from the stack top).

 #include #include #include #include #include using namespace  std ; template < class QTM > class Stack { private :  vector < QTM >  phantu ; // cac phan tu  public : void  push ( QTM const &); // hoat dong push phan tu  void  pop (); // hoat dong pop phan tu  QTM  top () const ; // tra ve phan tu tren cung  bool  empty () const { // tra ve true neu la trong. return  phantu . empty (); } }; template < class QTM > void Stack < QTM >:: push  ( QTM const &  elem ) { // phu them ban sao cua phan tu da truyen   phantu . push_back ( elem ); } template < class QTM > void Stack < QTM >:: pop  () { if ( phantu . empty ()) { throw  out_of_range ( "Stack<>::pop(): stack da trong!" ); } // xoa phan tu cuoi cung   phantu . pop_back (); } template < class QTM > QTM Stack < QTM >:: top  () const { if ( phantu . empty ()) { throw  out_of_range ( "Stack<>::top(): stack da trong!" ); } // tra ve ban sao cua phan tu cuoi cung  return  phantu . back (); } int  main () { try { Stack  stackSoNguyen ; // mot stack cua cac so nguyen Stack  stackChuoi ; // mot stack cua cac chuoi // thao tac tren stack cac so nguyen   stackSoNguyen . push ( 10 );  cout  <<  stackSoNguyen . top () << endl ; // thao tac tren stack cua chuoi  stackChuoi . push ( "QTMXinChaoCacBan" );  cout  <<  stackChuoi . top () <<  std :: endl ;  stackChuoi . pop ();  stackChuoi . pop (); } catch ( exception  const &  ex ) {  cerr  << "Exception: " <<  ex . what () << endl ; return - 1 ; } } 

In the above program, the out_of_range exception is already defined in C ++. Compile and run the above C ++ program to see the results:

According to Tutorialspoint

Previous article: Namespace in C ++

Next article: Preprocessor in C ++

« PREV POST
READ NEXT »