Ngôn ngữ lập trình - Chapter 4 (HUST) Thầy Vũ Song Tùng

LI
lienhejb
0 téléchargements
47
0

Contenu du document

Page 1

goupee.vn goupee.com Lập trình Chương4: Lớp và đối tượng cuu duong than cong . com fb.com/goupee.vn 2/10/2017 CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 2

goupee.vnNội dung goupee.com  4.1 Khái niệm  4.2 Định nghĩa lớp  4.3 Biến thành viên  4.4 Hàm thành viên  4.5 Kiểm soát truy nhập  4.6 Bài tập phần 1  4.7 Hàm tạo và hàm hủy  4.8 Hàm tạo bản sao  4.9 Hàm toán tử gán  4.10 Thành viên tĩnh  4.11 Nạp chồng toán tửcuu duong than cong . com  4.12 Khai báo friend fb.com/goupee.vn Chương 4: Lớp và đối tượng 2 CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 3

goupee.vn4.1Khái niệm goupee.com  Đối tượng là gì? – Mô hình đại diện của một đối tượng vật lý:  Person, student, employee, employer  Car, bus, vehicle,… – Đối tượng logic  Trend, report, button, window,…  Một đối tượng có: – Các thuộc tính – Trạng thái – Hành vi – Căn cước cuu duong than cong . com – Ngữ nghĩa fb.com/goupee.vn Chương 4: Lớp và đối tượng 3 CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 4

goupee.vnLớp là gì? goupee.com  Là sự thực thi của các đối tượng có chung các thuộc tính, hành vi, quan hệ, ngữ nghĩa.  Lớp là một kiểu dữ liệu mới có cấu trúc, trong đó việc truy nhập các biến thành viên được kiểm soát thông qua các hàm thành viên.  Các dữ liệu của lớp  biến thành viên  Các hàm của lớp  hàm thành viên  Một biến của một lớp  một đối tượng cuu duong than cong . com fb.com/goupee.vn Chương 4: Lớp và đối tượng 4 CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 5

goupee.vn4.2Định nghĩa lớp goupee.com  Kiểu dữ liệu có cấu trúc //sử dụng sruct Date{ void main(){ int day, month, year; Date d; }; set_date(d,32,13,2010); void set_date(Date& date,int d, int m, int y){ add_day(d,5); date.day = d; add_year(d,1); date.month = m; d.month = 13; date.year = y; } } void add_day(Date& date, int n){ date.day += n; ... } Truy nhập biến void add_month(Date& date, int n) ){ date.month += n; thành viên từ ... bên ngoài } cuu duong than cong . com void add_year(Date& date, int n) ){ date.year += n; } fb.com/goupee.vn Chương 4: Lớp và đối tượng 5 CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 6

goupee.vnCác vấn đề với struct goupee.com  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  Khi có sự thay đổi tên của các biến thành viên  người sử dụng phải thay đổi lại mã chương trình ứng dụng – Ví dụ: thay đổi lại cấu trúc Date sruct Date{ int d, m, y; }; – Thì đoạn mã sau sẽ có lỗi không biên dịch Date d; d.month = 10;cuu duong than cong . com fb.com/goupee.vn Chương 4: Lớp và đối tượng 6 CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 7

goupee.vnLớp hóa goupee.com  Định nghĩa lớp Date Tên lớp class Date{ int day; Biến thành viên int month; int year; public: Kiểm soát quyền void set_date(int d, int m, int y){ truy nhập day = d; month = m; year = y; } int get_day() { return day; } Hàm thành viên int get_month() { return month; } int get_year() { return year; } void add_year(int n) ){ year += n; ...} cuu duong than cong . com }; fb.com/goupee.vn Chương 4: Lớp và đối tượng 7 CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 8

