Chương 7 Template thuộc bài giảng Lập trình hướng đối tượng, cùng nắm kiến thức trong chương này thông qua việc tìm hiểu các nội dung sau: khuôn mẫu-template, C++ template, khuôn mẫu hàm, khuôn mẫu lớp. để nắm kiến thức cần thiết được trình bày trong bài giảng này. | Chương 7 Template Nội dung 1 2 3 4 Khuôn mẫu - Template C++ Template Khuôn mẫu hàm Khuôn mẫu lớp Chương 7 Template Ví dụ về khuôn mẫu Hàm hoán vị 2 số nguyên a, b void swap(int& a, int& b) { int temp; temp = a; a = b; b = temp; } Nếu ta muốn thực hiện việc tương tự cho kiểu dữ liệu khác như float? dùng overload void swap(float& a, float& b) { float temp; temp = a; a = b; b = temp; } Có cách nào cài đặt một hàm tổng quát không? 29/8/2014 Chương 7 Template Ví dụ về khuôn mẫu Ví dụ khác: ta định nghĩa một lớp biểu diễn cấu trúc ngăn xếp chứa các số nguyên class Stack { public: Stack(); ~Stack(); void push(const int& i); void pop(int& i); bool isEmpty() const; . private: int *data; }; 29/8/2014 Chương 7 Template Ví dụ về khuôn mẫu Ta thấy khai báo và định nghĩa của Stack phụ thuộc tại một mức độ nào đó vào kiểu dữ liệu int Một số phương thức lấy tham số và trả về kết quả kiểu int Nếu ta muốn tạo ngăn xếp cho một kiểu dữ liệu khác thì sao? Ta có nên định nghĩa lại hoàn toàn lớp Stack (kết quả sẽ tạo ra nhiều lớp chẳng hạn IntStack, FloatStack, ) hay không? Có thể cài đặt một lớp Stack tổng quát không? 29/8/2014 Chương 7 Template Ví dụ về khuôn mẫu Sử dụng trình tiền xử lý của C • Trình tiền xử lý thực hiện thay thế text trước khi dịch • Do đó, ta có thể dùng #define để chỉ ra kiểu dữ liệu và thay đổi tại chỗ khi cần #define TYPE int void swap( TYPE & a, TYPE & b) { TYPE temp; temp = a; a = b; b = temp; } Hai hạn chế: • Không hiệu quả và dễ gây lỗi • chỉ cho phép đúng một định nghĩa trong một chương trình 29/8/2014