Latest web development tutorials

C ++ Template

Template adalah pemrograman generik, pemrograman generik yang secara berdiri sendiri untuk setiap jenis tertentu menulis kode.

Template untuk membuat kelas atau fungsi generik cetak biru atau formula. kontainer perpustakaan, iterator, dan algoritma misalnya, adalah contoh-contoh pemrograman generik, mereka semua menggunakan konsep template.

Setiap wadah memiliki definisi tunggal, sepertivektor, kita dapat mendefinisikan sejumlah jenis vektor, seperti vector <int>atauvector <string>.

Anda dapat menggunakan template untuk menentukan fungsi dan kelas, mari kita lihat bagaimana menggunakan.

fungsi template

Bentuk umum dari fungsi template didefinisikan sebagai berikut:

template <class type> ret-type func-name(parameter list)
{
   // 函数的主体
}  

Di sini, jenis adalah fungsi dari jenis data yang digunakan nama tempat. Nama ini dapat digunakan dalam definisi fungsi.

Berikut adalah contoh template fungsi mengembalikan jumlah maksimum dua jenis:

#include <iostream>
#include <string>

using namespace std;

template <typename T>
inline T const& Max (T const& a, T const& b) 
{ 
    return a < b ? b:a; 
} 
int main ()
{
 
    int i = 39;
    int j = 20;
    cout << "Max(i, j): " << Max(i, j) << endl; 

    double f1 = 13.5; 
    double f2 = 20.7; 
    cout << "Max(f1, f2): " << Max(f1, f2) << endl; 

    string s1 = "Hello"; 
    string s2 = "World"; 
    cout << "Max(s1, s2): " << Max(s1, s2) << endl; 

   return 0;
}

Ketika kode di atas dikompilasi dan dijalankan, menghasilkan hasil sebagai berikut:

Max(i, j): 39
Max(f1, f2): 20.7
Max(s1, s2): World

kelas template

Seperti kita mendefinisikan template fungsi, kita dapat mendefinisikan template kelas. Bentuk umum dari deklarasi kelas generik adalah sebagai berikut:

template <class type> class class-name {
.
.
.
}

Di sini, jenis merupakan tempat nama jenis dapat ditentukan di kelas yang dipakai.Anda dapat menggunakan daftar dipisahkan koma untuk mendefinisikan beberapa tipe data generik.

Contoh berikut mendefinisikan kelas Stack <>, dan mengimplementasikan pendekatan generik untuk stack operasi pop pada elemen:

#include <iostream>
#include <vector>
#include <cstdlib>
#include <string>
#include <stdexcept>

using namespace std;

template <class T>
class Stack { 
  private: 
    vector<T> elems;     // 元素 

  public: 
    void push(T const&);  // 入栈
    void pop();               // 出栈
    T top() const;            // 返回栈顶元素
    bool empty() const{       // 如果为空则返回真。
        return elems.empty(); 
    } 
}; 

template <class T>
void Stack<T>::push (T const& elem) 
{ 
    // 追加传入元素的副本
    elems.push_back(elem);    
} 

template <class T>
void Stack<T>::pop () 
{ 
    if (elems.empty()) { 
        throw out_of_range("Stack<>::pop(): empty stack"); 
    }
	// 删除最后一个元素
    elems.pop_back();         
} 

template <class T>
T Stack<T>::top () const 
{ 
    if (elems.empty()) { 
        throw out_of_range("Stack<>::top(): empty stack"); 
    }
	// 返回最后一个元素的副本 
    return elems.back();      
} 

int main() 
{ 
    try { 
        Stack<int>         intStack;  // int 类型的栈 
        Stack<string> stringStack;    // string 类型的栈 

        // 操作 int 类型的栈 
        intStack.push(7); 
        cout << intStack.top() <<endl; 

        // 操作 string 类型的栈 
        stringStack.push("hello"); 
        cout << stringStack.top() << std::endl; 
        stringStack.pop(); 
        stringStack.pop(); 
    } 
    catch (exception const& ex) { 
        cerr << "Exception: " << ex.what() <<endl; 
        return -1;
    } 
}  

Ketika kode di atas dikompilasi dan dijalankan, menghasilkan hasil sebagai berikut:

7
hello
Exception: Stack<>::pop(): empty stack