goupee.vn goupee.com  Sử dụng lớp Date Đối tượng void main(){ Date d; d.set_date(1,1,2010); d.add_year(10); Có lỗi. d.day = 10; //?? d.month = 10; //?? day, month, year là d.year = 2009;//?? các biến thành viên int i = d.day;//?? int day = d.get_day(); của Date thuộc kiểu int month = d.get_month(); không được phép int year = d.get_year(); truy nhập từ bên } ngoài (kiểu private) cuu duong than cong . com fb.com/goupee.vn Chương 4: Lớp và đối tượng 8 CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 9

goupee.vn goupee.com  Thay đổi tên biến thành viên của lớp class Date{ //Sử dụng int d; void main{ int m; Date d; int y; d.set_date(1,1,2010); public: d.add_year(10); void set_date(int _d, int _m, int _y){ int day = d.get_day(); d = _d; int month = d.get_month(); m = _m; int year = d.get_year(); y = _y; } } int get_day() { return d; } int get_month() { return m; } int get_year() { return y; } void add_year(int n) ){ Có sự khác year += n; } cuu duong than cong . combiệt ... không? }; fb.com/goupee.vn Chương 4: Lớp và đối tượng 9 CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 10

goupee.vn4.3Biến thành viên goupee.com  Khai báo biến thành viên của lớp class Date{ int day,month, year; //khai báo tưng tự như cấu trúc ... };  Mặc định các biến thành viên không truy nhập được từ bên ngoài Date d; d.day = 10;; //Lỗi, vì biến thành viên day của Date thuộc kiểu private  Có thể cho phép biến thành viên truy nhập từ bên ngoài bằng 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 class Date{ cuu duong than cong . com public: int day,month, year; //truy nhập được từ bên ngoài ... }; fb.com/goupee.vn Chương 4: Lớp và đối tượng 10 CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 11

goupee.vn Truy nhập các biến thành viên thông qua các hàmgoupee.com thành viên class Date{ int day, month,year; public: Hàm thành viên int get_day() { return day; } để truy nhập biến void set_day(int d){ day = d; } thành viên };  Khởi tạo biến thành viên thông qua hàm tạo class Date{ int day, month,year; public: Date(int d, int m, int y){ //hàm tạo day = d; month = m; year = y; } };... cuu duong than cong . com fb.com/goupee.vn Chương 4: Lớp và đối tượng 11 CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 12

goupee.vn4.4 Hàm thành viên goupee.com  Khai báo và định nghĩa hàm thành viên class Date{ int day, month,year; public: Khai báo và int get_day() { return day; } định nghĩa void set_day(int d); . . . Chỉ khai báo, }; không định void Date::set_day(int d){ nghĩa day = d; } Định nghĩa bên ngoài phần khai báo lớp  Để che giấu cách thực hiện, hàm thành viên thường được khai báo trong tập tin đầu (*.h), phần định nghĩa được thực hiệncuu duong than cong . com 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) fb.com/goupee.vn Chương 4: Lớp và đối tượng 12 CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 13

goupee.vn goupee.com  Khai báo hàm thành viên trong tệp tin đầu (*.h) //tệp tin Date.h class Date{ int day, month,year; public: int get_day(); void set_day(int d); . . . };  Định hàm thành viên trong tệp tin nguồn (*.cpp) //tệp tin Date.cpp void Date::set_day(int d){ day = d; cuu duong than cong . com } void Date::get_day(){ return day;} fb.com/goupee.vn Chương 4: Lớp và đối tượng 13 CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 14

goupee.vnCon trỏ đối tượng goupee.com  Sử dụng con trỏ đối tượng void main{ Date d; d.set_date(1,1,2010); Date *pd = &d; //con trỏ pd trỏ vào đối tượng d pd->set_date(1,1,2010); Date *pd1 = new Date; //cấp phát bộ nhớ, gọi hàm tạo pd1->set_day(10); . . . delete pd1; //hủy bộ nhớ Date *pd2 = new Date[5]; for(int i = 0 ;i < 5; i++) pd2[i].set_date(1,1,2010); .delete. . []cuu duong than cong . compd2; } fb.com/goupee.vn Chương 4: Lớp và đối tượng 14 CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 15

goupee.vn4.5Kiểm soát truy nhập goupee.com  private: các thành viên chỉ có thể truy nhập từ các thành viên của lớp và từ các bạn bè của lớp  public: các thành viên công cộng, truy nhập được ở mọi nơi  protected: các thành viên không truy nhập được từ bên ngoài, nhưng truy nhập được từ lớp dẫn xuất Lớp dẫn xuất class A{ class B: public A{ protected: public: int a; void g(){ Lớp cơ sở }; void f();cuu duong than cong . comf(); } }; fb.com/goupee.vn Chương 4: Lớp và đối tượng 15 CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 16

goupee.vn4.6Bài tập goupee.com  Xây dựng một lớp tên person để đại diện cho một người với các yêu cầu: – 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ư đã gợi ý trong bài giảng). – Quê quán có độ dài tối đa 100 ký tự – Hàm nhập tên, ngày sinh, quê từ bán phím – Hàm hiển thị thông tin ra màn hình – Hàm lấy tên, hàm gán tên – 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 sinhcuu duong than cong . com – Viết chương trình chính minh họa cách sử dụng fb.com/goupee.vn Chương 4: Lớp và đối tượng 16 CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 17

goupee.vn4.7Hàm tạo và hàm hủy goupee.com  Vấn đề 1: Nghiên cứu đoạn mã sau class Date{ int day, month,year; public: int get_day() { return day; } void set_day(int d){ day = d; } }; Câu hỏi: void main(){ d.day = ? Date d; d.month = ? int i = d.get_date(); d.year = ? }  Làm thế nào để sau khi được tạo ra, đối tượng có trạng thái ban đầu theo ý muốn của người sử dụng?  Giải pháp: sử dụng hàm tạocuu duong than cong . com fb.com/goupee.vn Chương 4: Lớp và đối tượng 17 CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 18

goupee.vn4.7Hàm tạo và hàm hủy (…) goupee.com  Vấn đề 2: đối tượng sử dụng bộ nhớ động class Array{ int n; //số phần tử của array int *data; //mảng chứa giá trị các phần tử public: ... };  Câu hỏi: làm thế nào để cấp phát bộ nhớ và hủy bộ nhớ cho biến thành viên data một cách an toàn  Giải pháp: sử dụng hàm tạo và hàm hủy. cuu duong than cong . com fb.com/goupee.vn Chương 4: Lớp và đối tượng 18 CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 19

goupee.vn4.7Hàm tạo và hàm hủy (…) goupee.com  Hàm tạo: luôn được gọi khi đối tượng được tạo ra  Hàm hủy: luôn được gọi khi đối tượng bị hủy  Cú pháp: class A{ int a, b; public: A(){a = 0; b = 0;} 1 A(int _a){ a = _a;} 2 A(int _a, int _b){ a = _a; b = _b;} 3 ~A(); };  Một lớp có thể có nhiều hàm tạo – Hàm tạo 1cuu duong than cong . com: hàm tạo không đối – 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 fb.com/goupee.vn Chương 4: Lớp và đối tượng 19 CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 20

goupee.vn Sử dụng goupee.com void main{ A a(); //gọi hàm tạo (?) A a1(10); //gọi hàm tạo (?) A a2(1,2); //gọi hàm tạo (?) } //gọi hàm hủy cho ? void f(A a){ gọi hàm tạo (?) A b(0,0); if(...){ gọi hàm tạo (?) A c; ... gọi hàm hủy cho ? } } gọi hàm hủy cho ? void main{cuu duong than cong . com A *a = new A(10); //gọi hàm tạo (?) . . . //sử dụng delete a; //gọi hàm hủy } fb.com/goupee.vn Chương 4: Lớp và đối tượng 20 CuuDuongThanCong.com https://fb.com/tailieudientucntt

Affichage des 20 premières pages. Téléchargez le document pour le voir en entier.

Commentaires (0)

Se connecter pour rejoindre la discussion

Aucun commentaire pour le moment. Soyez le premier !