YOMEDIA
ADSENSE
CHƯƠNG 3 CÁCH THỨC XÂY DỰNG LỚP
104
lượt xem 11
download
lượt xem 11
download
Download
Vui lòng tải xuống để xem tài liệu đầy đủ
Một lớp là một mẫu (template) hay một khuôn dạng (mold) để từ đó có thể tạo ra những đối tượng mới.
AMBIENT/
Chủ đề:
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: CHƯƠNG 3 CÁCH THỨC XÂY DỰNG LỚP
- 14/04/2010 MỤC TIÊU CHƯƠNG 3 2 CÁCH THỨC XÂY DỰNG LỚP Xây dựng lớp cơ bản dùng C/C++ Phân biệt được public, private 1 Cách viết chương trình chính sử dụng lớp, cách truy cập đến thành viên của lớp GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 3-XÂY DỰNG LỚP OOP-CHƯƠNG 3-XÂY DỰNG LỚP LỚP LÀ GÌ ? NỘI DUNG CHI TIẾT 4 3 LỚP (CLASS) VÀ ĐỐI TƯỢNG (OBJECT) Khi một số các đối tượng cùng tính chất được nhóm lại, tạo nên lớp HIỆN THỰC LỚP TRONG C++ KHAI BÁO LỚP object class girl HiỆN THỰC HÀNH VI HOÀN HOÀN THIỆN LỚP SO VỚI STRUCT TRONG C++ THUỘC TÍNH TRUY CẬP LOẠI HÀNH VI CỦA LỚP Cúc Trúc Mai Lan GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 3-XÂY DỰNG LỚP OOP-CHƯƠNG 3-XÂY DỰNG LỚP 1
- 14/04/2010 Như vậy, HIỆN THỰC LỚP TRONG C++ 5 6 Lớp được dùng để mô tả tất cả các đối tượng có hành class NAME{ vi và dữ liệu tương tự nhau. //members Một lớp là một mẫu (template) hay một khuôn dạng }; (mold) để từ đó có thể tạo ra những đối tượng mới. Như vậy, lớp được bao bọc bởi từ khóa class ở bên ngoài. Có thể xem lớp như một dạng đối tượng (object's type) Bên trong là các thành phần, bao gồm dữ liệu và hành vi. Hay kiểu dữ liệu (data type) Lớp là sự biểu diễn của một mẫu các đối tượng và mô tả cách mà những đối tượng này được cấu tạo bên trong GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 3-XÂY DỰNG LỚP OOP-CHƯƠNG 3-XÂY DỰNG LỚP KHAI BÁO CLASS HIỆN THỰC HÀNH VI CHO CLASS 7 8 Hiện thực bên trong class – Các hành vi inline class ClassName [: [] Cú pháp: • Chương này tạm không đề cập đến đặc tính thừa kế DataType MethodName (Parameters) - Có chương riêng về tính thừa kế. private : • Các thuộc tính truy cập: public, private, protected: { < data > từ khóa chỉ định đặc tính của từng thành phần ngay } < method> sau chỉ thị này. Mặc định là private. Hiện thực bên ngoài class • public: cho phép bên ngoài truy cập interface protected : của lớp. DataType ClassName::MethodName (Parameters) < data > • private: các thành phần nội, không cho phép bên { ngoài truy cập. } ; // có ký tự ‘;’ } • protected: các thành phần dành cho lớp thừa kế truy cập, không cho phép các đối tượng không phải Toán tử :: là toán tử xác định tầm vực của method (scope là con truy cập. resolution operator) GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 3-XÂY DỰNG LỚP OOP-CHƯƠNG 3-XÂY DỰNG LỚP 2
- 14/04/2010 VÍ DỤ SO VỚI STRUCT TRONG C/C++ 9 10 class có thêm các hàm chứa bên trong Các hàm phải chỉ định thêm thuộc tính truy cập (access attributes), chẳng hạn public private protected Các dữ liệu thành viên cũng phải có thuộc tính truy OK cập Khi hiện thực method bên ngoài class, KHÔNG khai báo lại access-specifier. GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 3-XÂY DỰNG LỚP OOP-CHƯƠNG 3-XÂY DỰNG LỚP SO VỚI STRUCT TRONG C/C++ SO VỚI STRUCT TRONG C/C++ 11 12 Chẳng hạn, Tương đương với struct PERSON{ class PERSON{ struct StructName class ClassName public char name[40]; public: private { { protected int birthYear; char name[40]; }; Modifier : Type1 Func1 () }; int birthYear; { } Type1 Func1 (StructName stru) }; Modifier : Type2 Func2 () { } { } Type2 Func2 (StructName stru) }; {} Chỉ có method public là toàn cục các hàm đều toàn cục Khi đó mới có thể truy cập được name, birthYear như đã làm trong kiểu struct. OOP-CHƯƠNG 3-XÂY DỰNG LỚP OOP-CHƯƠNG 3-XÂY DỰNG LỚP GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu 3
- 14/04/2010 HOÀN THIỆN LỚP Cách đơn giản 13 14 class PERSON{ Lớp PERSON ở trên mới chỉ mang tính mô tả, chưa sử char name[40]; dụng được int birthYear; public: Để hoàn thiện, có 2 cách viết khác nhau void getData(){ cout birthYear; } int age(){ cout
- 14/04/2010 Ví dụ TẠO ĐỐI TƯỢNG 17 18 #include Sau khi có lớp, có thể tạo đối tượng bằng cách khai main() { báo biến thuộc kiểu lớp char name[4][40]; PERSON a, b; int n = 0; a, b là 2 đối tượng. cout cout
- 14/04/2010 public private 21 22 private: ngược lại với public, các thành viên mang Từ bất kỳ hàm nào có chứa đối tượng thuộc lớp, đều thuộc tính private chỉ được truy cập từ những hành truy cập được các thành viên có thuộc tính này. vi thuộc lớp và từ những hành vi bè bạn (friend), từ Vì vậy những thành viên mang thuộc tính public còn được những lớp là bè bạn của nó. xem là thành viên có khả năng giao tiếp với môi trường bên private là thuộc tính chuẩn của ngôn ngữ C++, để thông báo ngoài. rằng đây là những thành viên riêng tư của lớp, nội bộ của lớp mới nhìn thấy, mới nói chuyện được, chúng không giao tiếp với thế giới bên ngoài lớp. GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 3-XÂY DỰNG LỚP OOP-CHƯƠNG 3-XÂY DỰNG LỚP protected Giả sử có lớp sau đây 23 24 #include protected: để cho phép các thành viên trong class POINT{ những lớp hậu duệ được quyền truy cập đến. int x, y; public: Nói cách khác, ngoài việc nói chuyện với các thành viên của lớp, void set( int xx, int yy ){ những thành viên có thuộc tính truy cập protected còn có x = xx; thể giao tiếp với các thành viên trong lớp con cháu. y = yy; } int get( int& xx, int& yy ){ xx = x; yy = y; return 1; } }; GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 3-XÂY DỰNG LỚP OOP-CHƯƠNG 3-XÂY DỰNG LỚP 6
- 14/04/2010 Sử a l ạ i 25 26 main() main() { { Không được POINT p; POINT p; p.set( 10, 5 ); p.set( 10, 5 ); ); int x, y; y; cout
- 14/04/2010 VÍ DỤ 1 VÍ DỤ 2: 29 30 public access specifier GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 3-XÂY DỰNG LỚP OOP-CHƯƠNG 3-XÂY DỰNG LỚP VÍ DỤ 3- private access specifier VÍ DỤ 3 protected access specifier 31 32 GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 3-XÂY DỰNG LỚP OOP-CHƯƠNG 3-XÂY DỰNG LỚP 8
- 14/04/2010 Kinh nghiệm Gợi ý về xây dựng chương trình OOP 33 34 Xây dựng class Mỗi thuộc tính của class, người ta thường xây dựng 2 (1) Lấy các khái niệm liên quan đến bài toán (danh từ chính trong đề bài) hành vi public: để xây dựng thành class (thí dụ: Sinh viên). DataType getPropertyName(); (2) Lấy các danh từ mô tả liên quan đến từng khaí niệm ở bước (1). Đó chính là các thuộc tính của class( thí dụ: tên, tuổi, địa chỉ). void setProperTyName (DataType (3) Lấy các tác vụ phải xử lý (động từ trong đề bài). Đó chính là các hành vi newValue); public của class vì hàm main cần đến chúng. bli ì hú (4) Tự hỏi: Để có thể thực hiện hành vi public trong bước 3, có cần thêm Với 2 hành vi này, bên ngoài truy xuất được các hành vi phụ trợ nào không? Nếu có thì đó là hành vi thêm. từng thuộc tính của đối tượng. Các hành vi (5) Môi trường bên ngoài thực sự chỉ cần các hành vi nào thì đó là các hành vi public. Các hành vi còn lại là các hành vi private hoặc protected. khác đều cần đến các hành vi này. (5) Liệu lớp này có cần được phát triển thêm để giải các bài toán thuộc nhóm bài toàn này nữa hay không? Nếu có thì một số hành vi cần có thuộc tính protected. GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 3-XÂY DỰNG LỚP OOP-CHƯƠNG 3-XÂY DỰNG LỚP Thí dụ: Sử dụng class trong hàm main 35 36 class CIRCLE { double x,y,r; Xác định các biến đối tượng cần có. public: ...... Trật tự xử lý của đề bài chính là trật tự truyền thông double getR() { return r ; } báo cho các đối tượng. Có cơ hội kiểm void setR (double newr) tra dữ liệu đầu { if ( newr >=0 ) r = newr ; vào } .... }; GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 3-XÂY DỰNG LỚP OOP-CHƯƠNG 3-XÂY DỰNG LỚP 9
- 14/04/2010 Thí dụ:Viết chương trình nhập 1 hệ phương trình bậc nhất 2 BÀI TẬP VÍ DỤ ẩn.Xuất nghiệm. 38 37 (1) Viết chương trình nhập 1 hệ phương trình bậc Phân tích: nhất 2 ẩn. Xuất nghiệm. Khái niệm liên quan: Hệ phương trình bậc nhất 2 (2) Viết chương trình nhập 1 mảng số nguyên, ẩn ax+by = c class HPTB1 xuất trị lớn nhất, xuất mảng tăng dần. dx+ey = f Tá Tác vụ (hành vi của lớp): Nhập, Xuất nghiệm. (hà ) Nh hi class HPTB1 data: double a,b,c,d,e,f methods: Nhap() , XuatNghiem() GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 3-XÂY DỰNG LỚP OOP-CHƯƠNG 3-XÂY DỰNG LỚP #include #include Thí dụ: Viết chương trình nhập 1 mảng số nguyên int, class HPTB1 xuất trị lớn nhất, xuất mảng tăng dần. { double a,b,c,d,e,f ; // private , default public : // các hành vi bên ngoài cần để tương tác 39 40 void Nhap() // Hiện thực method bên trong khai báo class Phân tích #include Phải hiện thực bên { cout >a>>b>>c; Khái niệm liên quan : mảng #include ngoài lớp vì có dùng cout >d>>e>>f; n { private: int* a, n; } Tác vụ: Input (nhập), public: void XuatNghiem(); // chỉ prototype, để hiện thực bên ngoài khi báo class GetMax (lấy trị lớn nhất), }; void Input(); int GetMax(); AscSort (sắp xếp tăng), void PTB1::XuatNghiem() // Hiện thực method bên ngoài khai báo class void AscSort(); void Output(); { double D=a*e-b*d; Output Output (xuất). Tất cả đều }; if (D==0) cout
- 14/04/2010 int MangInt:: getMax() Viết chương trình Tóm tắt { int t=a[0]; nhập 1 mảng số nguyên int, for (int i=1; i
- 14/04/2010 BÀI TẬP TẠI LỚP 45 46 Xây dựng lớp SinhVien Thuộc tính: Mã SV (chuỗi kí tự) Họ tên (chuỗi kí tự). THANH YOU Năm sinh(số nguyên). Lớp (chuỗi kí tự). ĐCB (điểm cơ bản:số thực). ĐCN (điểm chuyên ngành: số thực). Hành vi: Nhập, Xuất. Tính tuổi (in ra màn hình tuổi, không cần trả về kết quả). Tính ĐTB (ĐTB=(ĐCB+ĐCN)/2, kết quả trả về là 1 số thực). GV: Võ Hồng Bảo Châu GV: Võ Hồng Bảo Châu OOP-CHƯƠNG 3-XÂY DỰNG LỚP OOP-CHƯƠNG 3-XÂY DỰNG LỚP 12
ADSENSE
CÓ THỂ BẠN MUỐN DOWNLOAD
Thêm tài liệu vào bộ sưu tập có sẵn:
Báo xấu
LAVA
AANETWORK
TRỢ GIÚP
HỖ TRỢ KHÁCH HÀNG
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn