ƯỜ
Ạ Ọ
TR
Ộ NG Đ I H C BÁCH KHOA HÀ N I
Ệ Ơ Ệ Ậ Ậ Ỹ K THU T L P TRÌNH H C ĐI N
TỬ
ả
ệ
Gi ng viên
ặ : TS. TS. Đ ng Thái Vi
t
ơ ệ ử
ộ
ệ
ơ
Đ n vơ ị: B môn C đi n t
, Vi n C khí
ộ
Hà N i, 09/2017
1
Programming Engineering in Mechatronics
Ệ Ơ Ệ Ử
Ậ
Ậ
Ỹ
K THU T L P TRÌNH H C ĐI N T
ữ ậ
ổ
ề
1. T ng quan v ngôn ng l p trình
ấ 7. C u trúc
ớ
ệ ơ ộ
ữ
2. Gi
i thi u s b ngôn ng C
8. Vào/ra trong C
ể
ử
ứ
3. Ki u, toán t
ể và bi u th c
ơ ở ủ 9. C s c a C++
ề
ể
4. Dòng đi u khi n
10. L pớ
ấ
ươ
ế ừ
5. Hàm và c u trúc ch
ng trình
11. K th a và đa hình
ả
ồ
ỏ 6. Con tr và m ng
12. Lu ng vào/ra trong C++
2
ƯƠ CH ơ ở ủ NG 9. C s c a C++
ể
ớ
ấ
ộ
ố
ề 9.1 Các đi m khác v cú pháp so v i C ớ 9.2 C p phát đ ng v i new và delete ả ề 9.3 Truy n tham kh o ề ớ ộ ố ấ 9.4 M t s v n đ v i hàm s trong C++ iả 9.5 Quá t
3
ớ ể Các đi m khác nhau so v i C
ớ
ể
1. Các đi m khác nhau so v i C
• C là ngôn ngữ lập trình cấu trúc, nó cho phép tạo 1 ứng dụng gồm nhiều module chức năng (file), mỗi module chứa nhiều hàm chức năng, các hàm này có thể bị bao đóng trong module chứa chúng hay có thể được truy xuất bởi bất kỳ nơi nào khác ngoài module chứa nó. C là ngôn ngữ không được kiểm tra kiểu chặt, nghĩa là chương trình dịch không có khả năng và không bao giờ kiểm tra kiểu, bạn có thể gán chuỗi vào biến nguyên.
4
• C++ là sự nới rộng của C, nó cung cấp thêm một số khả
năng để cho phép lập trình hướng đối tượng. Ứng dụng
được viết theo hướng đối tượng là 1 tập các đối tượng
tương tác lẫn nhau, C++ cung cấp phát biểu "class" để
người lập trình đặc tả các đối tượng cấu thành ứng dụng.
Tuy nhiên, mức độ hỗ trợ hướng đối tượng của C++ còn
yếu, không trong sáng và dễ làm người lập trình mắc lỗi
trong quá trình viết code.
5
ớ ể Các đi m khác nhau so v i C
•
C++ cũng là ngôn ngữ lớn hơn với nhiều tính năng và phức tạp hơn so với C. Giữa C và C++ có rất nhiều khác biệt. Liệt kê 11 điểm khác biệt chính giữa 2 ngôn ngữ này.
ớ ể Các đi m khác nhau so v i C
C
C++
1.Không phải ngôn ngữ hướng đối tượng.
Là một ngôn ngữ hướng đối tượng (gồm 4 khái niệm về hướng đối tượng).
2.Là một ngôn ngữ lập trình thủ tục.
Không phải là ngôn ngữ lập trình thủ tục.
3. Chỉ hỗ trợ các structure.
Hỗ trợ các lớp và đối tượng.
4. Không có biến tham chiếu, chỉ hỗ trợ con trỏ.
Hỗ trợ cả biến tham chiếu và con trỏ.
6
ớ ể Các đi m khác nhau so v i C
C
C++
5. Không thể khai báo hàm trong các structure.
Có thể khai báo hàm trong các structure.
dụng
Sử
các
6. hàm scanf và printf để nhập xuất.
Sử dụng các hàm cin>> và cout<< để nhập xuất.
7. Không thể khai báo hàm trong các structure.
Có thể khai báo hàm trong các structure.
8. Được xem là một ngôn ngữ lập trình cấp thấp.
Được xem là sự kết hợp giữa ngôn ngữ lập trình cấp thấp và cấp cao.
7
ớ ể Các đi m khác nhau so v i C
C
C++
Hỗ trợ các hàm inline.
9. Không hỗ trợ các hàm inline, thay vào đó có thể sử dụng khai báo #define
10. Sử dụng phương pháp tiếp cận từ trên xuống (top-down).
Sử dụng phương pháp tiếp cận từ dưới lên (bottom-up).
11. Là ngôn ngữ lập trình hướng chức năng (function driven).
Là ngôn ngữ lập trình hướng đối tượng (Object driven).
8
ớ ể Các đi m khác nhau so v i C
ỗ ợ
Danh sách các tính năng h tr trong C++
Classes
Abstract classes
Exception handling
Member functions
Mutable members
Access control (public, private, protected)
Friend functions
Constructors and destructors
Operator overloading
Derived classes
References
Pointers to members
Virtual functions
Static members
Templates 9
Inline functions
Type safe linkage
Run-time type identification
Default arguments
// comments
new and delete
True const
Function overloading
Operator overloading
Namespaces
bool keyword
Declarations as statements
e
Automatically typedef’s struct tags
Safer and more robust casting
10
ớ ể Các đi m khác nhau so v i C
ộ ấ C p phát đ ng new và delete
ộ
ấ
2. C p phát đ ng new và delete
• Trong các chương trình C, tất cả các cấp phát động bộ
nhớ đều được xử lý thông qua các hàm thư viện như
malloc(), calloc() và free(). C++ định nghĩa một phương
thức mới để thực hiện việc cấp phát động bộ nhớ bằng
cách dung hai toán tử new và delete. Sử dụng hai toán
tử này sẽ linh hoạt hơn rất nhiều so với các hàm thư viện
của C.
11
ộ ấ C p phát đ ng new và delete
newử
2.1 Toán t Ví d :ụ
ấ
ộ C p phát đ ng trong C
12
ộ ấ C p phát đ ng new và delete
ấ
ộ C p phát đ ng trong C++
• Chúng ta nhận thấy rằng, cách viết của C++ sáng sủa và
dễ sử dụng. Toán tử new thay thế cho hàm malloc() hay
calloc() của C có cú pháp như sau :
13
ộ ấ C p phát đ ng new và delete
Trong đó:
type_name: Mô tả kiểu dữ liệu được cấp phát. Nếu kiểu dữ
liệu mô tả phức tạp, nó có thể được đặt bên trong các dấu
ngoặc.
initializer: Giá trị khởi động của vùng nhớ được cấp phát.
Nếu toán tử new cấp phát không thành công thì nó sẽ trả
về giá trị NULL.
14
ộ ấ C p phát đ ng new và delete
ử
2.2 Toán t
delete
• Toán tử delete thay thế hàm free() của C. Cú pháp như
sau:
• Vừa cấp phát vừa khởi
động như sau
15
• Cấp phát một mảng, cú pháp như
sau:
• Đối với việc cấp phát mảng chúng ta không thể vừa cấp
phát vừa khởi động giá trị cho chúng
16
ộ ấ C p phát đ ng new và delete
ộ ấ C p phát đ ng new và delete
ụ
ươ
ở ộ
ạ
2.3 Ví d : Ch
ả ng trình t o m ng kh i đ ng
17
ộ ấ C p phát đ ng new và delete
ế
ả K t qu :
2.4 Bài t p:ậ
• Chương trình cộng hai ma trận trong đó mỗi ma trận
được cấp phát động.
18
ế ề Truy n tham chi u
ề
ế
3. Truy n tham chi u
ế
ế
3.1 Bi n tham chi u
• Trong C++ cho phép sử dụng loại biến thứ ba là biến tham
chiếu. So với 2 loại biến quen biết nói trên, thì biến này có
những đặc điểm sau:
- Biến tham chiếu không được cấp phát bộ nhớ,
không có địa chỉ riêng.
- Nó dùng làm bí danh cho một biến (kiểu giá trị) nào
đó và nó sử dụng vùng nhớ của biến này.
19
ế ề Truy n tham chi u
Ví d :ụ
• Tạo ra các biến thực u, v và biến tham chiếu thực r. Biến r
không được cấp phát bộ nhớ, nó là một tên khác (bí danh)
của u và nó dùng chung vùng nhớ của biến u.
Ý nghĩa:
- Trong mọi câu lệnh, viết u hay viết r đều có ý nghĩa
như nhau, vì đều truy nhập đến cùng một vùng nhớ.
- Có thể dùng biến tham chiếu để truy nhập đến một
biến kiểu giá trị.
20
ế ề Truy n tham chi u
Công d ng:ụ • Biến tham chiếu thường được sử dụng làm đối của hàm
để cho phép hàm truy nhập đến các tham số biến trong lời
21
gọi hàm.
ế ề Truy n tham chi u
a • Vì biến tham chiếu không có địa chỉ riêng, nó chỉ là bí danh của một biến kiểu giá trị nên trong khai báo phải chỉ rõ nó
tham chiếu đến biến nào. Ví dụ nếu khai báo (báo lỗi)
b • Biến tham chiếu có thể tham chiếu đến một phần tử mảng,
22
ế ề Truy n tham chi u
c • Không cho phép khai báo mảng tham chiếu
d • Biến tham chiếu có thể tham chiếu đến một hằng. Khi đó nó sẽ sử dụng vùng nhớ của hằng và nó có thể làm thay
đổi giá trị chứa trong vùng nhớ này
Ví d : ụ Chương trình dưới đây minh hoạ cách dùng biến tham chiếu đến một phần tử mảng cấu trúc để nhập dữ liệu và thực hiện các phép tính trên các trường của phần tử mảng cấu trúc.
23
24
ế ề Truy n tham chi u
25
ế ề Truy n tham chi u
ế ề Truy n tham chi u
ế
ằ
3.2 H ng tham chi u:
• Hằng tham chiếu được khai báo theo mẫu:
• Giống như biến tham chiếu, hằng tham chiếu có thể tham
chiếu đến một biến hoặc một hằng
26
• Sự khác nhau giữa biến và hằng tham chiếu ở chỗ: Không
cho phép dùng hằng tham chiếu để làm thay đổi giá trị của
vùng nhớ mà nó tham chiếu
27
ế ề Truy n tham chi u
ế ề Truy n tham chi u
Cách dùng:
- Hằng tham chiếu cho phép sử dụng giá trị chứa trong một
vùng nhớ, nhưng không cho phép thay đổi giá trị này.
- Hằng tham chiếu thường được sử dụng làm đối của hàm
để cho phép hàm sử dụng giá trị của các tham số trong lời
gọi hàm, nhưng tránh không làm thay đổi giá trị của các
tham số.
28
ả ử Quá t i các toán t
ả
ử
4. Quá t
i các toán t
• Trong C++, danh sách tất cả các toán tử có thể được quá
tải:
• Để làm quá tải một toán tử chúng ta chỉ cần viết một hàm
thành viên của lớp có tên operator theo sau là toán tử
chúng ta muốn làm quá tải. Cú pháp như sau:
29
ả ử Quá t i các toán t
Ví d : ụ quá tải toán tử +
30
• Nếu quá nhiều CVector hãy để ý rằng một số trong chúng
tham chiếu đến tên lớp CVector còn số còn lại là tên các
hàm (constructor và destructor).
• Hàm operator+ của lớp CVector được dùng để quá tải toán
tử số học +.
31
ả ử Quá t i các toán t
• Bảng tổng kết về việc các hàm operator phải được khai
báo như sau:
32
ả ử Quá t i các toán t
33
ả ử Quá t i các toán t
34
ả ử Quá t i các toán t