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. Удамшлын хэрэгцээ
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. Удамшлын хэрэгцээ
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. Удамшлын хэрэгцээ
x
class Point{
Цэг y protected:
int x, y;
public:
Тойрог 3D-цэг void set (int a, int b);
x x
};
y y
r z
class Circle : public Point{ class 3D-Point: public Point{
private: private:
double r; int z;
}; };
4
10. Удамших гишүүнийг хянах
• Удамших гишүүнийг хянах
– класс зарлах үеийн
– удамшлын төрөл тодорхойлох
class Point{
protected: int x, y;
public: void set(int a, int b);
};
class Circle : public Point{
……
}; 10
11. Удамших эрх
Удамшлын төрөл
private protected public
Гишүүдийн
хандалт
private - - -
protected private protected protected
public private protected public
• Эх классын protected, public гишүүд удамшина,
• удамших төрлөөс хамааран гишүүдийн хандалт
өөрчлөгдөнө
11
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
};
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. Удамшлын байгуулагчийн дүрэм
Аль аль байгуулагчийг дахин тодорхойлж
болно
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. Өөрийн гишүүнийг утгатай
болгох
Удамшсан классын байгуулагч 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. …
• Эх классын гишүүн функцийг хүү классад даран
тодорхойлж болно
– Эхтэйгээ адил гишүүн функцтэй байж болно.
– Хүү класс өөрийн хувилбараар ажиллана.
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. Хандах арга
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 Circle
A.set(30,50); // from base class Point C.foo (); // from base class Point
A.print(); // from base class Point C.print(); // from class Circle
18
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
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 constructor
private :
ZoneType zone ; // added data member
};
22
23. Классын интерфэйс диаграм
ExtTime класс
Set Set
Increment Increment Protected data:
hrs
Write Write
mins
ExtTime Time
secs
ExtTime Time
Private
data:
zone 23
24. ExtTime-г зохион байгуулах
Default Constructor
ExtTime :: ExtTime ( ) ExtTime et1;
{
zone = EST ;
} et1
hrs = 0
ExtTime –н объект үүсэхэд mins = 0
эх классын default secs = 0
байгуулагч Time() zone = EST
автоматаар дуудагдана.
24
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. 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