33
02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 1 NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU fit.hnue.edu.vn/~dungntp/NNLT

NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

Page 1: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 1

NGÔN NGỮ LẬP TRÌNH

KHUÔN MẪU

fit.hnue.edu.vn/~dungntp/NNLT

Page 2: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

Nội dung

• Khuôn mẫu hàm

• Khuôn mẫu lớp

• Khuôn mẫu và thừa kế

02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 2

Page 3: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

Xét ví dụ

• Viết chương trình cho phép:

– Nhập vào 2 số nguyên a, b. Thực hiện việc hoán đổi giá trị 2 biến a, b cho nhau.

– Nhập vào 2 ký tự x, y. Thực hiện việc hoán đổi giá trị 2 biến x, y cho nhau.

– Nhập vào 2 chuỗi str1, str2. Thực hiện việc hoán đổi giá trị 2 biến str1, str2 cho nhau.

– ……

02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 3

Page 4: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

=> phải nạp chồng các hàm hoán đổi như sau

02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 4

Page 5: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

Nếu yêu cầu hoán đổi 2 đối tượng

khác nữa thì sao?

02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 5

Page 6: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

Sử dụng

Khuôn mẫu hàm

02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 6

Page 7: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

Khuôn mẫu hàm

• Là một mô hình (mẫu) giúp tạo định nghĩa

chung cho những hàm Chỉ khác nhau về kiểu

dữ liệu mà chúng thao tác.

• Khuôn mẫu hàm khác với nạp chồng ở chỗ

đoạn mã định nghĩa hàm chỉ cần viết MỘT

LẦN

02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 7

Page 8: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

Cú pháp của khuôn mẫu hàm

• Sử dụng tiền tố khuôn mẫu template <class T>

• Sau đó đến khai báo và định nghĩa hàm mà

trong đó sử dụng T là một kiểu được thay thế

cho bất kỳ 1 kiểu nào

02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 8

Page 9: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

Như ví dụ trên

• Thay tất cả các hàm hoán đổi bằng MỘT mẫu

hàm như sau:

02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 9

Page 10: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

Ví dụ

• Lúc này trong hàm main gọi:

– doicho(a, b) thì T sẽ được hiểu là kiểu int

– doicho(a1, b1) thì T sẽ được hiểu là kiểu bool

– doicho(a2, b2) thì T sẽ được hiểu là kiểu string

02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 10

Page 11: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

Cách thức hoạt động của khuôn mẫu

• Khi gọi một khuôn mẫu hàm với một kiểu dữ liệu, trình biên dịch sẽ tạo một định nghĩa hàm thực sự từ khuôn mẫu này dựa theo kiểu dữ liệu của tham số

• Khuôn mẫu hàm không sử dụng bộ nhớ

• Mã thực sự chỉ được tạo khi tên khuôn mẫu được gọi

02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 11

Page 12: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

Cách thức hoạt động của khuôn mẫu

• Mọi kiểu dữ liệu chỉ định trong khuôn mẫu

hàm phải được dùng bên trong thân của khuôn

mẫu hàm

• Lời gọi hàm phải truyền đầy đủ tham số (với

kiểu dữ liệu) được chỉ định trong khuôn mẫu

hàm

02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 12

Page 13: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

Cách thức hoạt động của khuôn mẫu

• Khuôn mẫu hàm có thể được nạp chồng với

danh sách tham số khác nhau

• Giống như các hàm thông thường, khuôn mẫu

hàm phải được định nghĩa trước khi gọi

02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 13

Page 14: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

Bài tập

• Tạo khuôn mẫu hàm tìm max của 2 tham số.

• Viết chương trình tìm max của 2 số nguyên, 2

số thực, 2 chuỗi.

02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 14

Page 15: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

Khuôn mẫu lớp

• Tương tự như khuôn mẫu hàm

• Khuôn mẫu lớp được dùng để tạo ra một lớp

khái quát hơn cho các kiểu của dữ liệu và các

hàm thành phần

02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 15

Page 16: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

Cú pháp định nghĩa khuôn mẫu lớp

02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 16

Tiền tố khuôn mẫu

Page 17: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

Ví dụ khuôn mẫu lớp

• Tạo ra một lớp chứa 1 cặp đôi các giá trị kiểu T

– Nếu T là int thì đối tượng của lớp này sẽ chứa 1 cặp

2 số nguyên

– Nếu T là char thì đối tượng của lớp này sẽ chứa 1

cặp 2 ký tự

– ….

02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 17

Page 18: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 18

Khai báo khuôn

mẫu lớp

Page 19: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 19

Định nghĩa các hàm thành viên

