1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng lập trình hướng đối tượng chương 7 đh lạc hồng

25 245 0

Đ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 25
Dung lượng 20,26 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Ví dụ về khuôn mẫuthuộc tại một mức độ nào đó vào kiểu dữ liệu int quả kiểu int khác thì sao?. Ví dụ về khuôn mẫu• Trình tiền xử lý thực hiện thay thế text trước khi dịch • Do đó, ta có

Trang 2

dữ liệu khác như float?  dùng overload

void swap(float& a, float& b) {

Trang 3

Ví dụ về khuôn mẫu

void push(const int& i);

void pop(int& i);

bool isEmpty() const;

private:

int *data;

Trang 4

Ví dụ về khuôn mẫu

thuộc tại một mức độ nào đó vào kiểu dữ liệu int

quả kiểu int

khác thì sao?

(kết quả sẽ tạo ra nhiều lớp chẳng hạn IntStack,FloatStack, …) hay không?

Trang 5

Ví dụ về khuôn mẫu

• 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;

}

• 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

Trang 6

C++ Template

định

ngoặc nhọn <> chứa tên của các kiểu dữ liệutuỳ ý được cung cấp, gọi là các tham số củatemplate

Trang 7

với khai báo ngay sau nó, từ khoá class dùng

Trang 8

C++ Template

Function template – khuôn mẫu hàm cho

Class template – khuôn mẫu lớp cho phépđịnh nghĩa các lớp tổng quát dùng đến cáckiểu dữ liệu tuỳ ý

Trang 9

Function Template

nhất cho phép ta định nghĩa các hàm dùng đến

Trang 10

Function Template

nghĩa một tập vô hạn các hàm chồng nhau vớitên swap()

gọi nó với kiểu dữ liệu tương ứng

int x = 1, y = 2;

float a = 1.1, b = 2.2;

swap(x, y); // gọi phiên bản hàm swap(int,int)

swap(a, b);// gọi phiên bản hàm swap(float,float)

Trang 12

myStruct p; // Sai !

myStruct<int> q; //khai báo biến kiểu myStruct

myUnion<int,float> r; //khai báo biến kiểu myUnion

 Tại sao đòi hỏi kiểu tường minh?

 Nếu không biết các kiểu dữ liệu được sử dụng, trình biên dịch làm thế nào để biết cần cấp phát bao nhiêu bộ nhớ cho biến được tạo?

Trang 13

Class Template

định nghĩa khuôn mẫu lớp (class template) sửdụng các thể hiện của một hoặc nhiều kiểu dữliệu tuỳ ý

trước, sau đó mới chuyển nó thành một template

Trang 14

void push(const int& i);

void pop(int& i);

bool isEmpty() const;

bool isFull() const;

private:

static const int max;

int contents[max];

int current;

Trang 15

Class Template

int Stack::max=10;//khởi gán biến static

Stack::Stack() { this->current = 0; }// pt thiết lập

Trang 16

void push(const T& i);

void pop(T& i);

bool isEmpty() const;

bool isFull() const;

private:

static const int max ;

T contents[max];

int current;

Trang 18

return (this->current == this->max);

Trang 19

Class Template

của các lớp được định nghĩa bởi template của ta:

Trang 20

Các tham số Template

 Trong ví dụ Stack, ta có một hằng max quy định số lượng

tối đa các đối tượng mà ngăn xếp có thể chứa

 Như vậy, mỗi thể hiện sẽ có cùng kích thước đối với mọi kiểu của đối tượng được chứa

 Nếu ta muốn mỗi Stack có kích thước khác nhau?

 Ta có thể thêm một tham số kiểu int vào lệnh template (tham số này được dùng để xác định kích thước Stack)

 Lưu ý: ta khai báo tham số Size giống như trong các khai báo khác, tham số template có thể khai báo là mặc định

template <class T, int Size> //tham số thông thường template <class T, int Size=100> //tham số mặc định

Trang 21

void push(const T& i);

void pop(T& i);

bool isEmpty() const;

bool isFull() const;

private:

static const int max;

T contents[I];

int current;

Trang 22

Các tham số Template

template <class T, int I>

template <class T, int I>

Stack<T,I>::Stack(){ this->current = 0;}//thiết lập

template <class T, int I>

Stack<T,I>::~Stack() {} //pt huỷ bỏ

template <class T, int I>

{ if (this->current < this->max)

this->contents[this->current++]=i;

else cout<<“Stack is full.”;

}

Trang 23

template <class T, int I>

return (this->current == 0);

}

template <class T, int I>

return (this->current == this->max);

Trang 24

Stack<char, 30> u; // Tạo Stack kí tự kích thước 30

 Lưu ý rằng các lệnh trên tạo thể hiện của 3 lớp khác nhau

Trang 25

Các tham số Template

hoặc tham chiếu

chỉ của tham số

Ngày đăng: 03/12/2015, 16:15

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm