Bài giảng Lập trình hướng đối tượng - Bài 10: Hàm và lớp Template - Phạm Thị Bích Vân

Xét ví dụ sau:

 Viết hàm lấy trị tuyệt đối của một số. Ta viết nhiều hàm ứng với nhiều kiểu dữ liệu khác nhau.

int MyAbs(int X)

{

 return X>=0?X:-X;

}

long MyAbs(long X)

{

 return X>=0?X:-X;

}

double MyAbs(double X)

{

 return X>=0?X:-X;

}

 

pptx 12 trang yennguyen 6700
Bạn đang xem tài liệu "Bài giảng Lập trình hướng đối tượng - Bài 10: Hàm và lớp Template - Phạm Thị Bích Vân", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Lập trình hướng đối tượng - Bài 10: Hàm và lớp Template - Phạm Thị Bích Vân

Bài giảng Lập trình hướng đối tượng - Bài 10: Hàm và lớp Template - Phạm Thị Bích Vân
Bài 10: Hàm và lớp Template 
Hàm Template 
Xét ví dụ sau: 
	Viết hàm lấy trị tuyệt đối của một số. Ta viết nhiều hàm ứng với nhiều kiểu dữ liệu khác nhau. 
int MyAbs(int X) 
{ 
	return X>=0?X:-X; 
} 
long MyAbs(long X) 
{ 
	return X>=0?X:-X; 
} 
double MyAbs(double X) 
{ 
	return X>=0?X:-X; 
} 
Hàm Template 
Thay vì viết nhiều hàm ứng với nhiều kiểu dữ liệu. Ta sẽ viết một hàm tổng quát dùng Template như sau: 
template 
T MyAbs(T x) 
{ 
	return (x>=0)?x:-x; 
} 
Gọi hàm: 
	 cout<<MyAbs(-2)<<endl; 
 	cout<<MyAbs(3.5)<<endl; 
Hàm Template 
Cú pháp: 
Tất cả các hàm template định nghĩa bắt đầu với từ khóa template theo sau một danh sách các tham số hình thức với hàm template vây quanh trong các ngoặc nhọn ( ) 
 Mỗi tham số hình thức phải được đặt trước bởi từ khóa class như: 
	 template 
 hoặc template 
Lớp Template 
Lớp template cũng mang ý tưởng như hàm tempale. 
Ví dụ: Định nghĩa một lớp template stack. 
Lớp Template 
template 
class Stack 
 { 
	private: 
	 int Size; //Kích thước stack 
	int Top; 
	T *StackPtr; 
	public: 
	 ~Stack() 
	{ 
	 delete [] StackPtr; 
	} 
	int Push(const T&); 
	int Pop(T&); 
}; 
Lớp Template 
Định nghĩa phương thức của lớp template 
template 
int Stack::Push(const T &Item) 
{ 
	if (!IsFull()) 
	{ 
	StackPtr[++Top] = Item; 
	return 1; 
	} 
	return 0; 
} 
Lớp Template 
Hàm main 
	Stack FloatStack(5); 
	float F = 1.1; 
	cout << "Pushing elements onto FloatStack" << endl; 
	FloatStack.Push(F)) 
Lớp Template 
Chú ý: 
Hàm thành viên định nghĩa bên ngoài lớp template bắt đầu với phần đầu là 
template 
Ví dụ: 
template 
int Stack::Push(const T &Item) 
{ 
. 
} 
STL 
STL (Standard Template Library) là một bộ thư viện vô cùng hữu dụng của C++. 
 Dùng để làm việc với các cấu trúc dữ liệu phổ biến như danh sách, hàng đợi, ngăn xếp và các phép toán chủ yếu với các cấu trúc dữ liệu này như tìm kiếm, sắp xếp, truy xuất, thêm, xóa, sửa 
Thành phần trong STL 
Các container (các bộ lưu trữ dữ liệu): 
là các cấu trúc dữ liệu phổ biến đã template hóa dùng để lưu trữ các kiểu dữ liệu khác nhau 
Gồm hai loại: 
sequential container (các bộ lưu trữ dữ liệu tuần tự) bao gồm list, vector và deque 
associative container (các bộ lưu trữ dữ liệu liên kết) bao gồm map, multimap, set và multiset. 
iterator (các con trỏ dữ liệu) là các con trỏ để trỏ đến các phần tử trong các bộ lưu trữ. 
Các algorithm (các thuật toán lưu trữ dữ liệu) là các hàm phổ biến để làm việc với các bộ lưu trữ như thêm, xóa, sửa, truy xuất, tìm kiếm, sắp xếp. 
Thành phần trong STL 
Các function object (các đối tượng hàm) là các hàm và phép toán phổ biến để làm việc với các phần tử được lưu trữ cũng như các bộ lưu trữ và các thuật toán lưu trữ như cộng, trừ, nhân, chia, so sánh. 
Các adapter (các bộ tương thích) Các adapter chia làm 3 loại 
container adapter (các bộ tương thích lưu trữ) bao gồm stack, queue và priority_queue 
iterator adapter (các bộ tương thích con trỏ) 
function adapter (các bộ tương thích hàm) 

File đính kèm:

  • pptxbai_giang_lap_trinh_huong_doi_tuong_bai_10_ham_va_lop_templa.pptx