Удамшлын хэрэгцээ                                             class Rectangle{       Тахир шугам                          ...
Удамшлын хэрэгцээ                                    class Polygon{        Тахир шугам                     protected:     ...
Удамшлын хэрэгцээ                                    class Polygon{                                        protected:     ...
Удамшлын хэрэгцээ                       x                               class Point{           Цэг         y          prot...
Удамшлын хэрэгцээ• Анхны классыг нэмэгдүүлэх         Тахир шугам                       Цэг  Тэгш өнцөгт     Гурвалжин     ...
Удамшил?Удамшил нь өмнө нь тодорхойлогдсон классаас шинэ класс үүсгэх арга  • Классыг өргөтгөх ( шинж чанарууд нэмэх)  • К...
Удамшсан классыг тодорхойлох• Syntax:  class DerivedClassName : access-level BaseClassName  үүнд   – access-level удамшлын...
Классын удамшил            Цэг                     class Point{                                       protected:          ...
Юу удамших вэ?• Зарчмын хувьд эх классын бүх гишүүд  удамшиж болох хэдий ч  – удамших зөвшөөрлөөс хамаарна                ...
Удамших гишүүнийг хянах        • Удамших гишүүнийг хянах          – класс зарлах үеийн          – удамшлын төрөл тодорхойл...
Удамших эрх                                Удамшлын төрөл                         private    protected    public Гишүүдийн...
Классын удамшилclass mother{                        class grandDaughter : public daughter {   protected: int mProc;       ...
Юу удамших вэ?• Зарчмын хувьд эх классын бүх гишүүд  удамшиж болох хэдий ч  – удамших зөвшөөрлөөс хамаарна• Гэхдээ дараах ...
Удамшлын байгуулагчийн дүрэм         эх классын байгуулагч, устгагч удамшсан         классын объект үүсэх бүрт дуудагдана ...
Удамшлын байгуулагчийн дүрэм    Аль аль байгуулагчийг дахин тодорхойлж     болно     DerivedClassCon ( derivedClass args )...
Өөрийн гишүүнийг утгатай               болгохУдамшсан классын байгуулагч        class Point{өөрийн гишүүнийг утгатай      ...
…  • Эх классын гишүүн функцийг хүү классад даран    тодорхойлж болно      – Эхтэйгээ адил гишүүн функцтэй байж болно.    ...
Хандах арга class Point{                                         class Circle : public Point{    protected:               ...
Дээрх бүгдийг жишээ классад нэгтгэвэл          • Time нь эх класс          • ExtTime нь public-р удамшсан Time       хүү. ...
класс Time –г тодорхойлох// SPECIFICATION FILE                                  ( time.h)class Time{ public :     void Set...
Классын интерфэйс диаграм              Time класс       Set                   Protected data:     Increment               ...
Удамшсан класс ExtTime// SPECIFICATION FILE                                        ( exttime.h)#include “time.h”enum ZoneT...
Классын интерфэйс диаграм              ExtTime класс      Set          Set Increment     Increment   Protected data:      ...
ExtTime-г зохион байгуулахDefault ConstructorExtTime :: ExtTime ( )            ExtTime et1;{    zone = EST ;}             ...
ExtTime-г зохион байгуулахӨөр нэг байгуулагч ExtTime :: ExtTime (int initH, int initM, int initS, ZoneType    initZone)   ...
ExtTime-г зохион байгуулах      void ExtTime :: Set (int h, int m, int s, ZoneType timeZone)      {         Time :: Set (h...
ExtTime-тай ажиллах#include “exttime.h”……int main(){     ExtTime    thisTime ( 8, 35, 0, PST ) ;     ExtTime    thatTime ;...
Нэгдсэн дүгнэлт• Удамшил нь байгаа төрлийг нарийвчлан  эсвэл өргөтгөн шинэ төрөл тодорхойлох  механизм.• Зарчмын хувьд бай...
Upcoming SlideShare
Loading in...5
×

Lecture3 охп удамшил

1,029
-1

Published on

ОХП классын удамшил

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,029
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
38
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Lecture3 охп удамшил

  1. 1. Удамшлын хэрэгцээ class Rectangle{ Тахир шугам private: int numVertices; float *xCoord, *yCoord; public:Тэгш өнцөгт void set(float *x, float *y, int nV); Гурвалжин float area(); }; class Polygon{ class Triangle{ private: private: int numVertices; int numVertices; float *xCoord, *yCoord; float *xCoord, *yCoord; public: public: void set(float *x, float *y, int nV); void set(float *x, float *y, int nV); float area(); }; 1 };
  2. 2. Удамшлын хэрэгцээ class Polygon{ Тахир шугам protected: int numVertices; float *xCoord, float *yCoord; public: void set(float *x, float *y, int nV);Тэгш өнцөгт }; Гурвалжин class Rectangle{ protected:class Rectangle : public Polygon{ int numVertices; public: float *xCoord, float *yCoord; float area(); public: void set(float *x, float *y, int nV);}; float area(); 2 };
  3. 3. Удамшлын хэрэгцээ class Polygon{ protected: Тахир шугам int numVertices; float *xCoord, float *yCoord; public: void set(float *x, float *y, int nV);Тэгш өнцөгт }; Гурвалжин class Triangle{ protected: class Triangle : public Polygon{ int numVertices; public: float *xCoord, float *yCoord; float area(); public: void set(float *x, float *y, int nV); }; float area(); 3 };
  4. 4. Удамшлын хэрэгцээ x class Point{ Цэг y protected: int x, y; public: Тойрог 3D-цэг void set (int a, int b); x x }; y y r zclass Circle : public Point{ class 3D-Point: public Point{ private: private: double r; int z;}; }; 4
  5. 5. Удамшлын хэрэгцээ• Анхны классыг нэмэгдүүлэх Тахир шугам Цэг Тэгш өнцөгт Гурвалжин Тойрог 3D-цэг• Анхны классыг нарийвчлах ComplexNumber real imag RealNumber ImaginaryNumber imag real 5
  6. 6. Удамшил?Удамшил нь өмнө нь тодорхойлогдсон классаас шинэ класс үүсгэх арга • Классыг өргөтгөх ( шинж чанарууд нэмэх) • Классыг дахин ашиглах( өөр классд хэрэглэх) • Классыг засварлах( гишүүн функцийг дахин тодорхойлж ) Үр дүнд нь: Санах ой ба хугацаа хэмнэх, код зохицол сайжирч хөгжүүлэлт хялбарчлагддаг 6
  7. 7. Удамшсан классыг тодорхойлох• Syntax: class DerivedClassName : access-level BaseClassName үүнд – access-level удамшлын хандалтын түвшинг тодорхойлно • private //default-р • public• Ямар ч класс эх класс байж болно – Иймд удамшсан класс өөр классын эх байж болно 7
  8. 8. Классын удамшил Цэг class Point{ protected: int x, y; 3D-цэг public: void set (int a, int b); }; Бөмбөлөг class 3D-Point : public Point{ class Sphere : public 3D-цэг{ private: private: double z; double r; …… …… }; };Цэг нь 3D-цэг-ийн эх класс харин 3D-цэг нь бөмбөлөгийн(Sphere) эх 8
  9. 9. Юу удамших вэ?• Зарчмын хувьд эх классын бүх гишүүд удамшиж болох хэдий ч – удамших зөвшөөрлөөс хамаарна 9
  10. 10. Удамших гишүүнийг хянах • Удамших гишүүнийг хянах – класс зарлах үеийн – удамшлын төрөл тодорхойлох class Point{ protected: int x, y; public: void set(int a, int b); }; class Circle : public Point{ …… }; 10
  11. 11. Удамших эрх Удамшлын төрөл private protected public Гишүүдийн хандалт private - - - protected private protected protected public private protected public• Эх классын protected, public гишүүд удамшина,• удамших төрлөөс хамааран гишүүдийн хандалт өөрчлөгдөнө 11
  12. 12. Классын удамшилclass mother{ class grandDaughter : public daughter { protected: int mProc; private: double gPriv; public: int mPubl; public: void gFoo ( ); private: int mPriv; };}; private/protected/public int main() {class daughter : --------- mother{ /*….*/ private: double dPriv; } public: void mFoo((); dFoo );};void daughter :: dFoo ( ){ mPriv = 10; //error mProc = 20; 12};
  13. 13. Юу удамших вэ?• Зарчмын хувьд эх классын бүх гишүүд удамшиж болох хэдий ч – удамших зөвшөөрлөөс хамаарна• Гэхдээ дараах функцууд удамшдаггүй – Байгуулагч ба устгагч – operator=() оператор гишүүн – найз функц эдгээр функцууд зөвхөн энэ класст 13 хамаарах тул
  14. 14. Удамшлын байгуулагчийн дүрэм эх классын байгуулагч, устгагч удамшсан классын объект үүсэх бүрт дуудагдана (ажиллана).class A { class B : public A public: { A() public: {cout<< “A:default”<<endl;} B (int a) A (int a) {cout<<“B”<<endl;} {cout<<“A:parameter”<<endl;} };}; output: A:default B test(1); B 14
  15. 15. Удамшлын байгуулагчийн дүрэм Аль аль байгуулагчийг дахин тодорхойлж болно DerivedClassCon ( derivedClass args ) : BaseClassCon ( baseClass args ) { DerivedClass constructor body }class A { class C : public A { public: public: A() C (int a) : A(a) {cout<< “A:default”<<endl;} {cout<<“C”<<endl;} A (int a) }; {cout<<“A:parameter”<<endl;}}; output: A:parameter C test(1); C 15
  16. 16. Өөрийн гишүүнийг утгатай болгохУдамшсан классын байгуулагч class Point{өөрийн гишүүнийг утгатай protected:болгохоос гадна эхээс ирсэн int x, y;гишүүнийг утгатай болгоно. public: x void set(int a, int b); Point y }; x class Circle{ y Circle r protected: int x, y; class Circle : public Point{ private: private: double r; double r; public: public: void set(int a, int b); void set_r(double c); void set_r(double c); 16 }; };
  17. 17. … • Эх классын гишүүн функцийг хүү классад даран тодорхойлж болно – Эхтэйгээ адил гишүүн функцтэй байж болно. – Хүү класс өөрийн хувилбараар ажиллана.class A { class B : public A { protected: public: int x, y; void print () public: {cout<<“From B”<<endl;} void print () }; {cout<<“From A”<<endl;}}; 17
  18. 18. Хандах арга class Point{ class Circle : public Point{ protected: private: double r; int x, y; public: public: void set (int a, int b, double c) { void set(int a, int b) Point :: set(a, b); //same name function call {x=a; y=b;} r = c; void foo (); } void print(); void print(); }; }; Circle C;Point A; C.set(10,10,100); // from class CircleA.set(30,50); // from base class Point C.foo (); // from base class PointA.print(); // from base class Point C.print(); // from class Circle 18
  19. 19. Дээрх бүгдийг жишээ классад нэгтгэвэл • Time нь эх класс • ExtTime нь public-р удамшсан Time хүү. Хүү класс нь – Эхийн байгуулагчаас бусдыг удамшуулж чаддаг – Эхийн public ба protected гишүүдэд хадаж чаддаг – Өөрийн гишүүн өгөгдөлтэйExtTime – Өөрийн байгуулагчтай – Гишүүн функцтэй – Эхийн зарим функцийг даран тодорхойлдог Байхаар зохион байгуул 19
  20. 20. класс Time –г тодорхойлох// SPECIFICATION FILE ( time.h)class Time{ public : void Set ( int h, int m, int s ) ; void Increment ( ) ; void Write ( ) const ; Time ( int initH, int initM, int initS ) ; // constructor Time ( ) ; // default constructor protected : int hrs ; int mins ; int secs ;}; 20
  21. 21. Классын интерфэйс диаграм Time класс Set Protected data: Increment hrs Write mins Time secs Time 21
  22. 22. Удамшсан класс ExtTime// SPECIFICATION FILE ( exttime.h)#include “time.h”enum ZoneType {EST, CST, MST, PST, EDT, CDT, MDT, PDT } ;class ExtTime : public Time // Time is the base class and use public inheritance{ public : void Set ( int h, int m, int s, ZoneType timeZone ) ; void Write ( ) const; //overridden ExtTime (int initH, int initM, int initS, ZoneType initZone ) ; ExtTime (); // default constructorprivate : ZoneType zone ; // added data member}; 22
  23. 23. Классын интерфэйс диаграм ExtTime класс Set Set Increment Increment Protected data: hrs Write Write mins ExtTime Time secs ExtTime Time Private data: zone 23
  24. 24. ExtTime-г зохион байгуулахDefault ConstructorExtTime :: ExtTime ( ) ExtTime et1;{ zone = EST ;} et1 hrs = 0ExtTime –н объект үүсэхэд mins = 0эх классын default secs = 0байгуулагч Time() zone = ESTавтоматаар дуудагдана. 24
  25. 25. ExtTime-г зохион байгуулахӨөр нэг байгуулагч ExtTime :: ExtTime (int initH, int initM, int initS, ZoneType initZone) : Time (initH, initM, initS) // constructor initializer { zone = initZone ; } ExtTime *et2 = 5000 new ExtTime(8,30,0,EST); hrs = 8 et2 6000 mins = 30 5000 ??? secs = 0 zone = EST 25
  26. 26. ExtTime-г зохион байгуулах void ExtTime :: Set (int h, int m, int s, ZoneType timeZone) { Time :: Set (hours, minutes, seconds); // same name function call zone = timeZone ; }void ExtTime :: Write ( ) const // function overriding{ string zoneString[8] = {“EST”, “CST”, MST”, “PST”, “EDT”, “CDT”, “MDT”, “PDT”} ; Time :: Write ( ) ; cout <<‘ ‘<<zoneString[zone]<<endl;} 26
  27. 27. ExtTime-тай ажиллах#include “exttime.h”……int main(){ ExtTime thisTime ( 8, 35, 0, PST ) ; ExtTime thatTime ; // default constructor called thatTime.Write( ) ; // outputs 00:00:00 EST thatTime.Set (16, 49, 23, CDT) ; thatTime.Write( ) ; // outputs 16:49:23 CDT thisTime.Increment ( ) ; thisTime.Increment ( ) ; thisTime.Write ( ) ; // outputs 08:35:02 PST} 27
  28. 28. Нэгдсэн дүгнэлт• Удамшил нь байгаа төрлийг нарийвчлан эсвэл өргөтгөн шинэ төрөл тодорхойлох механизм.• Зарчмын хувьд байгуулагчаас бусад эх классын гишүүдийг хандах эрхийг нь өөрчлөн удамшуулж болно. 28
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×