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

Bài giảng Lập trình hướng đối tượng: Operator và others - Trần Phước Tuấn

Chia sẻ: Năm Tháng Tĩnh Lặng | Ngày: | Loại File: PDF | Số trang:10

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

Bài giảng Lập trình hướng đối tượng: Operator và others trình bày các nội dung: Tái định nghĩa hàm, tái định nghĩa toán tử, chuyển đổi kiểu, tái định nghĩa toán tử xuất nhập, khởi tạo ngầm định - gán ngầm định,...và một số nội dung khác.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Lập trình hướng đối tượng: Operator và others - Trần Phước Tuấn

  1. TÁI NH NGH A Tái nh ngh a hàm. L P TRÌNH Tái nh ngh a toán t . NG IT NG Chuy n i ki u. Tái nh ngh a toán t xu t () OPERATOR & OTHERS Tái nh ngh a toán t [], toán t () Tr n Ph c Tu n Kh i t o ng m nh - Gán ng m nh. tuantp@hcmup.edu.vn Tái nh ngh a toán t ++ và -- http://giaotrinh.tranphuoctuan.com Tái nh ngh a new và delete 8/30/2009 TPT - LTH T 2 Tái nh ngh a hàm Tái nh ngh a toán t nh ngh a các hàm cùng tên nh ngh a các phép toán trên i t ng. i s ph i khác nhau: Các phép toán có th tái nh ngh a: ng Ki u + - * ! ~ & ++ -- () -> ->* n Th ng new delete class Time { void main() { + - * / % & | ^ > //... int h, m, s; long GetTime (void); // s giây tính t a êm long t = GetTime(); // G i hàm ??? Nh = += -= /= %= &= |= ^= = void GetTime (int &hours, GetTime(h, m, s); // G i hàm ??? ng int &minutes, } int &seconds); == != < > = && || [] () , }; Các phép toán không th tái nh ngh a: Có th dùng is c nh. . .* :: ?: sizeof 8/30/2009 TPT - LTH T 3 8/30/2009 TPT - LTH T 4
  2. Tái nh ngh a toán t (tt) Tái nh ngh a toán t (tt) ng hàm thành viên: ng hàm c l p: th ng khai báo friend class Point { class Point { public: public: Point (int x, int y) { Point::x = x; Point::y = y; } Point (int x, int y) { Point::x = x; Point::y = y; } Point operator + (Point &p) { return Point(x + p.x,y + p.y); } friend Point operator + (Point &p, Point &q) Point operator - (Point &p) { return Point(x - p.x, y - p.y); } {return Point(p.x + q.x,p.y + q.y); } private: friend Point operator - (Point &p, Point &q) int x, y; {return Point(p.x - q.x,p.y - q.y); } }; private: Có 1 tham s Có 2 tham s int x, y; (N u là toán t nh ng) (N u là toán t nh ng) }; void main() { Point p1(10,20), p2(10,20); void main() { Point p3 = p1 + p2; Point p4 = p1 - p2; Point p1(10,20), p2(10,20); Point p5 = p3.operator + (p4); Point p6 = p3.operator – (p4); Point p3 = p1 + p2; Point p4 = p1 - p2; }; Point p5 =operator + (p3, p4); Point p6 = operator – (p3, p4); }; 8/30/2009 TPT - LTH T 5 8/30/2009 TPT - LTH T 6 Tái nh ngh a toán t (tt) Chuy n ki u i ti n l p t p h p (Set): Mu n th c hi n các phép c ng: #include // nh ngh a các toán t void main() { const maxCard = 100; ………………. enum Bool {false, true}; Point p1(10,20), p2(30,40), p3, p4, p5; ………………. class Set { p3 = p1 + p2; int main (void) public: p4 = p1 + 5; p5 = 5 + p1; { Set s1, s2, s3; Set(void) { card = 0; } }; s1.AddElem(10); s1.AddElem(20); friend Bool operator & (const int, Set&);// thanh vien ? s1.AddElem(30); s1.AddElem(40); friend Bool operator == (Set&, Set&); // bang ? s2.AddElem(30); s2.AddElem(50); friend Bool operator != (Set&, Set&); friend Set operator * (Set&, Set&); // khong bang ? // giao s2.AddElem(10); s2.AddElem(60); Có th nh ngh a thêm 2 toán t : cout
  3. Chuy n ki u (tt) Tái nh ngh a toán t xu t
  4. Tái nh ngh a toán t () Kh i t o ng m nh nh ngh a là hàm thành viên. c nh ngh a s n trong ngôn ng : class Matrix { double& Matrix::operator () VD: Point p1(10,20); Point p2 = p1; public: (const short row, const short col) Matrix (const short rows, const short cols); { gây ra l i (k t qu SAI) khi bên trong it ng static double dummy = 0.0; ~Matrix (void) {delete elems;} double& operator () (const short row, return (row >= 1 && row = 1 && col
  5. uÝ Tái nh ngh a toán t ++ & -- Ta ch n nh ngh a phép gán khi i Toán t ++ (ho c toán t --) có 2 lo i: Ti n t : ++n ng có nhu c u c p phát tài nguyên. u t : n++ Khi ó l p ph i có n class PhanSo { void main() { int tuso, mau so; PhanSo p1(3,4), p2; i. Ph ng th c thi t l p public: // ….. cout
  6. is m c nh i s thành viên n is c nh tính t bên ph i. Con tr *this: *this Là 1 thành viên n, có thu c tính là private. class Point { class Point { int xVal, yVal; int xVal, yVal; Tr i chính b n thân i t ng. public: public: Point (int x = 0, int y = 0); Point (int x = 0, int y = 0); //... Point (float x=0, float y=0); void Point:: Point OffsetPt (int x, int y) { void Point:: Point OffsetPt (int x, int y) { }; //... xVal += x; this->xVal += x; }; i ngh a yVal += y; this->yVal += y; void main() { h } } Point p1; // nh là ??? void main() { Point p2(10); // nh là ??? Point p2(1.6, 5.0); // nh là ??? Point p3(10,20); Point p3(10,20); // nh là ??? Point p4(, 20); // ????? Point p4; // ????? • Có nh ng tr ng h p s ng *this là th a (Ví d trên) ….. ….. • Tuy nhiên, có nh ng tr ng h p ph i s ng con tr *this } } 8/30/2009 TPT - LTH T 21 8/30/2009 TPT - LTH T 22 Toán t ph m vi Danh sách kh i t o thành viên Toán t :: dùng xác nh chính xác hàm ng ng vi c gán giá tr li u thành viên. (thu c tính) c truy xu t thu c l p nào. class Point { class Image { Câu l nh: pt.OffsetPt(2,2); int xVal, yVal; public: Image(const int w, const int h); public: private: pt.Point::OffsetPt(2,2); Point (int x, int y) { int width; xVal = x; int height; n thi t trong m t s tr ng h p: yVal = y; //... } }; Cách g i hàm trong th a k . // …………………… Image::Image(const int w, const int h) { width = w; Tên thành viên b che b i bi n c c b . }; height = h; //..................... Ví d : Point(int xVal, int yVal) { Point::Point (int x, int y) } Point::xVal = xVal; : xVal(x), yVal(y) Image::Image (const int w, const int h) Point::yVal = yVal; { } : width(w), height(h) } { //............... } 8/30/2009 TPT - LTH T 23 8/30/2009 TPT - LTH T 24
  7. Thành viên h ng Thành viên h ng ng d li u thành viên: ng i t ng: không c thay i giá tr . class Image { Hàm thành viên h ng: public: Image(const int w, const int h); private: Khai báo bình th ng c phép g i trên h ng i t ng. nh d li u thành viên const int width; const int height; Không c thay i giá tr li u thành viên. //... }; class Set { void main() { public: const Set s; class Image { Set(void){ card = 0; } s.AddElem(10); // SAI const int width = 256; Bool Member(const int) const; Kh i t o s.Member(10); // ok const int height = 168; void AddElem(const int); SAI //... //... }; }; } Bool Set::Member (const int elem) const Image::Image (const int w, const int h) Kh i t o ÚNG { //... : width(w), height(h) thông qua danh sách } { //................ } kh i t o thành viên 8/30/2009 TPT - LTH T 25 8/30/2009 TPT - LTH T 26 Thành viên t nh Thành viên t nh li u thành viên t nh: Hàm thành viên t nh: Dùng chung 1 b n sao chép (1 vùng nh ) chia s ng ng v i hàm toàn c c. cho t t c i t ng c a l p ó. ng: :: i thông qua: :: Th ng dùng ms ng i t ng. class Window { Khai báo // ………. nh ngh a class Window { static void PaintProc () { ….. } // danh sách liên k t t t c Window hàm thành // ……… viên t nh static Window *first; Khai báo }; // con tr i window k ti p Window *next; void main() { //... // ……………. }; Kh i t o Truy xu t li u Window::PainProc(); Window:: hàm thành Window *Window:: Window::first = &myWindow; thành viên viên t nh nh } // ……………. 8/30/2009 TPT - LTH T 27 8/30/2009 TPT - LTH T 28
  8. Thành viên tham chi u Thành viên là it ng c a 1 l p Tham chi u d li u thành viên: li u thành viên có th có ki u: class Image { li u (l p) chu n c a ngôn ng . int width; Khai báo bình th ng nh d li u thành viên p do ng i dùng nh ngh a (có th là chính l p ó). int height; int &widthRef; //... class Point { ……. }; }; class Rectangle { public: class Image { Rectangle (int left, int top, int right, int bottom); int width; //... Kh i t o cho các int height; private: li u thành viên Kh i t o Point topLeft; qua danh sách int &widthRef = width; SAI Point botRight; kh i t o thành viên //... }; }; Rectangle::Rectangle (int left, int top, int right, int bottom) Image::Image (const int w, const int h) Kh i t o ÚNG : topLeft(left,top), botRight(right,bottom) : widthRef(width) thông qua danh sách {} { //……………... } kh i t o thành viên 8/30/2009 TPT - LTH T 29 8/30/2009 TPT - LTH T 30 M ng các it ng M ng các it ng ng hàm xây d ng không i s (hàm ng d ng con tr : xây d ng m c nhiên - default constructor). p vùng nh : VD: Point pentagon[5]; VD: Point *pentagon = new Point[5]; ng b kh i t o m ng: Thu h i vùng nh : delete[] pentagon; VD: Point triangle[3] = delete pentagon; // Thu h i vùng nh u { Point(4,8), Point(10,20), Point(35,15) }; Ng n g n: class Polygon { public: Không c n bi t Set s[4] = { 10, 20, 30, 40 }; //... kích th c m ng. ng ng v i: private: Point *vertices; // các nh Set s[4] = { Set(10), Set(20), Set(30), Set(40) }; int nVertices; // s các nh }; 8/30/2009 TPT - LTH T 31 8/30/2009 TPT - LTH T 32
  9. Ph m vi l p Ph m vi l p Thành viên trong 1 l p: p toàn c c: i a s p trong C++. Che các th c th trùng tên trong ph m vi. p l ng nhau: p ch a ng l p. // ……… p c c b : trong 1 hàm ho c 1 kh i. int fork (void); // fork h th ng class Process { class Rectangle { // L p l ng nhau void Render (Image &i) int fork (void); // fork thành viên public: { fork thành viên Rectangle (int, int, int, int); class ColorTable { //... che i fork toàn c c //.. public: }; trong ph m vi l p private: ColorTable () { /* ... */ } Process class Point { AddEntry (int r, int g, int b) public: { /* ... */ } // ……… Point(int a, int b) { … } //... int Process::func1 (void) private: int x, y; }; { int x = fork(); // g i fork c c b ColorTable colors; }; int pid = ::fork(); // g i hàm fork h th ng Point topLeft, botRight; //... //... }; } } Rectangle::Point pt(1,1); // sd ngoài ColorTable ct; // SAI 8/30/2009 TPT - LTH T 33 8/30/2009 TPT - LTH T 34 C u trúc và h p C u trúc và h p u trúc (structure): p (union): t ngu n t ngôn ng C. t c thành viên ánh x n cùng 1 a ch bên ng ng v i class i các thu c tính là public. trong i t ng chính nó (không liên ti p). ng nh class. Kích th c = kích th c c a d li u l n nh t. union Value { class Object { struct Point { class Point { long integer; private: Point (int, int); public: double real; enum ObjType {intObj, realObj, Point(int, int); char *string; strObj, listObj}; void OffsetPt(int, int); void OffsetPt(int, int); Pair list; ObjType type; // ki u i t ng int x, y; int x, y; //... Value val; // giá tr a it ng }; }; }; //... }; class Pair { Point p = { 10, 20 }; Có th kh i t o d ng này Value *head; Value *tail; u không có nh ngh a Kích th c c a Value là //... hàm xây d ng }; 8 bytes = sizeof(double) 8/30/2009 TPT - LTH T 35 8/30/2009 TPT - LTH T 36
  10. Các tr ng bit u khi n i t ng c bit. VD: Truy xu t các bit trong header c a gói tin. typedef unsigned int Bit; Bit class Packet { Bit type : 2; // r ng 2 bit Bit acknowledge : 1; // r ng 1 bit Bit channel : 4; // r ng 4 bit Bit sequenceNo : 4; // r ng 4 bit Bit moreData : 1; // r ng 1 bit //... }; // ………… enum PacketType { dataPack, controlPack, Packet p; supervisoryPack }; p.type = controlPack; enum Bool { false, true }; p.acknowledge = true; 8/30/2009 TPT - LTH T 37 8/30/2009 TPT - LTH T 38
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

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