Xem mẫu

  1. om .c Lập trình ng co an Chương 4: Lớp và đối tượng th o ng du u cu 2/10/2017 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  2. Nội dung  4.1 Khái niệm om  4.2 Định nghĩa lớp  4.3 Biến thành viên .c  4.4 Hàm thành viên ng  4.5 Kiểm soát truy nhập co  4.6 Bài tập phần 1 an  4.7 Hàm tạo và hàm hủy  4.8 Hàm tạo bản sao th ng  4.9 Hàm toán tử gán o du  4.10 Thành viên tĩnh u  4.11 Nạp chồng toán tử cu  4.12 Khai báo friend Chương 4: Lớp và đối tượng 2 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  3. 4.1 Khái niệm  Đối tượng là gì? om – Mô hình đại diện của một đối tượng vật lý: .c  Person, student, employee, employer  Car, bus, vehicle,… ng – Đối tượng logic co  Trend, report, button, window,… an  Một đối tượng có: th – Các thuộc tính ng – Trạng thái o du – Hành vi u – Căn cước cu – Ngữ nghĩa Chương 4: Lớp và đối tượng 3 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  4. Lớp là gì?  Là sự thực thi của các đối tượng có chung các thuộc om tính, hành vi, quan hệ, ngữ nghĩa. .c  Lớp là một kiểu dữ liệu mới có cấu trúc, trong đó việc ng truy nhập các biến thành viên được kiểm soát thông co qua các hàm thành viên.  Các dữ liệu của lớp  biến thành viên an th  Các hàm của lớp  hàm thành viên ng  Một biến của một lớp  một đối tượng o du u cu Chương 4: Lớp và đối tượng 4 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  5. 4.2 Định nghĩa lớp  Kiểu dữ liệu có cấu trúc om sruct Date{ //sử dụng void main(){ int day, month, year; .c Date d; }; set_date(d,32,13,2010); void set_date(Date& date,int d, int m, int y){ ng add_day(d,5); date.day = d; add_year(d,1); date.month = m; co d.month = 13; date.year = y; } } an void add_day(Date& date, int n){ th date.day += n; ... ng } Truy nhập biến void add_month(Date& date, int n) ){ o thành viên từ du date.month += n; ... bên ngoài } u cu void add_year(Date& date, int n) ){ date.year += n; } Chương 4: Lớp và đối tượng 5 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  6. Các vấn đề với struct  Truy nhập trực tiếp vào các biến thành viên của cấu trúc  không an toàn om Khi có sự thay đổi tên của các biến thành viên  .c  ng người sử dụng phải thay đổi lại mã chương trình ứng co dụng – Ví dụ: thay đổi lại cấu trúc Date an sruct Date{ th int d, m, y; ng }; o – Thì đoạn mã sau sẽ có lỗi không biên dịch du Date d; d.month = 10; u cu Chương 4: Lớp và đối tượng 6 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  7. Lớp hóa  Định nghĩa lớp Date Tên lớp om class Date{ int day; Biến thành viên .c int month; int year; ng public: Kiểm soát quyền co void set_date(int d, int m, int y){ truy nhập day = d; an month = m; year = y; th } int get_day() { return day; } Hàm thành viên ng int get_month() { return month; } o int get_year() { return year; } du void add_year(int n) ){ year += n; u } cu ... }; Chương 4: Lớp và đối tượng 7 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  8.  Sử dụng lớp Date Đối tượng om void main(){ Date d; .c d.set_date(1,1,2010); d.add_year(10); ng d.day = 10; //?? Có lỗi. co d.month = 10; //?? day, month, year là d.year = 2009;//?? các biến thành viên an int i = d.day;//?? int day = d.get_day(); của Date thuộc kiểu th int month = d.get_month(); không được phép int year = d.get_year(); ng truy nhập từ bên } ngoài (kiểu private) o du u cu Chương 4: Lớp và đối tượng 8 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  9.  Thay đổi tên biến thành viên của lớp om class Date{ //Sử dụng int d; void main{ .c int m; Date d; int y; d.set_date(1,1,2010); ng public: d.add_year(10); int day = d.get_day(); co void set_date(int _d, int _m, int _y){ d = _d; int month = d.get_month(); int year = d.get_year(); an m = _m; y = _y; } th } int get_day() { return d; } ng int get_month() { return m; } o int get_year() { return y; } du void add_year(int n) ){ year += n; Có sự khác biệt u } cu ... không? }; Chương 4: Lớp và đối tượng 9 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  10. 4.3 Biến thành viên  Khai báo biến thành viên của lớp class Date{ om int day,month, year; //khai báo tưng tự như cấu trúc .c ... }; ng  Mặc định các biến thành viên không truy nhập được từ bên co ngoài an Date d; th d.day = 10;; //Lỗi, vì biến thành viên day của Date thuộc kiểu private ng  Có thể cho phép biến thành viên truy nhập từ bên ngoài bằng o du cách chuyển thành biến public. Tuy nhiên, ít khi sử dụng như vậy vì không còn che giấu dữ liệu u cu class Date{ public: int day,month, year; //truy nhập được từ bên ngoài ... }; Chương 4: Lớp và đối tượng 10 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  11.  Truy nhập các biến thành viên thông qua các hàm thành viên class Date{ int day, month,year; om public: Hàm thành viên int get_day() { return day; } để truy nhập biến .c void set_day(int d){ day = d; } thành viên }; ng co  Khởi tạo biến thành viên thông qua hàm tạo class Date{ an int day, month,year; th public: ng Date(int d, int m, int y){ //hàm tạo o day = d; month = m; year = y; du } u ... cu }; Chương 4: Lớp và đối tượng 11 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  12. 4.4 Hàm thành viên  Khai báo và định nghĩa hàm thành viên class Date{ om int day, month,year; .c public: Khai báo và int get_day() { return day; } định nghĩa ng void set_day(int d); co . . . Chỉ khai báo, }; không định an void Date::set_day(int d){ nghĩa th day = d; ng } Định nghĩa bên ngoài phần khai o báo lớp du  Để che giấu cách thực hiện, hàm thành viên thường được khai u báo trong tập tin đầu (*.h), phần định nghĩa được thực hiện cu trong tệp tin nguồn (*.cpp). Khi đóng gói thành thư viện, người sử dụng chỉ cần tệp tin thư viện (*.lib) và tệp tin đầu (*.h), không cần tệp tin nguồn (*.cpp) Chương 4: Lớp và đối tượng 12 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  13.  Khai báo hàm thành viên trong tệp tin đầu (*.h) //tệp tin Date.h om class Date{ int day, month,year; .c public: ng int get_day(); co void set_day(int d); . . . an }; th  Định hàm thành viên trong tệp tin nguồn (*.cpp) o ng //tệp tin Date.cpp du void Date::set_day(int d){ u day = d; cu } void Date::get_day(){ return day;} Chương 4: Lớp và đối tượng 13 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  14. Con trỏ đối tượng  Sử dụng con trỏ đối tượng om .c void main{ Date d; ng d.set_date(1,1,2010); Date *pd = &d; co //con trỏ pd trỏ vào đối tượng d pd->set_date(1,1,2010); an Date *pd1 = new Date; //cấp phát bộ nhớ, gọi hàm tạo pd1->set_day(10); th . . . ng delete pd1; //hủy bộ nhớ Date *pd2 = new Date[5]; o du for(int i = 0 ;i < 5; i++) pd2[i].set_date(1,1,2010); u . . . cu delete [] pd2; } Chương 4: Lớp và đối tượng 14 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  15. 4.5 Kiểm soát truy nhập  private: các thành viên chỉ có thể truy nhập từ các om thành viên của lớp và từ các bạn bè của lớp .c  public: các thành viên công cộng, truy nhập được ở ng mọi nơi co  protected: các thành viên không truy nhập được từ an bên ngoài, nhưng truy nhập được từ lớp dẫn xuất th Lớp dẫn xuất ng class A{ class B: public A{ o du protected: public: int a; void g(){ Lớp cơ sở u void f(); f(); cu }; } }; Chương 4: Lớp và đối tượng 15 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  16. 4.6 Bài tập  Xây dựng một lớp tên person để đại diện cho một om người với các yêu cầu: .c – Tên có độ dài tối đa 50 ký tự – Ngày, tháng, năm sinh có kiểu int (hoặc thuộc kiểu Date như ng đã gợi ý trong bài giảng). co – Quê quán có độ dài tối đa 100 ký tự an – Hàm nhập tên, ngày sinh, quê từ bán phím th – Hàm hiển thị thông tin ra màn hình ng – Hàm lấy tên, hàm gán tên o du – Hàm lấy quê quán, hàm gán quê quán – Hàm lấy ngày sinh, hàm gan ngày sinh u cu – Viết chương trình chính minh họa cách sử dụng Chương 4: Lớp và đối tượng 16 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  17. 4.7 Hàm tạo và hàm hủy  Vấn đề 1: Nghiên cứu đoạn mã sau om class Date{ int day, month,year; .c public: int get_day() { return day; } ng void set_day(int d){ day = d; } co }; Câu hỏi: void main(){ an d.day = ? Date d; d.month = ? th int i = d.get_date(); d.year = ? } ng  Làm thế nào để sau khi được tạo ra, đối tượng có o du trạng thái ban đầu theo ý muốn của người sử dụng? u  Giải pháp: sử dụng hàm tạo cu Chương 4: Lớp và đối tượng 17 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  18. 4.7 Hàm tạo và hàm hủy (…)  Vấn đề 2: đối tượng sử dụng bộ nhớ động om class Array{ int n; //số phần tử của array .c int *data; //mảng chứa giá trị các phần tử public: ng ... }; co an  Câu hỏi: làm thế nào để cấp phát bộ nhớ và hủy bộ th nhớ cho biến thành viên data một cách an toàn ng o du  Giải pháp: sử dụng hàm tạo và hàm hủy. u cu Chương 4: Lớp và đối tượng 18 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  19. 4.7 Hàm tạo và hàm hủy (…)  Hàm tạo: luôn được gọi khi đối tượng được tạo ra om  Hàm hủy: luôn được gọi khi đối tượng bị hủy .c  Cú pháp: ng class A{ int a, b; co public: A(){a = 0; b = 0;} 1 an A(int _a){ a = _a;} 2 th A(int _a, int _b){ a = _a; b = _b;} 3 ~A(); ng }; o du  Một lớp có thể có nhiều hàm tạo u – Hàm tạo 1: hàm tạo không đối cu – Hàm tạo 2: hàm tạo một đối – Hàm tạo 3: hàm tạo hai đối  Một lớp chỉ có duy nhất một hàm hủy Chương 4: Lớp và đối tượng 19 CuuDuongThanCong.com https://fb.com/tailieudientucntt
  20.  Sử dụng void main{ A a(); //gọi hàm tạo (?) om A a1(10); //gọi hàm tạo (?) A a2(1,2); //gọi hàm tạo (?) .c } //gọi hàm hủy cho ? ng co void f(A a){ gọi hàm tạo (?) A b(0,0); an if(...){ gọi hàm tạo (?) th A c; ... gọi hàm hủy cho ? ng } o du } gọi hàm hủy cho ? u cu void main{ A *a = new A(10); //gọi hàm tạo (?) . . . //sử dụng delete a; //gọi hàm hủy } Chương 4: Lớp và đối tượng 20 CuuDuongThanCong.com https://fb.com/tailieudientucntt
nguon tai.lieu . vn