1. Trang chủ
  2. » Giáo án - Bài giảng

OOP_ch06_Template

39 155 1
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 39
Dung lượng 324 KB

Nội dung

Template Giới thiệu về khuôn mẫu • Giới thiệu • Lập trình tổng quát (generic programming) • Lập trình tổng quát trong C++ • C++ template • Khuôn mẫu hàm • Khuôn mẫu lớp • Các tham số template khác • Template sử dụng template Lập trình tổng quát • Lập trình tổng quát là phương pháp lập trình độc lập với chi tiết biểu diễn dữ liệu – Tư tưởng là ta định nghĩa một khái niệm không phụ thuộc một biểu diễn cụ thể nào, và sau đó mới chỉ ra kiểu dữ liệu thích hợp làm tham số • Qua các ví dụ, ta sẽ thấy đây là một phương pháp tự nhiên tuân theo khuôn mẫu hướng đối tượng theo nhiều kiểu Lập trình tổng quát • Ta đã quen với ý tưởng có một phương thức được định nghĩa sao cho khi sử dụng với các lớp khác nhau, nó sẽ đáp ứng một cách thích hợp – Khi nói về đa hình, nếu phương thức "draw" được gọi cho một đối tượng bất kỳ trong cây thừa kế Shape, định nghĩa tương ứng sẽ được gọi để đối tượng được vẽ đúng – Trong trường hợp này, mỗi hình đòi hỏi một định nghĩa phương thức hơi khác nhau để đảm bảo sẽ vẽ ra hình đúng • Nhưng nếu định nghĩa hàm cho các kiểu dữ liệu khác nhau nhưng không cần phải khác nhau về nội dung hàm thì sao? Lập trình tổng quát • Ví dụ, xét hàm sau: Nếu ta muốn thực hiện việc tương tự cho một kiểu dữ liệu khác, chẳng hạn float? Có thực sự cần đến cả hai phiên bản không? void swap(int& a, int& b) { int temp; temp = a; a = b; b = temp; } void swap(float& a, float& b) { float temp; temp = a; a = b; b = temp; } Lập trình tổng quát • Ví dụ khác: ta định nghĩa một lớp biểu diễn cấu trúc ngăn xếp cho kiểu int class Stack { public: Stack(); ~Stack(); void push(const int& i); void pop(int& i); bool isEmpty() const; . }; Lập trình tổng quát • 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ề 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? Lập trình tổng quát • Như vậy trong một số trường hợp, đưa chi tiết về kiểu dữ liệu vào trong định nghĩa hàm hoặc lớp là điều không có lợi Lập trình tổng quát trong C • 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; } Lập trình tổng quát trong C Hai hạn chế: – nhàm chán và dễ lỗi – chỉ cho phép đúng một định nghĩa trong một chương trình #define TYPE int void swap(TYPE & a, TYPE & b) { TYPE temp; temp = a; a = b; b = temp; } . C++ template • Khuôn mẫu hàm • Khuôn mẫu lớp • Các tham số template khác • Template sử dụng template Lập trình tổng quát • Lập trình tổng quát là phương. temp; } C++ template • Template (khuôn mẫu) là một cơ chế thay thế mã cho phép tạo các cấu trúc mà không phải chỉ rõ kiểu dữ liệu • Từ khoá template được

Ngày đăng: 06/07/2013, 01:27

Xem thêm

TÀI LIỆU CÙNG NGƯỜI DÙNG

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN