lecture3 охп удамшил

Post on 01-Jul-2015

942 Views

Category:

Education

6 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

1

class Rectangle{

private:

int numVertices;

float *xCoord, *yCoord;

public:

void set(float *x, float *y, int nV);

float area();

};

Удамшлын хэрэгцээ

Тэгш өнцөгт Гурвалжин

Тахир шугам

class Polygon{

private:

int numVertices;

float *xCoord, *yCoord;

public:

void set(float *x, float *y, int nV);

};

class Triangle{

private:

int numVertices;

float *xCoord, *yCoord;

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 Rectangle : public Polygon{

public:

float area();

};

class Rectangle{

protected:

int numVertices;

float *xCoord, float *yCoord;

public:

void set(float *x, float *y, int nV);

float area();

};

Удамшлын хэрэгцээ

3

Тэгш өнцөгт Гурвалжин

Тахир шугам

class Polygon{

protected:

int numVertices;

float *xCoord, float *yCoord;

public:

void set(float *x, float *y, int nV);

};

class Triangle : public Polygon{

public:

float area();

};

class Triangle{

protected:

int numVertices;

float *xCoord, float *yCoord;

public:

void set(float *x, float *y, int nV);

float area();

};

Удамшлын хэрэгцээ

4

Удамшлын хэрэгцээ

Цэг

Тойрог 3D-цэг

class Point{

protected:

int x, y;

public:

void set (int a, int b);

};

class Circle : public Point{

private:

double r;

};

class 3D-Point: public Point{

private:

int z;

};

xy

xyr

xyz

5

• Анхны классыг нэмэгдүүлэх

• Анхны классыг нарийвчлах

Удамшлын хэрэгцээ

RealNumber

ComplexNumber

ImaginaryNumber

Тэгш өнцөгт Гурвалжин

Тахир шугам Цэг

Тойрог

realimag

real imag

3D-цэг

6

Удамшил?

Удамшил нь өмнө нь тодорхойлогдсон классаас шинэ класс үүсгэх арга

• Классыг өргөтгөх ( шинж чанарууд нэмэх)

• Классыг дахин ашиглах( өөр классд хэрэглэх)

• Классыг засварлах( гишүүн функцийг дахин тодорхойлж )

Үр дүнд нь: Санах ой ба хугацаа хэмнэх, код зохицол сайжирч хөгжүүлэлт хялбарчлагддаг

7

Удамшсан классыг тодорхойлох

• Syntax:

class DerivedClassName : access-level BaseClassName

үүнд– access-level удамшлын хандалтын түвшинг

тодорхойлно• private //default-р• public

• Ямар ч класс эх класс байж болно– Иймд удамшсан класс өөр классын эх байж болно

8

Классын удамшилЦэг

3D-цэг

class Point{

protected:

int x, y;

public:

void set (int a, int b);

};

class 3D-Point : public Point{

private:

double z;

… …

};

class Sphere : public 3D-цэг{

private:

double r;

… …

};

Бөмбөлөг

Цэг нь 3D-цэг-ийн эх класс харин 3D-цэг нь бөмбөлөгийн(Sphere) эх

9

Юу удамших вэ?

• Зарчмын хувьд эх классын бүх гишүүд удамшиж болох хэдий ч– удамших зөвшөөрлөөс хамаарна

10

Удамших гиш нийг хянахүү

• Удамших гишүүнийг хянах – класс зарлах үеийн– удамшлын төрөл тодорхойлох

class Point{

protected: int x, y;

public: void set(int a, int b);

};

class Circle : public Point{

… …

};

11

• Эх классын protected, public гишүүд удамшина, • удамших төрлөөс хамааран гишүүдийн хандалт

өөрчлөгдөнө

Удамших эрх

private protected public

private - - -

protected private protected protected

public private protected public

Удамшлын төрөл

Ги

шүүди

йн

хандал

т

12

class daughter : --------- mother{

private: double dPriv;

public: void mFoo ( );

};

Классын удамшилclass mother{

protected: int mProc;

public: int mPubl;

private: int mPriv;

};

class daughter : --------- mother{

private: double dPriv;

public: void dFoo ( );

};

void daughter :: dFoo ( ){

mPriv = 10; //error

mProc = 20;

};

private/protected/publicint main() {

/*….*/

}

class grandDaughter : public daughter {

private: double gPriv;

public: void gFoo ( );

};

13

Юу удамших вэ?

• Зарчмын хувьд эх классын бүх гишүүд удамшиж болох хэдий ч– удамших зөвшөөрлөөс хамаарна

• Гэхдээ дараах функцууд удамшдаггүй– Байгуулагч ба устгагч– operator=() оператор гишүүн

– найз функц

эдгээр функцууд зөвхөн энэ класст хамаарах тул

14

Удамшлын байгуулагчийн дүрэм

эх классын байгуулагч, устгагч удамшсан классын объект үүсэх бүрт дуудагдана (ажиллана).

class A {

public:

A ( )

{cout<< “A:default”<<endl;}

A (int a)

{cout<<“A:parameter”<<endl;}

};

class B : public A

{

public:

B (int a)

{cout<<“B”<<endl;}

};

B test(1);A:defaultB

output:

15

Удамшлын байгуулагчийн дүрэм Аль аль байгуулагчийг дахин тодорхойлж

болно

class A {

public:

A ( )

{cout<< “A:default”<<endl;}

A (int a)

{cout<<“A:parameter”<<endl;}

};

class C : public A {

public:

C (int a) : A(a)

{cout<<“C”<<endl;}

};

C test(1);A:parameterC

output:

DerivedClassCon ( derivedClass args ) : BaseClassCon ( baseClass args )

{ DerivedClass constructor body }

16

рийн гиш нийг утгатай Өө үүболгох

Point

Circle

class Point{

protected:

int x, y;

public:

void set(int a, int b);

};

class Circle : public Point{

private:

double r;

public:

void set_r(double c);

};

xy

xyr

class Circle{

protected:

int x, y;

private:

double r;

public:

void set(int a, int b);

void set_r(double c);

};

Удамшсан классын байгуулагч рийн гиш нийг утгатай өө үү

болгохоос гадна эхээс ирсэн гиш нийг утгатай болгоно.үү

17

…• Эх классын гишүүн функцийг хүү классад даран

тодорхойлж болно– Эхтэйгээ адил гишүүн функцтэй байж болно.

– Хүү класс өөрийн хувилбараар ажиллана.

class A {

protected:

int x, y;

public:

void print ()

{cout<<“From A”<<endl;}

};

class B : public A {

public:

void print ()

{cout<<“From B”<<endl;}

};

18

class Point{

protected:

int x, y;

public:

void set(int a, int b)

{x=a; y=b;}

void foo ();

void print();

};

class Circle : public Point{

private: double r;

public:

void set (int a, int b, double c) {

Point :: set(a, b); //same name function call

r = c;

}

void print(); };

Хандах арга

Circle C;

C.set(10,10,100); // from class Circle

C.foo (); // from base class Point

C.print(); // from class Circle

Point A;

A.set(30,50); // from base class Point

A.print(); // from base class Point

19

Дээрх б гдийг жишээ үклассад нэгтгэвэл

• Time нь эх класс• ExtTime нь public-р удамшсан

хүү. Хүү класс нь– Эхийн байгуулагчаас бусдыг

удамшуулж чаддаг– Эхийн public ба protected

гишүүдэд хадаж чаддаг– Өөрийн гишүүн өгөгдөлтэй– Өөрийн байгуулагчтай– Гишүүн функцтэй– Эхийн зарим функцийг даран

тодорхойлдогБайхаар зохион байгуул

ExtTime

Time

20

класс Time –г тодорхойлох

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 ;

} ;

// SPECIFICATION FILE ( time.h)

21

Классын интерфэйс диаграм

Protected data:

hrs

mins

secs

Set

Increment

Write

Time

Time

Time класс

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

} ;

23

Классын интерфэйс диаграм

Protected data:

hrs

mins

secs

ExtTime класс

Set

Increment

Write

Time

Time

Set

Increment

Write

ExtTime

ExtTime

Private data:zone

24

ExtTime-г зохион байгуулах

Default Constructor

ExtTime :: ExtTime ( ){

zone = EST ;}

ExtTime –н объект үүсэхэд эх классын default байгуулагч Time() автоматаар дуудагдана.

ExtTime et1;

hrs = 0mins = 0secs = 0zone = EST

et1

25

ExtTime-г зохион байгуулах

Өөр нэг байгуулагч

ExtTime :: ExtTime (int initH, int initM, int initS, ZoneType initZone)

: Time (initH, initM, initS) // constructor initializer

{ zone = initZone ;}

ExtTime *et2 =

new ExtTime(8,30,0,EST);hrs = 8mins = 30secs = 0zone = EST

et2

5000

???

6000

5000

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;

}

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

}

28

Нэгдсэн д гнэлтү

• Удамшил нь байгаа төрлийг нарийвчлан эсвэл өргөтгөн шинэ төрөл тодорхойлох механизм.

• Зарчмын хувьд байгуулагчаас бусад эх классын гишүүдийг хандах эрхийг нь өөрчлөн удамшуулж болно.

top related