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
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 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
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 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