Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 1
NGÔN NGỮ LẬP TRÌNH
ÔN TẬP
Cấu trúc đề thi
• Câu hỏi dạng lý thuyết 5 câu
• Câu hỏi dạng bài tập 30 câu
– Kết quả đoạn chương trình
– Điền code vào chỗ trống
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 2
Nội dung ôn tập • Quy tắc chung
• Các loại dữ liệu
• Các cấu trúc điều khiển
• Hàm, nạp chồng hàm, khuôn mẫu hàm, hàm đệ quy
• Mảng, con trỏ, mảng động
• Cấu trúc, lớp, đối tượng, các quyền truy cập dữ liệu trong lớp
• Hàm tạo, hàm hủy, kế thừa, đa kế thừa, đa hình, hàm ảo, hàm thuần ảo, lớp trừu tượng
• Nạp chồng toán tử
• Thư viện khuôn mẫu chuẩn - STL
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 3
Quy tắc chung
• Quy tắc đặt tên
• Quy tắc viết chú thích
• Phạm vi sử dụng biến
• Nhập / xuất dữ liệu, luồng vào >>, luồng ra
<<, xuất các ký tự đặc biệt (\n, \t, \”…)
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 4
Các kiểu dữ liệu
• Kiểu cơ sở
• Kiểu mảng
• Kiểu vector
• So sánh mảng và vector
• Cách truy cập mảng, vector
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 5
Các cấu trúc điều khiển
• Rẽ nhánh:
– if…., if… else
– switch…. case
• Lặp:
– for
– while
– do … while
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 6
if/ if … else
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 7
if … else rút gọn
• Toán tử điều kiện:
• Trả về giá trị 1 nếu biểu thức kiểm tra cho kết
quả đúng, ngược lại trả về giá trị 2
• VD:
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 8
switch….case
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 9
Sau mỗi lựa chọn nên có lệnh break để thoát khỏi khối lệnh
Nếu cách xử lý của nhiều lựa chọn giống nhau thì viết:
Khi không gặp trường hợp nào ở trên thì câu lệnh ở đây
được thực hiện
for
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 10
Dấu phân cách giữa các lệnh ở đây là dấu ;
Nếu không có cặp ngoặc này thì chỉ một lệnh được thực hiện trong
vòng lặp for
Nếu có dấu ; ở đây thì không lệnh nào phía dưới
được thực hiện trong vòng lặp for
Cách khai báo hàm
Khai báo trước, định nghĩa sau Khai báo kèm định nghĩa luôn
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 11
Nhưng đều phải ở ngoài hàm main
Chú ý kiểu trả về của hàm
• Kiểu trả về là void
thì không cần return
• Các kiểu trả về khác
thì return một giá trị
cùng kiểu trả về
• Ví dụ:
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 12
Cách gọi hàm
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 13
• Kiểu trả về là void thì
không được gọi trong
lệnh cout hoặc trong
các biểu thức
Cách gọi hàm
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 14
• Các kiểu trả về khác
thì có thể được gọi
trong lệnh cout hoặc
trong các biểu thức
Chú ý tham số truyền vào hàm
• Nếu muốn nhận được sự thay đổi của tham số
truyền vào hàm sau lời gọi hàm thì phải truyền
bằng tham chiếu (truyền địa chỉ của biến)
• Ngược lại truyền bằng tham trị (truyền giá trị
của biến)
• Ví dụ:
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 15
Chú ý tham số truyền vào hàm
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 16
Truyền vào địa chỉ của biến a và b
Nạp chồng hàm
• Là cách viết nhiều hàm trùng tên nhưng khác
nhau về:
– Kiểu của các tham số
– Số lượng các tham số
– Kiểu trả về của hàm
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 17
Nạp chồng hàm
• Ví dụ:
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 18
Khuôn mẫu hàm
• Là cách viết một hàm ở dạng tổng quát thay vì
phải viết nhiều hàm nạp chồng có phần định
nghĩa giống nhau, chỉ khác nhau về kiểu tham
số và kiểu trả về
• Ví dụ:
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 19
Khuôn mẫu hàm
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 20
Hàm đệ quy
• Là hàm mà trong thân hàm có lời gọi đến
chính hàm đó.
• Một hàm đệ quy được chia làm 2 phần:
– Phần cơ sở: điều kiện thoát khỏi đệ quy
– Phần đệ quy: gọi hàm với tham số tiến dần đến
phần cơ sở
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 21
Hàm đệ quy
• Ví dụ:
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 22
Phần cơ sở
Phần đệ quy
Mảng
• Là tập hợp các biến cùng kiểu được đặt chung
1 tên
• Các cách khai báo mảng:
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 23
Khởi tạo giá trị cho các phần tử của mảng
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 24
• Nếu không khởi tạo thì các phần tử của mảng nhận giá trị mặc định
• Nếu giá trị khởi tạo nhiều hơn kích thước mảng thì sẽ báo lỗi
• Nếu không đủ giá trị khởi tạo thì những phần tử còn lại sẽ nhận giá trị 0
• Nếu kích thước mảng không được khai báo thì danh sách khởi tạo sẽ xác định kích thước mảng
Sử dụng mảng
• Mảng được truy cập thông qua chỉ số
• Các chỉ số của mảng được đánh từ 0 -> n-1
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 25
Sử dụng mảng
• Khi 1 mảng làm tham số cho hàm thì:
– Phần định nghĩa hàm chỉ cần viết khai báo mảng
không có số phần tử
– Phần gọi hàm không cần truyền số phần tử vào
tham số
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 26
Sử dụng mảng
• Ví dụ:
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 27
Con trỏ
• Là biến chứa địa chỉ của một vùng nhớ mà nó
trỏ đến
• Khai báo con trỏ <tên kiểu> *<tên biến>
– Ví dụ: int *p; double *t;
• Sử dụng:
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 28
Con trỏ • Sử dụng:
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 29
5 10 10
Con trỏ • Cấp phát vùng nhớ khi cần (dùng toán tử new)
• Hủy vùng nhớ khi không sử dụng (delete)
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 30
Mảng động
• Mảng động là mảng có kích thước không được chỉ ra tại thời điểm lập trình
• Kích thước của mảng được quyết định khi chương trình chạy
• Kích thước có thể được tăng thêm hoặc co lại khi cần -> tránh lãng phí bộ nhớ
• Sử dụng biến con trỏ để quản lý mảng động
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 31
Mảng động
• Cấp phát mảng động
• Hủy mảng động
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 32
Sử dụng mảng động • Dùng chỉ số truy cập như mảng tĩnh
• Không dùng chỉ số
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 33
Cấu trúc (struct)
• Là kiểu dữ liệu gộp giống như mảng
• Tuy nhiên:
Mảng là tập các giá trị có cùng kiểu
Cấu trúc là tập các giá trị có kiểu khác nhau
Cần phải định nghĩa trước khi sử dụng
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 34
Định nghĩa cấu trúc
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 35
Định nghĩa cấu trúc
• Ví dụ
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 36
Sử dụng cấu trúc
• Để truy cập vào từng thành phần của cấu trúc
dùng dấu (.)
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 37
Ví dụ
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 38
Khai báo một mảng d gồm 3 phần tử kiểu date
Truy cập vào từng thành phần của kiểu date bằng
dấu .
Lớp
• Tương tự như cấu trúc
• Khác:
– Cho phép che dấu thông tin
– Phân quyền truy cập (private, protected, public)
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 39
Định nghĩa lớp
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 40
Định nghĩa lớp
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 41
• Ví dụ: định nghĩa lớp phân số Các thành phần dữ liệu được che
dấu bởi từ khóa private
Các hàm thành phần công khai được khai báo sau từ khóa public
Các hàm khởi tạo
Hàm hủy
Sử dụng lớp
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 42
Nạp chồng toán tử
• Các cách nạp chồng:
– Nạp chồng ngoài lớp
– Nạp chồng bằng hàm bạn
– Nạp chồng bằng hàm thành viên của lớp
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 43
Nạp chồng ngoài lớp
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 44
Nạp chồng bằng hàm bạn
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 45
Nạp chồng trong lớp
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 46
Sử dụng toán tử đã nạp chồng
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 47
Kế thừa
• Một lớp có thể được kế thừa từ một hoặc nhiều
lớp khác
• Phạm vi truy xuất các thành phần được kế thừa
phụ thuộc vào kiểu kế thừa (public, protected,
private)
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 48
Cú pháp định nghĩa lớp kế thừa
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 49
• Lớp dẫn xuất có thể truy cập các thành phần protected và public của lớp cơ sở
• Lớp dẫn xuất vẫn kế thừa các thành phần private của lớp cơ sở nhưng không thể truy cập trực tiếp được
Quy trình gọi hàm khởi tạo và hàm hủy
của lớp dẫn xuất và lớp cơ sở
• Khởi tạo lớp cơ sở,
khởi tạo lớp dẫn
xuất
• Hủy lớp dẫn xuất,
hủy lớp cơ sở
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 50
Khái niệm định nghĩa lại trong kế thừa
• Phân biệt nạp chồng với định nghĩa lại
– Nạp chồng: tên hàm giống hệt cái trước, nhưng
phải khác kiểu trả về hoặc khác tham số
– Định nghĩa lại: tên hàm phải giống, kiểu trả về và
các tham số cũng phải giống hệt cái trước, chỉ khác
về cách làm việc
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 51
Đa hình
• Đa hình là cách thể hiện khác nhau của một hàm ở lớp cơ sở và các lớp dẫn xuất
• VD: 3 hàm nhap() trong minh họa làm 3 việc khác nhau
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 52
Hàm ảo
• Hàm ảo giúp thể hiện rõ tính đa hình trong quá trình liên kết muộn
• Hàm ảo có từ khóa virtual trước khai báo hàm
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 53
Hàm thuần ảo
• Hàm thuần ảo là hàm ảo không cần định nghĩa
• Ở lớp dẫn xuất, nếu không ghi đè hàm thuần ảo thì hàm đó vẫn là hàm thuần ảo
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 54
Lớp trừu tượng
• Một lớp có hàm thuần ảo được gọi là lớp trừu
tượng
• Một lớp là lớp trừu tượng thì không thể được
dùng làm kiểu để khai báo đối tượng
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 55
Không gian tên
• Sử dụng không gian tên nhằm xác định chính
xác địa chỉ của một hàm
• Cách tạo không gian tên
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 56
Sử dụng không gian tên
• Hoặc
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 57
Thư viện chuẩn
• Nhận biết một số thư viện chuẩn
• Biết các hàm, các cấu trúc được cung cấp bởi
thư viện chuẩn
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 58
28/05/2018 Nguyễn Thị Phương Dung - Khoa CNTT - ĐHSPHN 59