SlideShare ist ein Scribd-Unternehmen logo
1 von 28
Удамшлын хэрэгцээ
                                             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           z


class 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 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
Дээрх бүгдийг жишээ
 классад нэгтгэвэл
          • 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 constructor
private :
   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 Constructor

ExtTime :: ExtTime ( )            ExtTime et1;
{
    zone = EST ;
}                           et1
                                    hrs = 0
ExtTime –н объект үүсэхэд           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

Weitere ähnliche Inhalte

Was ist angesagt?

U.cs101 алгоритм программчлал-3
U.cs101   алгоритм программчлал-3U.cs101   алгоритм программчлал-3
U.cs101 алгоритм программчлал-3Badral Khurelbaatar
 
Tutorial of python
Tutorial of pythonTutorial of python
Tutorial of pythonMr Nyak
 
програм хангамжийн чанарын инженерчлэл
програм хангамжийн чанарын инженерчлэл програм хангамжийн чанарын инженерчлэл
програм хангамжийн чанарын инженерчлэл Энхтамир Ш
 
U.cs101 алгоритм программчлал-2
U.cs101   алгоритм программчлал-2U.cs101   алгоритм программчлал-2
U.cs101 алгоритм программчлал-2Badral Khurelbaatar
 
Ogogdliin sangiin zohion baiguulalt lekts
Ogogdliin sangiin zohion baiguulalt lektsOgogdliin sangiin zohion baiguulalt lekts
Ogogdliin sangiin zohion baiguulalt lektsАлдарболд Э.
 
Өгөгдлийн бүтэц
Өгөгдлийн бүтэцӨгөгдлийн бүтэц
Өгөгдлийн бүтэцMuuluu
 

Was ist angesagt? (20)

Лекц 10: (Рекурс)
Лекц 10: (Рекурс)Лекц 10: (Рекурс)
Лекц 10: (Рекурс)
 
U.cs101 алгоритм программчлал-3
U.cs101   алгоритм программчлал-3U.cs101   алгоритм программчлал-3
U.cs101 алгоритм программчлал-3
 
It101 16
It101 16It101 16
It101 16
 
CS203 Лекц02 Oop
CS203 Лекц02  OopCS203 Лекц02  Oop
CS203 Лекц02 Oop
 
Tutorial of python
Tutorial of pythonTutorial of python
Tutorial of python
 
програм хангамжийн чанарын инженерчлэл
програм хангамжийн чанарын инженерчлэл програм хангамжийн чанарын инженерчлэл
програм хангамжийн чанарын инженерчлэл
 
C cons
C consC cons
C cons
 
Lec5 angi
Lec5 angiLec5 angi
Lec5 angi
 
Cs203 lecture13 composition
Cs203 lecture13 compositionCs203 lecture13 composition
Cs203 lecture13 composition
 
U.cs101 алгоритм программчлал-2
U.cs101   алгоритм программчлал-2U.cs101   алгоритм программчлал-2
U.cs101 алгоритм программчлал-2
 
C# hicheelin lekts
C# hicheelin lektsC# hicheelin lekts
C# hicheelin lekts
 
CS203 Лекц01 Prefeace
CS203 Лекц01  PrefeaceCS203 Лекц01  Prefeace
CS203 Лекц01 Prefeace
 
Java programchlal s.uuganbayr
Java programchlal s.uuganbayrJava programchlal s.uuganbayr
Java programchlal s.uuganbayr
 
Database 3
Database 3Database 3
Database 3
 
Ogogdliin sangiin zohion baiguulalt lekts
Ogogdliin sangiin zohion baiguulalt lektsOgogdliin sangiin zohion baiguulalt lekts
Ogogdliin sangiin zohion baiguulalt lekts
 
Sw203 Lecture11 Casting
Sw203 Lecture11 CastingSw203 Lecture11 Casting
Sw203 Lecture11 Casting
 
Sw203 Lecture7 Method Override
Sw203 Lecture7  Method OverrideSw203 Lecture7  Method Override
Sw203 Lecture7 Method Override
 
Sw203 Lecture4 Class Object
Sw203 Lecture4  Class ObjectSw203 Lecture4  Class Object
Sw203 Lecture4 Class Object
 
Sw203 Lecture5 Class Acess Modifiers
Sw203 Lecture5 Class Acess ModifiersSw203 Lecture5 Class Acess Modifiers
Sw203 Lecture5 Class Acess Modifiers
 
Өгөгдлийн бүтэц
Өгөгдлийн бүтэцӨгөгдлийн бүтэц
Өгөгдлийн бүтэц
 

Andere mochten auch

удамшил гэж юу вэ?
удамшил гэж юу вэ?удамшил гэж юу вэ?
удамшил гэж юу вэ?Maa Enkh
 
Dsi lec11
Dsi lec11Dsi lec11
Dsi lec11ggmo86
 
Introduction angular2 français
Introduction angular2 françaisIntroduction angular2 français
Introduction angular2 françaisSaameh BEN SAID
 
хүний цусны бүлэг удамших
хүний цусны бүлэг удамшиххүний цусны бүлэг удамших
хүний цусны бүлэг удамшихOtgonjargal Galsansharav
 
ургамлын эсийн бүтэц
ургамлын эсийн бүтэцургамлын эсийн бүтэц
ургамлын эсийн бүтэцbyamba-1
 
эсийн дан мембрант эрхтэ нцэрүүд
эсийн дан мембрант эрхтэ нцэрүүдэсийн дан мембрант эрхтэ нцэрүүд
эсийн дан мембрант эрхтэ нцэрүүдOidov Tungaa
 
ургамлын өсөлт хөгжлийн механизм
ургамлын өсөлт хөгжлийн механизмургамлын өсөлт хөгжлийн механизм
ургамлын өсөлт хөгжлийн механизмOyuka Oyu
 
эсийн бүрхүүл ба цитоплазм
эсийн бүрхүүл ба цитоплазмэсийн бүрхүүл ба цитоплазм
эсийн бүрхүүл ба цитоплазмSugar Gonchigdanzan
 
ургамлын эсийн бүтэц
ургамлын эсийн бүтэцургамлын эсийн бүтэц
ургамлын эсийн бүтэцbyamba-1
 
эсийн бүтэц бүрхүүл бөөм сийвэн
эсийн бүтэц бүрхүүл бөөм  сийвэнэсийн бүтэц бүрхүүл бөөм  сийвэн
эсийн бүтэц бүрхүүл бөөм сийвэнOidov Tungaa
 
эсийн бүтэц бүрхүүл бөөм сийвэн
эсийн бүтэц бүрхүүл бөөм  сийвэнэсийн бүтэц бүрхүүл бөөм  сийвэн
эсийн бүтэц бүрхүүл бөөм сийвэнOidov Tungaa
 

Andere mochten auch (20)

001 c++ class охп
001 c++ class охп001 c++ class охп
001 c++ class охп
 
удамшил гэж юу вэ?
удамшил гэж юу вэ?удамшил гэж юу вэ?
удамшил гэж юу вэ?
 
Dsi lec11
Dsi lec11Dsi lec11
Dsi lec11
 
Introduction angular2 français
Introduction angular2 françaisIntroduction angular2 français
Introduction angular2 français
 
Lecture 1
Lecture 1Lecture 1
Lecture 1
 
Lecture 3
Lecture 3Lecture 3
Lecture 3
 
хүний цусны бүлэг удамших
хүний цусны бүлэг удамшиххүний цусны бүлэг удамших
хүний цусны бүлэг удамших
 
ургамлын эсийн бүтэц
ургамлын эсийн бүтэцургамлын эсийн бүтэц
ургамлын эсийн бүтэц
 
эсийн дан мембрант эрхтэ нцэрүүд
эсийн дан мембрант эрхтэ нцэрүүдэсийн дан мембрант эрхтэ нцэрүүд
эсийн дан мембрант эрхтэ нцэрүүд
 
Esiin huvaagdal miosis
Esiin huvaagdal miosisEsiin huvaagdal miosis
Esiin huvaagdal miosis
 
Datastructure algoritm
Datastructure algoritmDatastructure algoritm
Datastructure algoritm
 
Chromosome
ChromosomeChromosome
Chromosome
 
ургамлын өсөлт хөгжлийн механизм
ургамлын өсөлт хөгжлийн механизмургамлын өсөлт хөгжлийн механизм
ургамлын өсөлт хөгжлийн механизм
 
эсийн бүрхүүл ба цитоплазм
эсийн бүрхүүл ба цитоплазмэсийн бүрхүүл ба цитоплазм
эсийн бүрхүүл ба цитоплазм
 
Biol l 5
Biol l 5Biol l 5
Biol l 5
 
ургамлын эсийн бүтэц
ургамлын эсийн бүтэцургамлын эсийн бүтэц
ургамлын эсийн бүтэц
 
эсийн бүтэц бүрхүүл бөөм сийвэн
эсийн бүтэц бүрхүүл бөөм  сийвэнэсийн бүтэц бүрхүүл бөөм  сийвэн
эсийн бүтэц бүрхүүл бөөм сийвэн
 
2 lekts
2 lekts2 lekts
2 lekts
 
эсийн бүтэц бүрхүүл бөөм сийвэн
эсийн бүтэц бүрхүүл бөөм  сийвэнэсийн бүтэц бүрхүүл бөөм  сийвэн
эсийн бүтэц бүрхүүл бөөм сийвэн
 
5 lekts
5 lekts5 lekts
5 lekts
 

Lecture3 охп удамшил

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