18
Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 1 TÁI ĐỊNH NGHĨA TÁI ĐỊNH NGHĨA CHƯƠNG 8: CHƯƠNG 8: (OVERLOADING) (OVERLOADING) Bộ môn Hệ Thống Máy Tính và Truyền Thông Khoa Công Nghệ Thông Tin và Truyền Thông Đại học Cần Thơ

Lesson 08

  • Upload
    reno-tk

  • View
    214

  • Download
    2

Embed Size (px)

DESCRIPTION

C++

Citation preview

  • TI NH NGHAB mn H Thng My Tnh v Truyn ThngKhoa Cng Ngh Thng Tin v Truyn Thngi hc Cn Th CHNG 8:(OVERLOADING)

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • Ni dungTi nh ngha hm.Ti nh ngha ton t.Chuyn i kiu.Ti nh ngha ton t xut ()Ti nh ngha ton t [], ton t ()Khi to ngm nh - Gn ngm nh.Ti nh ngha ton t ++ v --Ti nh ngha new v deleteChng 8

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • Ti nh ngha hmnh ngha cc hm cng tni s phi khc nhau:class Time { //... long GetTime (void); // s giy tnh t na m void GetTime (int &hours, int &minutes, int &seconds);}; S lng Th t KiuC th dng i s mc nh.void main() { int h, m, s; long t = GetTime(); // Gi hm ??? GetTime(h, m, s); // Gi hm ???}Chng 8

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • Ti nh ngha ton tnh ngha cc php ton trn i tng.Cc php ton c th ti nh ngha:Cc php ton khng th ti nh ngha:..*::?:sizeof Chng 8

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • Ti nh ngha ton t (tt)Bng hm thnh vin:class Point { public:Point (int x, int y) { Point::x = x; Point::y = y; }Point operator + (Point &p){ return Point(x + p.x,y + p.y); }Point operator - (Point &p){ return Point(x - p.x, y - p.y); } private:int x, y;};void main() { Point p1(10,20), p2(10,20); Point p3 = p1 + p2; Point p4 = p1 - p2; Point p5 = p3.operator + (p4); Point p6 = p3.operator (p4);};C 1 tham s(Nu l ton t nh hng)Chng 8

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • Ti nh ngha ton t (tt)Bng hm c lp: thng khai bo friendclass Point { public:Point (int x, int y) { Point::x = x; Point::y = y; }friend Point operator + (Point &p, Point &q){return Point(p.x + q.x,p.y + q.y); }friend Point operator - (Point &p, Point &q) {return Point(p.x - q.x,p.y - q.y); } private:int x, y;};void main() { Point p1(10,20), p2(10,20); Point p3 = p1 + p2; Point p4 = p1 - p2; Point p5 =operator + (p3, p4); Point p6 = operator (p3, p4);};C 2 tham s(Nu l ton t nh hng)Chng 8

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • Ti nh ngha ton t (tt)Ci tin lp tp hp (Set):#include constmaxCard = 100;enumBool {false, true};class Set { public: Set(void) { card = 0; } friend Bool operator & (const int, Set&);// thanh vien ? friend Bool operator == (Set&, Set&); // bang ? friend Bool operator != (Set&, Set&); // khong bang ? friend Set operator * (Set&, Set&); // giao friend Set operator + (Set&, Set&); // hop //... void AddElem(const int elem); void Copy (Set &set); void Print (void); private: int elems[maxCard]; int card;}; // nh ngha cc ton t..int main (void){ Sets1, s2, s3; s1.AddElem(10); s1.AddElem(20); s1.AddElem(30); s1.AddElem(40); s2.AddElem(30); s2.AddElem(50); s2.AddElem(10); s2.AddElem(60); cout
  • Chuyn kiuMun thc hin cc php cng:void main() { Point p1(10,20), p2(30,40), p3, p4, p5; p3 = p1 + p2; p4 = p1 + 5; p5 = 5 + p1;};C th nh ngha thm 2 ton t:class Point {//...friend Point operator + (Point, Point);friend Point operator + (int, Point);friend Point operator + (Point, int);};Chng 8

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • Chuyn kiu (tt)void main() { Point p1(10,20), p2(30,40), p3, p4, p5; p3 = p1 + p2; p4 = p1 + 5; // tng ng p1 + Point(5) p5 = 5 + p1; // tng ng Point(5) + p1 }class Point { //... Point (int x) { Point::x = Point::y = x; } friend Point operator + (Point, Point); };Chuyn kiu5 Point(5)Chuyn i kiu: ngn ng nh ngha sn.nh ngha php chuyn i kiuChng 8

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • Ti nh ngha ton t xut
  • Ti nh ngha ton t nhp >>nh ngha hm ton cc:istream& operator >> (istream&, Class&);class Point { public: Point (int x=0, int y=0) { Point::x = x; Point::y = y; } friend istream& operator >> (istream& is, Point& p) { coutp.x; coutp.y; } // .. private: int x, y;};void main() { Point p1, p2; coutp1; coutp2; }Chng 8

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • Ti nh ngha ton t [ ]Thng thng xut ra gi tr ca 1 phn t ti v tr cho trc trong i tng.nh ngha l hm thnh vin.class StringVec { public:StringVec (const int dim);~StringVec ();char* operator [] (int);int add(char* );// .. private:char **elems; // cac phan tu int dim; // kich thuoc cua vectoint used; // vi tri hien tai };

    char* StringVec::operator [] (int i) { if ( i>=0 && i

  • Ti nh ngha ton t ()nh ngha l hm thnh vin.class Matrix { public: Matrix (const short rows, const short cols); ~Matrix (void){delete elems;} double& operator () (const short row, const short col); friend ostream& operator = 1 && row = 1 && col
  • Khi to ngm nhc nh ngha sn trong ngn ng:VD: Point p1(10,20); Point p2 = p1;S gy ra li (kt qu SAI) khi bn trong i tng c thnh phn d liu l con tr.VD: Matrix m(5,6); Matrix n = m;Li s xy ra do khi to ngm bng cch gn tng ng tng thnh phn.Chng 8

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • Khi to ngm nh (tt)Khi lp c thnh phn d liu con tr, phi nh ngha hm xy dng sao chpclass Point { int x, y; public: Point (int =0; int =0 ); // Khong can thiet DN Point (const Point& p) { x= p.x; y = p.y; } // ..};// class Matrix { //. Matrix(const Matrix&);};Matrix::Matrix (const Matrix &m) : rows(m.rows), cols(m.cols) { int n = rows * cols; elems = new double[n]; // cng kch thc for (register i = 0; i < n; ++i) // sao chp phn telems[i] = m.elems[i]; }Chng 8

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • Gn ngm nhc nh ngha sn trong ngn ng: Gn tng ng tng thnh phn. ng khi i tng khng c d liu con tr.VD: Point p1(10,20); Point p2; p2 = p1;Khi thnh phn d liu c con tr, bt buc phi nh ngha php gn = cho lp.class Matrix { //. Matrix& operator = (const Matrix &m) { if (rows == m.rows && cols == m.cols) { // phi khp int n = rows * cols; for (register i = 0; i < n; ++i) // sao chp cc phn t elems[i] = m.elems[i];} return *this; } };Hm thnh vinChng 8

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • Ti nh ngha ton t ++ & --Ton t ++ (hoc ton t --) c 2 loi: Tin t: ++n Hu t: n++class PhanSo { int tuso, mau so; public: // .. PhanSo(int=0 , int =1); friend PhanSo operator ++ (PhanSo&); friend PhanSo operator ++ (PhanSo&, int); };PhanSo operator ++ (PhanSo& p) { return (p = PhanSo(tuso+mauso, mauso));}PhanSo operator ++ (PhanSo& p, int x) { PhanSo p2 = PhanSo(tuso+mauso, mauso); return p2;}void main() { PhanSo p1(3,4), p2; cout
  • Ti nh ngha new & deleteHm new v delete mc nh ca ngn ng: Nu i tng kch thc nh, c th s gy ra qu nhiu khi nh => chm. Khng ng k khi i tng c kch thc ln.=> Ton t new v delete t c ti nh ngha.nh ngha theo dng hm thnh vin:class Point { public: //... void* operator new (size_t bytes); void operator delete (void *ptr, size_t bytes); private: int xVal, yVal;};void main() { Point *p = new Point(10,20); Point *ds = new Point[30]; // delete p; delete []ds;}Chng 8

    Khoa Cng Ngh Thng Tin - i Hc Cn Th