• Giống như định nghĩa các hàm thành viên của các lớp thông thường

• Chỉ khác ở chỗ nó là một khuôn mẫu hàm

• => Cần chú ý: – Phải có tiền tố khuôn mẫu trước mỗi

định nghĩa

– Tên lớp trước toán tử phân giải phạm vi ::

Page 20: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

Sử dụng khuôn mẫu lớp

• Khuôn mẫu lớp có thể được sử dụng thay thế

cho bất kỳ chỗ nào sử dụng các kiểu chuẩn

• Để tạo các đối tượng của lớp

• Để làm tham số cho hàm

02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 20

Page 21: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

Ví dụ sử dụng khuôn mẫu lớp để tạo ra

các đối tượng của lớp

02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 21

Page 22: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

Ví dụ sử dụng khuôn mẫu lớp để tạo ra

các đối tượng của lớp

02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 22

• A là đối tượng của

khuôn mẫu lớp

cap

• Sử dụng A như

một đối tượng của

lớp thông thường

Page 23: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

Ví dụ sử dụng khuôn mẫu lớp để làm

tham số cho hàm

02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 23

Khuôn mẫu lớp cap làm tham số cho hàm tong

Truyền đối tượng của khuôn mẫu lớp cap vào

hàm tong

Page 24: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

Khuôn mẫu và kế thừa

• Có thể sử dụng khuôn mẫu trong thừa kế

– Tạo ra một lớp khuôn mẫu dẫn xuất từ một lớp

khuôn mẫu cơ sở

02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 24

Page 25: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

Ví dụ kế thừa khuôn mẫu lớp

• Khai báo khuôn

mẫu lớp SoPhuc

kế thừa từ khuôn

mẫu lớp cap

02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 25

Page 26: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

Ví dụ kế thừa khuôn mẫu lớp

• Định nghĩa các hàm thành phần cho khuôn mẫu

SoPhuc

02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 26

Page 27: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

Ví dụ kế thừa khuôn mẫu lớp

• Sử dụng khuôn

mẫu lớp SoPhuc

cho 2 kiểu int và

float:

02/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 27

Page 28: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

Bạn đã từng dùng khuôn mẫu lớp nào

03/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 28

Page 29: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

Vector

• Vector là một kiểu khuôn mẫu lớp

• Vector cho phép tạo ra các loại mảng với

những kiểu dữ liệu khác nhau

• Vector cho phép thay đổi kích thước mảng khi

chương trình đang chạy

03/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 29

Page 30: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

Vector

• Để sử dụng được vector cần khai báo thư viện

vector bằng câu lệnh #include<vector>

• Một số cách khai báo vector vector<int> a; Khai báo một vector a có kiểu int

vector<int> a(10); Khai báo một vector a có 10 phần tử kiểu

int

vector<int> a(10, 2); khai báo một vector a có 10 phần tử

kiểu int, khởi tạo cho cả 10 phần tử bằng 2.

03/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 30

Page 31: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

Một số toán tử và phương thức của khuôn mẫu lớp vector

Toán tử/Phương

thức

Mô tả

= Gán vector

[chỉ-số] Truy nhập tới phần tử của vector theo chỉ số

.size() Lấy số phần tử của vector

.resize(n) Thay đổi số phần tử của vector (có n phần tử)

.at(chỉ-số) Truy nhập tới phần tử của vector theo chỉ số

.front() Truy nhập vào phần tử đầu tiên của vector

.back() Truy nhập vào phần tử cuối cùng của vector

03/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 31

Page 32: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

Một số toán tử và phương thức của khuôn mẫu lớp vector

Phương thức Mô tả

.push_back(pt) Thêm phần tử pt vào cuối dãy. Số phần tử của dãy

tăng lên 1.

.pop_back() Xoá phần tử khỏi dãy. Số phần tử của dãy giảm 1

.insert(pos, giatri) Chèn 1 phần tử vào vị trí pos của dãy

.insert(pos, n, giatri) Chèn n phần tử vào vị trí pos của dãy

.erase(pos) Xóa phần tử vị trí thứ pos của dãy.

.erase(vt1, vt2) Xóa phần tử từ vị trí 1 đến vị trí 2 trong dãy

.clear() Xóa hết các phần tử của vector

.swap(vector2) Hoán đổi 2 vector

03/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 32

Page 33: NGÔN NGỮ LẬP TRÌNH KHUÔN MẪU - fit.hnue.edu.vnfit.hnue.edu.vn/~dungntp/NNLT/10.khuonmau.pdfXét ví dụ •Viết chương trình cho phép: –Nhập vào 2 số nguyên

Bài tập

03/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 33