tailieunhanh - Bài giảng Template
Bài giảng Template được biên soạn nhằm trang bị cho các bạn những kiến thức về lập trình tổng quát; 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ố khuôn mẫu khác. Mời các bạn tham khảo bài giảng để hiểu rõ hơn về những nội dung này. | 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 . | 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ố .
đang nạp các trang xem trước