Lập trình C++ – Xây dựng Template trong C++

Rate this post

Template trong C++ là nền tảng của lập trình tổng quát (generic programming), tức là viết code theo các mà độc lập với bất kỳ kiểu cụ thể nào.

Template là từ khóa trong C++, chúng ta có thể hiểu rằng là nó một kiểu dữ liệu trừu tượng, đặc trưng cho các kiểu dữ liệu cơ bản. Template là từ khóa báo cho trình biên dịch rằng đoạn mã sau đây định nghĩa cho nhiều kiểu dữ liệu và mã nguồn của nó sẽ được biên dịch sinh ra tương ứng cho từng kiểu dữ liệu trong quá trình biên dịch. Có hai kiểu Template trong C++:

  • Function Template: là một khuôn mẫu hàm, cho phép định nghĩa các hàm tổng quát thao tác cho nhiều kiểu dữ liệu.
  • Class template: là một khuôn mẫu lớp, cho phép định nghĩa các lớp tổng quát cho nhiều kiểu dữ liệu.

Đối với Function Template

#include<iostream>
using namespace std;

template <typename T>
void Swap(T *a, T *b) {
    *a = *a + *b;
    *b = *a - *b;
    *a = *a - *b;
}

int main() {
    int a = 5;
    int b = 10;
    Swap<int>(&a, &b);
    cout << "a = " << a <<" b = " << b << endl;
	// a = 10, b = 5;
  
    double x = 3.5;
    double y = 5.6;
    Swap<double>(&x, &y);
    cout << "x = " << x << " y = " << y << endl;
    // x = 5.6, y = 3.5;
  
   return 0;
}

Đối với Class Template

#include<iostream>
using namespace std;

template <class T>
class Sort {
    public:
        static void interchangeSort(T *a, int n) {
            for (int i = 0; i < n - 1; i++) {
                for (int j = i + 1; j < n; j++) {
                    if (*(a + i) < *(a + j))
                        Swap((a + i), (a + j));
                }
            }   
        }

        static void Swap(T* a, T* b) {
            *a = *a + *b;
            *b = *a - *b;
            *a = *a - *b;
        }
 };


int main() {
    int a[5] = { 10, 50, 30, 40, 20 };
    int n = sizeof(a) / sizeof(a[0]);

    Sort<int>::interchangeSort(a, n);

    cout << " Sorted array : ";
    for (int i = 0; i < n; i++)
        cout << a[i] << " ";
    cout << endl;

    return 0;
}

Hits: 15

Leave a Reply