Lecture3 охп удамшил
Upcoming SlideShare
Loading in...5
×
 

Lecture3 охп удамшил

on

  • 1,063 views

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

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

Statistics

Views

Total Views
1,063
Views on SlideShare
1,063
Embed Views
0

Actions

Likes
0
Downloads
28
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Lecture3 охп удамшил Lecture3 охп удамшил Presentation Transcript

  • Удамшлын хэрэгцээ 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 };
  • Удамшлын хэрэгцээ 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 };
  • Удамшлын хэрэгцээ 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 };
  • Удамшлын хэрэгцээ 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
  • Удамшлын хэрэгцээ• Анхны классыг нэмэгдүүлэх Тахир шугам Цэг Тэгш өнцөгт Гурвалжин Тойрог 3D-цэг• Анхны классыг нарийвчлах ComplexNumber real imag RealNumber ImaginaryNumber imag real 5
  • Удамшил?Удамшил нь өмнө нь тодорхойлогдсон классаас шинэ класс үүсгэх арга • Классыг өргөтгөх ( шинж чанарууд нэмэх) • Классыг дахин ашиглах( өөр классд хэрэглэх) • Классыг засварлах( гишүүн функцийг дахин тодорхойлж ) Үр дүнд нь: Санах ой ба хугацаа хэмнэх, код зохицол сайжирч хөгжүүлэлт хялбарчлагддаг 6
  • Удамшсан классыг тодорхойлох• Syntax: class DerivedClassName : access-level BaseClassName үүнд – access-level удамшлын хандалтын түвшинг тодорхойлно • private //default-р • public• Ямар ч класс эх класс байж болно – Иймд удамшсан класс өөр классын эх байж болно 7
  • Классын удамшил Цэг 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
  • Удамших гишүүнийг хянах • Удамших гишүүнийг хянах – класс зарлах үеийн – удамшлын төрөл тодорхойлох class Point{ protected: int x, y; public: void set(int a, int b); }; class Circle : public Point{ …… }; 10
  • Удамших эрх Удамшлын төрөл private protected public Гишүүдийн хандалт private - - - protected private protected protected public private protected public• Эх классын protected, public гишүүд удамшина,• удамших төрлөөс хамааран гишүүдийн хандалт өөрчлөгдөнө 11
  • Классын удамшил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};
  • Юу удамших вэ?• Зарчмын хувьд эх классын бүх гишүүд удамшиж болох хэдий ч – удамших зөвшөөрлөөс хамаарна• Гэхдээ дараах функцууд удамшдаггүй – Байгуулагч ба устгагч – operator=() оператор гишүүн – найз функц эдгээр функцууд зөвхөн энэ класст 13 хамаарах тул
  • Удамшлын байгуулагчийн дүрэм эх классын байгуулагч, устгагч удамшсан классын объект үүсэх бүрт дуудагдана (ажиллана).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
  • Удамшлын байгуулагчийн дүрэм Аль аль байгуулагчийг дахин тодорхойлж болно 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
  • Өөрийн гишүүнийг утгатай болгохУдамшсан классын байгуулагч 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 }; };
  • … • Эх классын гишүүн функцийг хүү классад даран тодорхойлж болно – Эхтэйгээ адил гишүүн функцтэй байж болно. – Хүү класс өөрийн хувилбараар ажиллана.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
  • Хандах арга 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
  • Дээрх бүгдийг жишээ классад нэгтгэвэл • Time нь эх класс • ExtTime нь public-р удамшсан Time хүү. Хүү класс нь – Эхийн байгуулагчаас бусдыг удамшуулж чаддаг – Эхийн public ба protected гишүүдэд хадаж чаддаг – Өөрийн гишүүн өгөгдөлтэйExtTime – Өөрийн байгуулагчтай – Гишүүн функцтэй – Эхийн зарим функцийг даран тодорхойлдог Байхаар зохион байгуул 19
  • класс 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
  • Классын интерфэйс диаграм Time класс Set Protected data: Increment hrs Write mins Time secs Time 21
  • Удамшсан класс 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
  • Классын интерфэйс диаграм ExtTime класс Set Set Increment Increment Protected data: hrs Write Write mins ExtTime Time secs ExtTime Time Private data: zone 23
  • ExtTime-г зохион байгуулахDefault ConstructorExtTime :: ExtTime ( ) ExtTime et1;{ zone = EST ;} et1 hrs = 0ExtTime –н объект үүсэхэд mins = 0эх классын default secs = 0байгуулагч Time() zone = ESTавтоматаар дуудагдана. 24
  • 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
  • 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
  • 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