intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Kỹ thuật lập trình C/C++: Chương 10 (1) - Lê Thành Sách

Chia sẻ: _ _ | Ngày: | Loại File: PDF | Số trang:117

45
lượt xem
8
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Bài giảng "Kỹ thuật lập trình C/C++ - Chương 10: Lập trình hướng đối tượng" phần cơ bản giúp người học nắm bắt các khái niệm cơ bản, các thuật ngữ, tính khả kiến, thiết kế lớp, hàm khởi tạo và hàm hủy, định nghĩa lại toán tử,... Mời các bạn cùng tham khảo.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Kỹ thuật lập trình C/C++: Chương 10 (1) - Lê Thành Sách

  1. Chương 10 Lập trình hướng đối tượng --Cơ bản-- Lê Thành Sách Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 1 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
  2. Nội dung n Kiểu dữ liệu trong C - Ôn lại n Các khái niệm cơ bản n Con trỏ this n Tổng hợp các thuật ngữ (I) n Tính khả kiến n Thiết kế lớp n Hàm khởi tạo và hàm huỷ n Định nghĩa lại toán tử n Thành viên có tính “static” n Thành viên có tính “const” n Tổng hợp các thuật ngữ (II) n Quan hệ bạn bè (friendship) n Tổ chức mã nguồn cho lớp n Biễu diễn lớp bằng sơ đồ n Tổng kết Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 2 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
  3. Kiểu dữ liệu trong C n Xét đoạn chương trình typedef struct{ int day, month, year; Bộ biên dịch cấp phát 3 vùng nhớ có } Date; tên: a, d, và c trên STACK: int main(int argc, char** argv) { a: 4 bytes à dùng sizeof(.) cho cụ thể. int a; d: 8 bytes double d; c: 12 bytes Date c = {20, 5, 2017}; Cả 3 vùng nhớ này đều THỤ ĐỘNG, return 0; CHỈ CÓ CÔNG NĂNG LÀ CHỨA các giá } trị của kiểu được mô tả. Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 3 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
  4. Kiểu dữ liệu trong C typedef struct{ int day, month, year; } Date; void print(Date& d){ cout
  5. Kiểu dữ liệu trong C typedef struct{ int day, month, year; } Date; void print(Date& d){ cout
  6. Kiểu dữ liệu trong C n Nhược điểm là gì? n Khó biết được dữ liệu có thể được xử lý bởi hàm nào. n Khó đảm bảo ràng buộc trên dữ liệu, ví dụ: n Ngày: 1 à 31 (tuỳ tháng, tối đa) n Tháng: 1 à 12 Chỉ cần tính chất về “đóng gói” (enscapsulation) của lập trình hướng đối tượng (OOP) đã giải quyết những vấn đề trên. Hơn nữa, ngoài tính “đóng gói”, OOP còn cung cấp những tính năng hay khác nữa mà ngôn ngữ C không có. Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 6 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
  7. Khái niệm cơ bản n (Q.1) Lớp (class): n Là một kiểu dữ liệu do người lập trình tạo ra. n Quan niệm: Lớp như cái khuôn để từ đó tạo ra các đối tượng như nói sau. n (Q.2) Đối tượng (object, instance): n Là một biến tạo ra từ kiểu lớp. n Ví dụ: n Giả sử đã có lớp MyClass n Dòng: MyClass c; n Sẽ tạo ra một đối tượng, đặt tên là “c”, nghĩa là một vùng nhớ có tên là “c”. Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 7 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
  8. Khái niệm cơ bản n (Q.3) Mô tả lớp có gì khác mô tả một cấu trúc trong C (struct) n Khi mô tả kiểu này, cần mô tả n Các dữ liệu mà một đối tượng của lớp có. n Các hàm (phương thức) có thể thực thi với đối tượng của lớp. n Những hành động mà một đối tượng của lớp đó có thể thực hiện à tính chủ động của đối tượng (không chỉ là vùng nhớ thụ động) Với kiểu struct (của C): Mô tả kiểu này không có mô tả hàm/phương thức như kiểu lớp! Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 8 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
  9. Khái niệm cơ bản n (Q.4) Tạo đối tượng như thế nào? n Giống như struct. Giả sử có lớp MyClass n (1) Tạo tĩnh trên STACK: MyClass obj; MyClass obj(…); //có thể truyền tham số - xem Phần Constructor n (2) Tạo động trên HEAP: MyClass *ptr = new MyClass(); MyClass *ptr = new MyClass(…); //có thể truyền tham số - xem Phần Constructor //dùng ptr tại đây delete ptr; Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 9 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
  10. Khái niệm cơ bản n (Q.4) Tạo đối tượng như thế nào? n Giống như struct. Giả sử có lớp MyClass n (1) Tạo tĩnh trên STACK, mảng tĩnh MyClass obj[SIZE]; n (2) Tạo động trên HEAP: MyClass *ptr = new MyClass[SIZE]; //.. sử dụng ptr delete []ptr; Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 10 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
  11. Khái niệm cơ bản n (Q.5) Truy xuất dữ liệu và gọi phương thức ntn? n Giống như struct. Giả sử có lớp MyClass n (1) đối tượng trên STACK: MyClass obj; ... obj.[tên-thành-viên]; //xem ví dụ. n (2) đối tượng trên HEAP: MyClass *ptr = new MyClass(); ... Obj->[tên-thành-viên]; //xem ví dụ. Lưu ý: Toán tử chấm “.” và toán tử mũi tên “->” Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 11 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
  12. Khái niệm cơ bản: Minh hoạ (I) n Tạo ra một kiểu “Date”, theo yêu cầu: n Một đối tượng của “Date” có phải chứa được dữ liệu về ngày, tháng, và năm. n Một đối tượng của “Date” có thể đón nhận lời yêu cầu “print”. Một khi nó (đối tượng) nhận được yêu cầu này, nó in ra màn hình ngày, tháng, và năm mà nó đang giữ. n Đối tượng có tính CHỦ ĐỘNG hơn so với các biến kiểu cấu trúc (của C) Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 12 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
  13. Khái niệm cơ bản: Minh hoạ (I) class Date{ Một lớp (class) “Date” public: int day, month, year; void print(){ cout
  14. Khái niệm cơ bản: Minh hoạ (I) class Date{ public: int day, month, year; void print(){ cout
  15. Khái niệm cơ bản: Minh hoạ (I) Dùng lớp “Date” như thế nào? Xem hàm main() sau: int main(int argc, char** argv) { Date d1 = {20, 5, 2017}; Date d2 = {21, 5, 2017}; Date d3 = {22, 5, 2017}; d1.print(); d2.print(); d3.print(); return 0; } Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 15 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
  16. day: 20 Khái niệm cơ bản: Minh hoạ (I) month: 5 d1 int main(int argc, char** argv) { year: 2017 Date d1 = {20, 5, 2017}; Tạo ra 3 đối tượng Date d2 = {21, 5, 2017}; có tên là d1, d2, print Date d3 = {22, 5, 2017}; và d3, day: 21 d1.print(); và khởi gán giá trị d2.print(); ban đầu. month: 5 d3.print(); d2 year: 2017 return 0; } print day: 22 Lưu ý: month: 5 d3 Đối tượng = dữ liệu + hàm year: 2017 Trường Đại Học Bách Khoa Tp.HCM print Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 16 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
  17. Lưu ý Trong trường hợp như lớp “Date”, phương thức “print” không phải liên kết động (vì: non-virtual) nên con trỏ hàm không cần đi kèm trong bộ nhớ cấp cho đối tượng, xem hình. Tuy nhiên, slide này trình bày mô hình như vậy để giúp sinh viên dễ dàng nắm bắt khái niệm gói cả dữ liệu và hàm. Có thể xem đây là mô hình đơn giản và ở mức cao (luận lý). Người học nên xem thêm các tài liệu khác để nắm rõ hơn về mô hình đối tượng (Object Model): [1] Stanley B. Lippman, “Inside the C++ Object Model,” Addison Wesley, 1996. [2] http://spockwangs.github.io/2011/01/31/cpp-object-model.html Tuy vậy, chỉ nên đọc sau khi nắm bắt chắc các khái niệm và cách dùng OOP trong slide này. Trường Đại Học Bách Khoa Tp.HCM Lập trình C/C++ Khoa Khoa học và Kỹ thuật Máy tính 17 CuuDuongThanCong.com https://fb.com/tailieudientucntt © 2017
  18. Khái niệm cơ bản: Minh hoạ (I) int main(int argc, char** argv) { Date d1 = {20, 5, 2017}; Date d2 = {21, 5, 2017}; Date d3 = {22, 5, 2017}; class Date{ d1.print(); public: d2.print(); int day, month, year; d3.print(); void print(){ return 0; cout
  19. Khái niệm cơ bản: Minh hoạ (I) int main(int argc, char** argv) { Date d1 = {20, 5, 2017}; Date d2 = {21, 5, 2017}; Date d3 = {22, 5, 2017}; class Date{ d1.print(); public: d2.print(); int day, month, year; d3.print(); void print(){ return 0; cout
  20. Khái niệm cơ bản: Minh hoạ (I) int main(int argc, char** argv) { Date d1 = {20, 5, 2017}; Date d2 = {21, 5, 2017}; Date d3 = {22, 5, 2017}; class Date{ d1.print(); public: d2.print(); int day, month, year; d3.print(); void print(){ return 0; cout
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2