Bài giảng Lập trình hướng đối tượng: Class và Object - Trần Phước Tuấn
lượt xem 2
download
Bài giảng này trình bày một số nội dung như: Lớp và đối tượng (C++); thư viện hóa; lớp Set (tập hợp); thiết kế lớp; các phương thức/hàm đặt biệt; hàm bạn/lớp bạn. Mời các bạn cùng tham khảo để nắm bắt các nội dung chi tiết.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Lập trình hướng đối tượng: Class và Object - Trần Phước Tuấn
- N i dung 1. L p và và i ng nh ngh a: tên l p, thu c tính, ph ng th c Cài t ph ng th c m b o tính úng n c a d li u L P TRÌNH Các thành ph n, ph m vi truy c p NG IT NG 2. Th vi n hóa CLASS & OBJECT 3. M t ví ví d 4. Thi t k l p Xác nh thành ph n d li u Tr n Ph c Tu n Xác nh thành ph n x lý tuantp@hcmup.edu.vn 5. Các ph ng th c/hà c/hàm c bi t Constructor http://giaotrinh.tranphuoctuan.com Destructor 6. Hàm b n, l p b n 9/6/2009 T.P.TU N - LTH T 2 1. L p và i ng (C++) 1. L p và i ng (C++) p: ki u d li u tr u t ng. private Ví d : o ra protected i t ng public class Point { thu c l p ct class TÊNL P int xVal, yVal; void main() { Point TÊN L P i [: L PCHA ] public: Point pt; ng void SetPt (int, int); { : Khai báo void OffsetPt (int, int); pt.SetPt(10,20); li u DataType1 memberdata1; p pt.OffsetPt(2,2); thành viên }; i hàm DataType2 memberdata2; …….. void Point::SetPt Point (int x, int y) { trên ……………. xVal = x; i t ng < Quy n truy xu t > : nh ngh a yVal = y; p các Hàm memberFunction1(); các hàm } pt.xVal = 10; // úng hay sai? thao tác thành viên memberFunction2(); thành viên void Point::OffsetPt Point (int x, int y) { xVal += x; Point pt1, pt2, pt3; ………….. ………. yVal += y; }; } } 9/6/2009 T.P.TU N - LTH T 3 9/6/2009 T.P.TU N - LTH T 4
- 1. L p và i ng (C++) 1. L p và i ng it ng Tên l p i di n cho 1 it ng th c c a bài toán Các thu c tính it ng các thành ph n d li u al p Là ki u (khuôn) o ra it ng Các ph ng th c các thao tác (hàm) tác ng t i d li u c a i t ng 9/6/2009 T.P.TU N - LTH T 5 9/6/2009 T.P.TU N - LTH T 6 1. L p và it ng – Ví d void printStudent(Student s) { class Student cout
- prototype a ph ng th c class Student 1. L p và it ng - Ph ng th c { ... public: void main() Là hàm c thù v i t ng char name[30]; { c liên k t v i m t l it ng c th int id; Student s; void print(); cin >> s.name; Tác ng t i các thu c tính c i t ng }; cin >> s.id; s.print(); void Student::print() } { cout
- date.cpp: 1. L p và it ng #include ”date.h” Date.h: bool Date::set(int yy, int mm, int dd) class Date { { // ki m tra tính h p l a tham s ... public: } myCalendar.cpp: int y, m, d; #include ”date.h”; void main() bool set(int yy,int mm,int dd); { }; Date d1, d2; d1.set(2000, 13, 32); d2.set(2001, 2, 29); } 9/6/2009 T.P.TU N - LTH T 13 9/6/2009 T.P.TU N - LTH T 14 1. L p và it ng 1. L p và it ng Gi i pháp myCalendar.cpp: #include ”date.h”; Không cho truy c p tr c ti n các void main() thu c tính { ch có các ph ng th c c a chính it ng Date d1, d2; thao tác c lên các thu c tính u truy c p tr c d1.y = 2001; ti n các thu c tính thì v n không Truy v n và c p nh t thu c tính thông qua d1.m = 2; ki m soát c các ph ng th c xác nh d1.d = 29; ... giao di n th c s al i t ng } ki m soát tính h p l khi thay i giá tr m b o tính úng n c a d li u 9/6/2009 T.P.TU N - LTH T 15 9/6/2009 T.P.TU N - LTH T 16
- Date.h: 1. L p và it ng 1. L p và it ng date.cpp: class Date #include ”date.h”; { bool Date::set(int yy, int mm, int dd) public: int getYear(); { int getMonth(); // ki m tra tính h p l a tham s int getDay(); ... Giao di n bool set(int, int, int); } void print(); int Date::getYear() void copyTo(Date&); bool equalTo(Date&); { private: return y; int y, m, d; óng gói/che d u thông tin } óng gói/che d u thông tin }; ... 9/6/2009 T.P.TU N - LTH T 17 9/6/2009 T.P.TU N - LTH T 18 1. L p và it ng 1. L p và it ng myCalendar.cpp: óng gói i t ng, che d u các thông tin #include ”date.h”; i t i, truy c i t ng thông qua void main() óng gói/che d u thông tin ph ng th c (giaogiao di n) xác nh { Date d1, d2; m b o tính úng nc it ng if (d1.set(2000, 1, 31)) Ng i l p trình ng d ng ch n bi t giao cout
- 1. L p và it ng Ph m vi truy c p 1. L p và it ng Ph m vi truy c p i Truy Các thành ph n public C p TRONG L P NGOÀ NGOÀI Ph ng th c trong l p B N Thà Thành L P K TH A L P Ph ng th c p k th a Ph n Ph ng th c ngoài l p Các thành ph n protected private x x Ph ng th c trong l p Ph ng th c p k th a protected x x x Các thành ph n private Ph ng th c trong l p public x x x X 9/6/2009 T.P.TU N - LTH T 21 9/6/2009 T.P.TU N - LTH T 22 Date.h: 2. Th vi n hóa #if !defined (_DATE_H__) #define _DATE_H__ //khai báo th vi n Các l p c c xây d ng ng #include c trong nhi u ch ng trình khác class Date nhau { Phân tách mã ngu nh ngh a l p và mã private: int y, m, d; ngu n s ng l p public: Phân tách giao di n a l p và cài t a void set(int yy, int mm, int dd); void print(); p }; #endif 9/6/2009 T.P.TU N - LTH T 23 9/6/2009 T.P.TU N - LTH T 24
- Date.cpp: myApp.cpp: #include ”Date.h” #include #include ”Date.h” void Date::set(int yy, int mm, int dd) { void main() y = yy; m = mm; d = dd; { } Date ngaysinh; void Date::print() ngaysinh.set(2007, 3, 8); { ngaysinh.print(); cout
- Th c hành 3. Thi t k L p o l p Student a. Xác nh thành ph n d li u có các thu c tính tên, mã sinh viên, m b. Xác nh thành ph n x lý trung bình Nhóm kh i t o ph ng th c print() in thông tin Nhóm truy v n thông tin Vi t ch ng trình ng d ng nh p Nhóm c p nh t thông tin thông tin cho m t s sinh viên, p x p l i Nhóm x lý tính toán theo th m trung bình t cao xu ng Nhóm ki m tra ràng bu c th p. 9/6/2009 T.P.TU N - LTH T 29 9/6/2009 T.P.TU N - LTH T 30 3. Thi t k L p 3. Thi t k L p Nhóm kh i t o Ta c n bi t nh ng thông tin gì v t i Xác nh tr ng thái ban u cho it ng ng thu c l p này Ví d : KhoiTaoPS (tu=0,mau=1) KhoiTaoSV (ten=“”,…) Thành ph n d li u th ng c t DSLK (Head=Tail=NULL) …. trong ph m vi protected hay private Thành ph n d li u Thà Thành ph n x lý 9/6/2009 T.P.TU N - LTH T 31 9/6/2009 T.P.TU N - LTH T 32
- 3. Thi t k L p 3. Thi t k L p Nhóm truy v n thông tin Các ph ng th c truy v n (query method) là các Nhóm truy v n thông tin ph ng th c dùng i v giá tr a các thành i v i các truy v n n gi n, quy c t tên viên d li u c a m t i t ng ph ngth c: ti n t “get”, ti p theo là tên c a thành Có nhi u lo i câu h i truy v n có th : viên truy v n n gi n (“giá tr a x là bao nhiêu?”) int getX(); truy v n u ki n (“thành viên x có l n h n 10 int getSize(); không?”) Các lo i truy v n khác nên có tên có tính mô t truy v n d n xu t (“t ng giá tr a các thành viên x và y là bao nhiêu?”) Truy v n u ki n nên có ti n t “is” c m quan tr ng c a ph ng th c truy v n là nó không nên thay i tr ng thái hi n t i c a i ng 9/6/2009 T.P.TU N - LTH T 33 9/6/2009 T.P.TU N - LTH T 34 3. Thi t k L p 3. Thi t k L p p nh t thông tin Truy v n và c p nh t Ng c l i v i truy v n thông tin, các ph ng u các ph ng th c get/set ch có nhi m v th c c p nh t th ng thay i tr ng thái c a cho ta c và ghi giá tr cho các thành viên d i t ng b ng cách s a i m t ho c nhi u li u, quy nh các thành viên private c ích thành viên d li u c a i t ng ó i gì? Ngoài vi c b o v các nguyên t c óng gói, ta ng n gi n nh t c a các ph ng th c còn c n ki m tra xem giá tr i cho thành viên p nh t là gán m t giá tr nào ó cho m t li u có h p l hay không. thành viên d li u ng ph ng th c c p nh t cho phép ta th c i v i d ng c p nh t n gi n, quy c t hi n vi c ki m tra tr c khi th c s thay i giá tên: dùng ti n t “set” kèm theo tên thành viên tr a thành viên. ns a Cho phép ch các d li u có th truy v n hay thay int setX(int); i c truy c p n. 9/6/2009 T.P.TU N - LTH T 35 9/6/2009 T.P.TU N - LTH T 36
- 3. Thi t k L p Ví d 3. Thi t k L p Nhóm x lý tính toán int Student::setGPA(double newGPA) { Xác nh tr ng thái m i cho i t ng ho c if ((newGPA >= 0.0) && (newGPA gpa = newGPA; Ví d : return 0; // Return 0 to indicate success } NhanVien.TinhLuong() else SinhVien.XepLoai() { Nghiem PhuongTrinh.GiaiPhuongTrinh() return -1; // Return -1 to indicate failure Giatri PhanSo.TinhGiaTri() } … } Thà Thành ph n x lý 9/6/2009 T.P.TU N - LTH T 37 9/6/2009 T.P.TU N - LTH T 38 3. Thi t k L p 3. Thi t k L p Bài t p Nhóm ki m tra ràng bu c Ki m tra tính úng ng c a d li u 1. sung vào l p Date các ph ng th c Ví d : thu c các nhóm trên (m i nhóm ít nh t Ngày tháng n m h p l t ph ng th c) Ngày vào làm và ngày sinh 2. Cài t trên máy l p t p h p (Set) và us a phân s ph i khác 0 vi t ch ng trình nh p vào 2 t p h p s ms a sinh viên >=0 và
- 4. Các ph ng th c/hàm c bi t 4. Các ph ng th c/hàm c bi t Ph ng th c bi cg it ng ngay Ph ng th c kh i t o - Constructor sau khi i t ng c t o ra cg it ng, ng i dùng không cg il i Ph ng th c h y - Destructor không tr i k t qu Có hình th c tên trùng v i tên l p Th ng làm nhi m v kh i t o d li u cho i ng Có th khai báo trùng Constructor 9/6/2009 T.P.TU N - LTH T 41 9/6/2009 T.P.TU N - LTH T 42 Date.h: date.cpp: #include ”date.h”; class Date { Constructor public: Date::Date() Date(); { Date(int, int, int); Constructor int getYear(); y = 2000; int getMonth(); m = 1; int getDay(); d = 1; bool set(int, int, int); } void set(const Date&); void print(); void copyTo(Date&); Date::Date(int yy, int mm, int dd) bool equalTo(const Date&); { private: int y, m, d; set(yy, mm, dd); }; } ... 9/6/2009 T.P.TU N - LTH T 43 9/6/2009 T.P.TU N - LTH T 44
- myCalendar.cpp: Hàm xây d ng (t o) #include ”date.h”; Dùng nh ngh a và kh i t o i t ng cùng 1 lúc. ... Có tên trùng v i tên l p, không có ki u tr . void main() Constructor Không g i tr c ti p, s ct ng g i khi kh i t o t. { Gán giá giá tr , c p vù vùng nh cho các d li u thàthành viên. viên Date d1; class Point { void main() { Date womenDay(2007, 3, 8); int xVal, yVal; Point pt1(10,20); Date d[100]; public: pt1.OffsetPt(2,2); Point (int x, int y) { …….. d1.print(); xVal = x; yVal = y; // Khai báo nào là sai ? } Point pt2; womenDay.print(); Point pt3(); void OffsetPt (int x, int y) { Point pt4 = Point(5,5); xVal += x; yVal += y; } Point pt5 = new Point(5,5); } ………. }; } 9/6/2009 T.P.TU N - LTH T 45 9/6/2009 T.P.TU N - LTH T 46 Hàm xây d ng (t o) 4. Các ph ng th c/hàm c bi t class Set { m class Point { o private: int xVal, yVal; int *elems; n Ph ng th c bi cg it ng ngay public: Point () // Hàm xây d ng m c nhiên int maxCard; int card; tr c khi i t ng c gi i phóng kh i b { xVal = 0; yVal = 0; } Point (int x, int y) { public: Set(const int size) { nh xVal = x; yVal = y; } elems = new int[size]; maxCard = size; Không có tham s , không có ki u tr i, không Point (float len, float angle) { xVal = (int) (len * cos(angle)); card = 0; nh ngh a trùng } } yVal = (int) (len * sin(angle)); …………… Th ng c dùng vào m ích c bi t là }; Không c n void OffsetPt (int , int ); … void main() { ph i nh n d p các tài nguyên mà i t ng s ng }; Set s1(100); void main() { Set s2(20); i hàm gi i phóng b nh ng Point p1; Set s3(1000); … EmptySet() Point p2(10,20); } khi kh i t o óng t p Destructor Point p3(60.3, 3.14); } 9/6/2009 T.P.TU N - LTH T 47 9/6/2009 T.P.TU N - LTH T 48
- Date.h: date.cpp: #include ”date.h”; class Date { Destructor Date::Date() public: { Date(); Destructor Date(int, int, int); y = 2000; int getYear(); m = 1; int getMonth(); d = 1; int getDay(); } bool set(int, int, int); ... ~Date(); Date::~Date() private: { int y, m, d; cerr
- 5. Hàm b n, l p b n 5. Hàm b n, l p b n p Các Hàm SetToReal Nguyên dùng chuy n Cách 1: Khai báo hàm thành viên c a l p p s nguyên thành t p s th c IntSet là b n (friend friend) c a l p RealSet. class IntSet { public: void IntSet::SetToReal (RealSet &set) { class IntSet { //... set.card = card; public: Gi nguyên nh private: for (register i = 0; i < card; ++i) //... ngh a c a l p IntSet int elems[maxCard]; set.elems[i] = (float) elems[i]; private: int card; } int elems[maxCard]; }; int card; class RealSet { }; public: Làm th nào class RealSet { //... th c hi n c public: p Các private: vi c truy xu t Thêm dòng khai báo //... Th c float elems[maxCard]; n thành viên Friend cho friend void IntSet::SetToReal SetToReal (RealSet&); int card; Private ? hàm thành viên private: }; SetToReal float elems[maxCard]; int card; }; 9/6/2009 T.P.TU N - LTH T 53 9/6/2009 T.P.TU N - LTH T 54 5. Hàm b n, l p b n 5. Hàm b n, l p b n Cách 2: Hàm b n: Chuy n hàm SetToReal ra ngoài ( c l p). Có quy n truy xu t n t t c các d li u và Khai báo hàm ó là b n a c 2 l p. hàm thành viên (protected + private) c a 1 l p. class IntSet { public: void SetToReal (IntSet& iSet, L p b n: //... RealSet& rSet ) friend void SetToReal (IntSet &, RealSet&); private: { t c các hàm trong l p b n: là hàm b n. int elems[maxCard]; rSet.card = iSet.card; int card; for (int i = 0; i < iSet.card; ++i) }; rSet.elems[i] = class RealSet { class A; class IntSet { ……….. } (float) iSet.elems[i]; public: } class B { // ………. class RealSet { // ………. //... friend void SetToReal (IntSet &, RealSet&); friend class A; friend class IntSet; private: Hàm c l p }; }; float elems[maxCard]; là b n(friend) int card; a c 2 l p. }; 9/6/2009 T.P.TU N - LTH T 55 9/6/2009 T.P.TU N - LTH T 56
- 5. Hàm b n, l p b n 5. Hàm b n, l p b n void HoanVi(CDate &a,CDate &b) class CDate CStudent is a class { { class CStudent int tam; friend CStudent; // friend class { tam=a.d;a.d=b.d;b.d=tam; private: tam=a.m;a.m=b.m;b.m=tam; private: int id; tam=a.y;a.y=b.y;b.y=tam; int d,m,y; CDate ns; } public: public: void setns(int d,int m,int y) friend void HoanVi(CDate &a,CDate &b); { //friend function ns.d=d; ns.m=m; ns.y=y; } }; }; 9/6/2009 T.P.TU N - LTH T 57 9/6/2009 T.P.TU N - LTH T 58 9/6/2009 T.P.TU N - LTH T 59
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - TS. Trần Công Án
57 p | 89 | 13
-
Bài giảng Lập trình hướng đối tượng: Chương 2 - Nguyễn Sơn Hoàng Quốc, ThS. Nguyễn Tấn Trần Minh Khang
14 p | 174 | 12
-
Bài giảng Lập trình hướng đối tượng - Chương 1: Phương pháp lập trình hướng đối tượng
9 p | 141 | 9
-
Bài giảng Lập trình hướng đối tượng C++ - Chương 2: Lập trình hướng đối tượng
53 p | 46 | 8
-
Bài giảng Lập trình hướng đối tượng (dùng Java): Chương 1 - Trần Minh Thái (2017)
55 p | 80 | 8
-
Bài giảng Lập trình hướng đối tượng - Bài 1: Tổng quan lập trình hướng đối tượng
53 p | 120 | 8
-
Bài giảng Lập trình hướng đối tượng (Dùng C#): Chương 2 - Trần Minh Thái
35 p | 104 | 8
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - Trần Thị Anh Thi
7 p | 197 | 7
-
Bài giảng Lập trình hướng đối tượng 1: Chương 1 - ThS. Thái Kim Phụng
39 p | 101 | 7
-
Bài giảng Lập trình hướng đối tượng: Bài 1 - ThS. Trịnh Thành Trung
53 p | 89 | 7
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - Trần Minh Thái
40 p | 116 | 6
-
Bài giảng Lập trình hướng đối tượng – Bài 01: Tổng quan về OOP
47 p | 63 | 5
-
Bài giảng Lập trình hướng đối tượng (dùng JAVA): Chương 1 - Trần Minh Thái
40 p | 99 | 5
-
Bài giảng Lập trình hướng đối tượng và C++: Chương 1
15 p | 105 | 4
-
Bài giảng Lập trình hướng đối tượng: Nhập môn - Trần Phước Tuấn
15 p | 139 | 4
-
Bài giảng Lập trình hướng đối tượng: Bài 1 - Tổng quan về lập trình hướng đối tượng
47 p | 11 | 4
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - Các khái niệm cơ bản trong lập trình hướng đối tượng
36 p | 16 | 3
-
Bài giảng Lập trình hướng đối tượng: Bài 1 - Nguyễn Khanh Văn
0 p | 83 | 2
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