Top Banner
Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ 1 THỪA KẾ THỪA KẾ CHƯƠNG 9: CHƯƠNG 9: (INHERITANCE) (INHERITANCE) 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ơ
24

Lesson 09

Oct 03, 2015

Download

Documents

Reno Tk

C++
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • THA KB mn H Thng My Tnh v Truyn ThngKhoa Cng Ngh Thng Tin v Truyn Thngi hc Cn Th CHNG 9:(INHERITANCE)

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • Ni dungKhi nimLp dn xut n ginK hiu cc th bcHm xy dng v hm hyThnh vin lp c bo vLp c s ring, chung v c bo va tha k - S m hHm o - Lp c s oChuyn kiuCc ton t c ti nh nghaChng 9

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • Khi nimK tha t cc lp c t trc.ch li: c th tn dng li Cc thuc tnh chung Cc hm c thao tc tng tChng 9LP CHA(Super class)LP CON(Sub class)Lp c s(Base class)Lp dn xut(Derived class)STUDENTCIT_STUDENT

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • V d minh haChng 9#include #include class Contact { private: char *name; // ten doi tac char *address; // dia chi doi tac char *tel; // so dien thoai public: Contact (const char *name, const char *address, const char *tel); ~Contact (); const char* Name () const { return name;} const char* Address() const { return address;} const char* Tel() const{ return tel;} friend ostream& operator
  • V d minh ha (tt)Chng 9class SmartDir : public ContactDir { private: char*recent;// ten duoc tim gan nhat public: SmartDir(const int max) : ContactDir(max) { recent = 0; } Contact* Recent (void); Contact* Find (const char *name); // . }; Contact* SmartDir::Recent (void) { return recent == 0 ? 0 : ContactDir::Find(recent);}Contact* SmartDir::Find (const char *name) { Contact *c = ContactDir::Find(name); if (c != 0) recent = (char*) c->Name(); return c;}K hiuTha k

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • V d (tt) - m t trong b nhChng 9**contactsdirSizemaxSize**contactsdirSizemaxSize*recentContact 1Contact 2Contact iContact 1Contact 2Contact iContactDirSmartDir

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • Hm xy dng v hm hyTrong tha k, khi khi to i tng: Hm xy dng ca lp cha s c gi trc Sau mi l hm xy dng ca lp con.Trong tha k, khi hy b i tng: Hm hy ca lp con s c gi trc Sau mi l hm hy ca lp cha.Chng 9ABC

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • Hm xy dng v hm hy (tt)Chng 9class SmartDir : public ContactDir { private: char*recent;// ten duoc tim gan nhat public: SmartDir(const int max) : ContactDir(max) { recent = 0; } SmartDir(const SmartDir& sd): ContactDir(sd) { recent = 0; } ~SmartDir() { delete recent; } // . }; Gi hm xy dng ca lp chaThu hi vng nhca con tr thnh vin ca lp con nu cp vng nh trong hm xy dng.

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • Thnh vin lp c bo v Tha k: C tt c cc d liu v hm thnh vin. Khng c truy xut n thnh vin private. Thuc tnh truy cp protected: Cho php lp con truy xut.Chng 9class ContactDir {//... protected: int Lookup (const char *name); Contact **contacts; // ds cac doi tac int dirSize; // kich thuoc hien tai int maxSize; // kich thuoc toi da}; class Foo { public:// cac thanh vien chung... private:// cac thanh vien rieng... protected:// cac thanh vien duoc bao ve... public:// cac thanh vien chung nua... protected:// cac thanh vien duoc bao ve nua...};

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • Lp c s ring, chung v c bo vChng 9class A { private: int x;void Fx (void); public:int y;void Fy (void); protected:int z;void Fz (void);};class B : A { // Tha k dng private . };class C : private A { // A l lp c s ring ca B };class D : public A { // A l lp c s chung ca C };class E : protected A { // A: lp c s c bo v . };

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • a tha kChng 9class Window { public: Window (Rect &); ~Window (void); //...};class Menu : public OptionList, public Window { public: Menu (int n, Rect &bounds); ~Menu (void); //...};

    Menu::Menu (int n, Rect &bounds) : OptionList(n), Window(bounds) { /* ... */ }class OptionList { public: OptionList (int n); ~OptionList (); //...};

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • S m h trong a tha kChng 9class OptionList { public: // void Highlight (int part); };class Window { public: // void Highlight (int part); };class Menu : public OptionList, public Window { . };void main() { Menu m1(.); m1.Highlight(10); .}Gi hm ca lp no ?void main() { Menu m1(.); m1.OptionList::Highlight(10); m1.Window::Highlight(20); .}Ch r hm ca lp noHm cng tn

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • Chuyn kiuC sn 1 php chuyn kiu khng tng minh: i tng lp cha = i tng lp con; p dng cho c i tng, tham chiu v con tr.Chng 9Khng c thc hin php gn ngc: i tng lp con = i tng lp cha;// SAIMenu m(n, bounds);Window win = m;Window &wRef = m;Window *wPtr = &menu;class Menu : public OptionList, public Window { public: //... Menu (Window&);};Nu mun thc hinphi t nh ngha php p kiu

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • Hm o Lin kt tnh (static binding): Xc nh khi bin dch chng trnh. Dng hm thnh vin. Gi hm ca lp c s (lp cha).Chng 9class ContactDir { //... public: int Lookup (const char *name); //...};class SortedDir : public ContactDir { public: SortedDir(const int max) : ContactDir(max) {} int Lookup(const char *name);}; void main() { ContactDir c1(10); SortedDir *p; p = &c1; cout
  • Hm o (tt)Lin kt ng (dynamic binding) Xc nh khi thc thi chng trnh. Dng hm o (virtual function). Gi hm ca lp dn xut (lp con). Th hin tnh a hnh ca OOP.Chng 9class ContactDir { //... public: virtual int Lookup (const char *name);};class SortedDir : public ContactDir { //. public: int Lookup(const char *name);}; void main() { ContactDir c1(10); SortedDir *p1; p1 = &c1; cout
  • Lp c s oChng 9class OptionList : public Widget, List { /*...*/ };class Window : public Widget, Port { /*...*/ };class Menu : public OptionList, public Window { /*...*/ };S m h - d tha d liu

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • Lp c s o (tt)Cch x l: dng lp c s o.Chng 9class OptionList : virtual public Widget, public List { /*...*/ };class Window : virtual public Widget, public Port { /*...*/ };class Menu : public OptionList, public Window { /*...*/ };Menu::Menu (int n, Rect &bounds) : Widget(bounds), OptionList(n), Window(bounds) { //... }Ch c 1 i tng Widget

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • Cc ton t c ti nh nghaTng t nh ti nh ngha hm thnh vin: Che giu i ton t ca lp c s. Hm xy dng sao chp: Y::Y (const Y&) Php gn: Y& Y::operator = (const Y&)Nu khng nh ngha, s t ng c hm xy dng sao chp v php gn do ngn ng to ra.=> SAI khi c con tr thnh vin.Cn thn vi ton t new v delete.Chng 9

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • B SUNGMT S VN KHC CN T TM HIU THM

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • StreamNhp xut thng qua Stream (Dng): Tng quan v Stream. i tng nhp xut chun. File. Nhp xut vi File i tng. Ti nh ngha ton t > vi File.B sung

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • TemplateThit k lp theo Template (mu): Th no l Template. Hm template. Lp template. Gii thiu v STL (Standard Template Library).B sung

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • ExceptionException (Ngoi l): Ngoi l l g? xut ngoi l - Nm bt ngoi l. Ngoi l trong C++. C php bt ngoi l trong C++. S dng ngoi l vi Template.B sung

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • ContainerContainer (Lp vt cha): Container l g?Ti sao li cn Container. Container trong C++. Mt s Container trong 1 phin bn ca C++.B sung

    Khoa Cng Ngh Thng Tin - i Hc Cn Th

  • CU HI?Kt thc chng trnh

    Khoa Cng Ngh Thng Tin - i Hc Cn Th