Bài viết hôm nay mình sẽ hướng dẫn các bạn từ khóa template và cách sử dụng template trong c++.
template
là một từ khóa trong C++, nó biểu diễn cho một kiểu dữ liệu trừu tượng có thể là int, float, class….- Tại sao lại sử dụng template ? Thay vì viết overloading từng phương thức cho các kiểu dữ liệu khác nhau thì ta chỉ cần viết một phương thức template cho tất cả.
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 compile sinh ra tương ứng cho từng kiểu dữ liệu trong quá trình biên dịch.
Có 2 loại template cơ bản:
- 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.
Cách dùng Function template trong C++
Cùng xem ví dụ sau:
void swap(int &a, int &b) { int temp = a; a = b; b = temp; } void swap(float &a, float &b) { float temp = a; a = b; b = temp; }
Như vậy hai hàm cơ bản là giống nhau, chỉ khác nhau về dữ liệu. Thay vì viết hai hàm trên thì ta chỉ cần viết một hàm như sau:
template<typename T> void swap(T &a, T &b) { T temp = a; a = b; b = temp; }
Cùng chạy thử chương trình trên nhé.
#include <iostream> using namespace std; template<typename T> void Swap(T &a, T &b) { T temp = a; a = b; b = temp; } int main() { int a = 3, b = 5; Swap(a, b); cout << "a: " << a << endl; cout << "b: " << b << endl; }
a: 5 b: 3
Giả sử bạn muốn dùng hai kiểu dữ liệu thì chúng ta sẽ làm như thế nào ? Đơn giản ta chỉ cần khai báo thêm một kiểu dữ liệu tông quát mà thôi.
#include <iostream> using namespace std; template<typename T, typename X> void Swap(T &a, X &b) { T temp = a; a = (T)b; b = (X)temp; } int main() { int a = 3; float b = 5.5f; Swap(a, b); cout << "a: " << a << endl; cout << "b: " << b << endl; }
a: 5 b: 3
Cách dùng class template trong C++
Với class thì cách dùng cũng tương tự như trên. Ở ví dụ sau mình sẽ khai báo một lớp Point chứa hai tọa độ x,y với kiểu tùy ý.
template<class Type> class Point { private: Type x; Type y; public: Point(Type x, Type y){ this.x = x; this.y = y; } Point(){} void printPoint() { cout << "x: " << x; cout << "y: " << y; } };
Lúc này nếu bạn muốn tạo ra một đối tượng trong hàm main thì bạn cần chỉ định kiểu tường minh cho chương trình. Ở đây mình chỉ định là kiểu int.
int main() { Point<int> p(5, 10); p.printPoint(); }
x: 5 y: 10
Lưu ý: Mỗi khai báo template chỉ được dùng cho một khối lệnh phía sau nó mà thôi.
Chúng ta có thể khai báo một template cùng với một kiểu dữ liệu chỉ định trước. Cùng xem ví dụ sau:
#include <iostream> using namespace std; template<class Type,int N> class Array { private: Type *data; public: Array() { data = new Type[N]; } void display() { cout << "Da khoi tao mang!"; } }; int main() { Array<int, 10> array; array.display(); }
Da khoi tao mang!
Bài viết mình đến đây là kết thúc. Cám ơn các bạn đã theo dõi !
Để lại một bình luận