ƯỜ

Ạ Ọ

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