ݺߣ

ݺߣShare a Scribd company logo
C++ Classes
               &
Объект хандалгат программчлал
Объект хандалгат программчлал
• Объект тодорхойлон программчлах.

• Объект нь аливаа бодит, бодит бус зүйл,
  юмсын загвар.

• Процедур дээр үндэслэсэн (C шиг)
  программчлалаас зарчмын хувьд өөр
Объект хандалгат программчлал
    Объектуудын хоорондын харилцааг ашиглан
 программ бичих программчлалын хандлага
 (парадигм)-ыг ОХП гэдэг. Өгөгдөл, арга (methods
 буюу функц)-аас бүрдэх хэрэглэгчийн
 тодорхойлсон төрлийг класс гэнэ. Объект нь
 класс (анги)-н элемент юм. Программчлах
 технологи нь ө гө гдлийн хийсвэрлэл, капсулдах
 буюу багцлах (encapsulation), мэдээ дамжуулах,
 модульчлах, полиморфизм, удамшил зэргээс
 бүрдэнэ.
    Объект нь мэдээлэл хүлээн авна, өгөгдлийг
 боловсруулна, бусад объектэд мэдээ дамжуулна.
 (Бие даасан машин шиг л)
Объект хандалгат программчлал
• ОХП (OOP)
  – Өгөгдөл (юмсын шинж чанар), функц (зан
    төлөв) –ийг багцлан класс (анги) гэж нэрлэгдэх
    зүйлд капсул болгох.
• Class нь хэрэглэгчийн тодорхойлсон төрөл.
  – Өгөгдөл (data members) –г гишүүн өгөгдөл
  – Функц (member functions or methods)-г гишүүн
    функц эсвэл арга гэнэ.
C++-ийн класс
• Классыг тодорхойлохдоо class түлхүүр
  үгийг ашиглана.
• Классын бие нь { } ; хаалтад байрлана
  (ямагт цэгтэй таслалаар дуусгана).

                class class_name       Зөв_нэр_өгөх
                }
                .…
                .…
                                   Классын бие (data
                .…
                                   member + methods)
                                            methods
                ;{
C++-ийн класс
• Классын бие дотор private: бa public:
  түлхүүр үгийг ашиглан гишүүний хандах
  эрхийг тогтооно.
  – Хандах эрх бичээгүй бол private гэж үзнэ

• Ерөнхийдөө гишүүн өгөгдлийг private:
  гишүүн функцийг public: хандах эрхтэй
  хэсэгт бичдэг.
C++-ийн класс

class class_name
}
:private           private гишүүдийн хэсэг
          …
          …
          …
    public:
          …        рublic гишүүдийн хэсэг
          …
          …
;{
C++-ийн класс
    • Гишүүдийн хандах эрх
       – public:
              • Классын гаднаас шууд хандаж болно. Нийтийн
                хандалт гэх ба хаалттай гишүүдийг гадаад хэсэгтэй
                холбох үүргийг гүйцэтгэнэ.
           – private:
              • Зөвхөн классын гишүүн функцууд хандана
              • Зөвхөн классын дотоод хэсэгт хэрэглэгдэнэ.


,Хэмжээ      private                              public
  Бие нь
             шинж чанар
Классын жишээ
• Тойргийн мэдээллийг багцлан класс
  үүсгэвэл
                                           Бусад класс болон гаднаас уг
   class Circle                            мэдээллийг шууд авч чадахгүй .
                                           Энэ классын функууд л хандана.
   {
      private:
            double radius;
      public:
            void setRadius(double r);
   double getDiameter();
            double getArea();            Классын гаднаас хандаж болох
            double getCircumference();   ба, эдгээр функцууд гишүүн
   };                                    Радиус өгөгдөл рүү хандаж чадна.
Классын объект үүсгэх
• Одоо тодорхойлсон класс төрлийн хувьсагч
   зарлан ашиглах боломжтой болсон ба уг
   хувьсагчийг object гэнэ. int i,j,n; гэдэг шиг
   Circle c1,c2;
  Circle *c;
гэж зарлаж болно. c1, c2 тойрог объекттэй боллоо.
• Объектийг зарламагц тухайн объект
   өгөгдлүүдийнхээ хэмжээгээр хуваарилагдан
   үүснэ.
Байгуулагч функц
• Байгуулагч:
  – Public хандах эрхтэй
  – Объектийг зарлахад гишүүн өгөгдлийг анхны
    утгаар хангаж өгөх үүрэгтэй
  – Классын нэртэй ижил нэртэй
  – Утга буцаахгүй
  – Хэдэн хэдэн байгуулагч байж болно. (дахин
    тодорхойлогдоно)
Байгуулагч функц

class Circle
                                      Аргументгүй
{
                                      байгуулагч
   private:
         double radius;
   public:                            Нэг аргументтай
         Circle();                    байгуулагч
         Circle(int r);
          void setRadius(double r);
         double getDiameter();
         double getArea();
         double getCircumference();
};
Гишүүн функцийг зохион байгуулах
•     Class implementation: Гишүүн функцийн код
      бичих.
•     Хоёр арга байна:
     1. Классын гадна талд бичиж өгөх
         •   Мужлал тогтоох (::) оператор ашиглана
         •   Өөр классууд ижил гишүүн функцтэй байж болно
     –   Бичигдэх хэлбэр
         БуцаахТөрөл ClassName::MemberFunctionName( ){
            …
         }
Гишүүн функцийг зохион байгуулах
2. Гишүүн функцийн кодыг класс дотор
   бичих;

      class Circle
      {                                                   Дотор нь
         private:                                         бичих
               double radius;
         public:
               Circle() { radius = 0.0;}
               Circle(int r);
               void setRadius(double r){radius = r;}
               double getDiameter(){ return radius *2;}
               double getArea();
               double getCircumference();
      };
class Circle
{
   private:
          double radius;
   public:
          Circle() { radius = 0.0;}
          Circle(int r);
          void setRadius(double r){radius = r;}
          double getDiameter(){ return radius *2;}
          double getArea();
          double getCircumference();
};
Circle::Circle(int r)
{
                                                     Гадна нь бичсэн байдал
   radius = r;
}
double Circle::getArea()
{
   return radius * radius * (22.0/7);
}
double Circle:: getCircumference()
{
   return 2 * radius * (22.0/7);
}
Классын гишүүнд хандах
• Классын гишүүнд хандахдаа
  – Struct-ийн гишүүнд ханддагтай адил
  – (.) цэг операторыг ашиглах
    • Объект
    • Заалт объект
  – Эсвэл (->) чиглүүлэх операторыг ашиглана
    • Заагч
class Circle
{
   private:
          double radius;
   public:                                                    Эхний
          Circle() { radius = 0.0;}                          Хоёр дахь
                                                           байгуулагч
          Circle(int r);                                     байгуулагч
                                                            дуудагдав
          void setRadius(double r){radius = r;}              дуудагдав
          double getDiameter(){ return radius *2;}
          double getArea();
                                      int main()                    Радиус нь
          double getCircumference();
                                      {                           private гишүүн
};                                          Circle c1,c2(7);
Circle::Circle(int r)
{                                           cout<<“The area of c1:”
   radius = r;                                  <<c1.getArea()<<“n”;
}
double Circle::getArea()                    //c1.raduis = 5;//syntax error
{                                           c1.setRadius(5);
   return radius * radius * (22.0/7);
                                            cout<<“The circumference of c1:”
}                                               << c1.getCircumference()<<“n”;
double Circle:: getCircumference()
{                                           cout<<“The Diameter of c2:”
   return 2 * radius * (22.0/7);                <<c2.getDiameter()<<“n”;
}                                     }
class Circle
{
   private:
          double radius;
   public:
          Circle() { radius = 0.0;}
          Circle(int r);
          void setRadius(double r){radius = r;}
          double getDiameter(){ return radius *2;}
          double getArea();
          double getCircumference();
};
Circle::Circle(int r)                 int main()
                                      {
{
                                            Circle c(7);
   radius = r;                              Circle *cp1 = &c;
}                                           Circle *cp2 = new Circle(7);
double Circle::getArea()
{                                           cout<<“The are of cp2:”
   return radius * radius * (22.0/7);                  <<cp2->getArea();
}
double Circle:: getCircumference() }
{
   return 2 * radius * (22.0/7);
}
Устгагч
• Устгагч
  – Тусгай гишүүн функц
  – Классын нэртэй ижил
       • (~) операторыг өмнө нь бичнэ
  –   Аргументгүй
  –   Утга буцаагүй
  –   Дахин тодорхойлохгүй
  –   Объектийн ашигласан санах ойг
       • дахин ашиглах
       • Динамикаар удирдах
Өөр нэг классын жишээ
• Цагтай ажиллах класс.
            class Time
            {
                private:
                    int *hour,*minute,*second;
                public:
                    Time();
                    Time(int h,int m,int s);
                    void printTime();
                    void setTime(int h,int m,int s);
                    int getHour(){return *hour;}
                    int getMinute(){return *minute;}
  Устгагч           int getSecond(){return *second;}
                    void setHour(int h){*hour = h;}
                    void setMinute(int m){*minute = m;}
                    void setSecond(int s){*second = s;}
                    ~Time();
            };
Time::Time()
                  {
                         hour = new int;
                         minute = new int;
                         second = new int;
                         *hour = *minute = *second = 0;
                  }

Эхлээд заагчийг   Time::Time(int h,int m,int s)
  динамикаар      {
  хуваарилах
                         hour = new int;
   хэрэгтэй
                         minute = new int;
                         second = new int;
                         *hour = h;
                         *minute = m;
                         *second = s;
                  }

                  void Time::setTime(int h,int m,int s)
                  {
                         *hour = h;
                         *minute = m;
                         *second = s;
                  }
void Time::printTime()
{
     cout<<"The time is : ("<<*hour<<":"<<*minute<<":"<<*second<<")"
               <<endl;
}
                                   Устгагч: санах ойг чөлөөлөх
Time::~Time(){
        delete hour; delete minute; delete second;
}

int main()
{
                                Output:
        Time *t;
        t= new Time(3,55,54);   The time is : (3:55:54)
        t->printTime();         The time is : (7:17:43)
                                Press any key to continue
       t->setHour(7);
       t->setMinute(17);
       t->setSecond(43);

       t->printTime();
                                  Энэ биелэхэд байгуулагч
       delete t;                        дуудагдана
       cin.get();
}
OOP ашиглах шаардлага
1. Программыг хялбарчлах
2. Программын харагдах байдал
   • Мэдээлэл нуугдмал:
      – Класс л мэдээллийг өөрөө боловсруулах

1. Программ хангамжийн дахин ашиглагдах
   байдал
  •   Классын объект бусад классын гишүүн байж болно
OOP
   Объектуудын хоорондын харилцааг ашиглан
программ бичих программчлалын хандлага
(парадигм)-ыг ОХП гэдэг. Өгөгдөл, арга (methods
буюу функц)-аас бүрдэх хэрэглэгчийн
тодорхойлсон төрлийг класс гэнэ. Объект нь
класс (анги)-н элемент юм. Программчлах
технологи нь ө гө гдлийн хийсвэрлэл, капсулдах
буюу багцлах (encapsulation), мэдээ дамжуулах,
модульчлах, полиморфизм, удамшил зэргээс
бүрдэнэ.
   Объект нь мэдээлэл хүлээн авна, өгөгдлийг
боловсруулна, бусад объектэд мэдээ дамжуулна.
(Бие даасан машин гэж үзэхээр)
C хэл дээр нэмэгдсэн C++ ойлголт
   –// мөр дуустал тайлбар
   –Заалт хувьсагч
   int ix; // ix нь “жинхэнэ" хувьсагч
   int &rx = ix; // rx нь ix-ийн "alias”
    ix = 1; // rx == 1 үнэн
   rx = 2; // ix == 2 үнэн
C хэл дээр нэмэгдсэн C++ ойлголт
    #include <stdio.h> // #include <iostream.h>
    int max(int a, int b)
    { if (a > b) return a;
       return b; }
    char *max(char *a, char * b)
    { if (strcmp(a, b) > 0) return a;
    return b; }
    int main() {
    printf("max(19, 69) = %dn", max(19, 69));
 printf("max(abc, def) = %sn", max("abc", "def"));
 return 0;                            // cout; cin;
C хэл дээр нэмэгдсэн C++ ойлголт
   –Анхны утга онооход илэрхийлэл бичиж
 болно.
   double a = 12 * 3.25;
   double b = a + 1.112;
   a = a * 2 + b;
   double c = a + b * a;
   –Локал хувьсагч зарлах
   for (int i = 0; i < 4; i++) // i –г локалаар зарлав
C хэл дээр нэмэгдсэн C++ ойлголт
    –Глобал, локал хувьсагч ижил нэртэй байж
 болно.
    #include <iostream.h>
 double a = 128;
 int main ()
 {
 double a = 256;
 cout << "Local a: " << a << endl;
 cout << "Global a: " << ::a << endl;
 return 0;
    }
C хэл дээр нэмэгдсэн C++ ойлголт
   –New, delete
   –width() ба setw() // iomanip.h
   –Функц, оператор дахин тодорхойлох
   гэх, мэт

   Дараах эх сурвалжаас дэлгэрүүлж үзнэ үү.
   1.http://www.4p8.com/eric.brasseur/cppcen.html#l3
   2.Эсвэл google ээр “from c to c++” хайлтын үр
 дүн

More Related Content

001 c++ class охп

  • 1. C++ Classes & Объект хандалгат программчлал
  • 2. Объект хандалгат программчлал • Объект тодорхойлон программчлах. • Объект нь аливаа бодит, бодит бус зүйл, юмсын загвар. • Процедур дээр үндэслэсэн (C шиг) программчлалаас зарчмын хувьд өөр
  • 3. Объект хандалгат программчлал Объектуудын хоорондын харилцааг ашиглан программ бичих программчлалын хандлага (парадигм)-ыг ОХП гэдэг. Өгөгдөл, арга (methods буюу функц)-аас бүрдэх хэрэглэгчийн тодорхойлсон төрлийг класс гэнэ. Объект нь класс (анги)-н элемент юм. Программчлах технологи нь ө гө гдлийн хийсвэрлэл, капсулдах буюу багцлах (encapsulation), мэдээ дамжуулах, модульчлах, полиморфизм, удамшил зэргээс бүрдэнэ. Объект нь мэдээлэл хүлээн авна, өгөгдлийг боловсруулна, бусад объектэд мэдээ дамжуулна. (Бие даасан машин шиг л)
  • 4. Объект хандалгат программчлал • ОХП (OOP) – Өгөгдөл (юмсын шинж чанар), функц (зан төлөв) –ийг багцлан класс (анги) гэж нэрлэгдэх зүйлд капсул болгох. • Class нь хэрэглэгчийн тодорхойлсон төрөл. – Өгөгдөл (data members) –г гишүүн өгөгдөл – Функц (member functions or methods)-г гишүүн функц эсвэл арга гэнэ.
  • 5. C++-ийн класс • Классыг тодорхойлохдоо class түлхүүр үгийг ашиглана. • Классын бие нь { } ; хаалтад байрлана (ямагт цэгтэй таслалаар дуусгана). class class_name Зөв_нэр_өгөх } .… .… Классын бие (data .… member + methods) methods ;{
  • 6. C++-ийн класс • Классын бие дотор private: бa public: түлхүүр үгийг ашиглан гишүүний хандах эрхийг тогтооно. – Хандах эрх бичээгүй бол private гэж үзнэ • Ерөнхийдөө гишүүн өгөгдлийг private: гишүүн функцийг public: хандах эрхтэй хэсэгт бичдэг.
  • 7. C++-ийн класс class class_name } :private private гишүүдийн хэсэг … … … public: … рublic гишүүдийн хэсэг … … ;{
  • 8. C++-ийн класс • Гишүүдийн хандах эрх – public: • Классын гаднаас шууд хандаж болно. Нийтийн хандалт гэх ба хаалттай гишүүдийг гадаад хэсэгтэй холбох үүргийг гүйцэтгэнэ. – private: • Зөвхөн классын гишүүн функцууд хандана • Зөвхөн классын дотоод хэсэгт хэрэглэгдэнэ. ,Хэмжээ private public Бие нь шинж чанар
  • 9. Классын жишээ • Тойргийн мэдээллийг багцлан класс үүсгэвэл Бусад класс болон гаднаас уг class Circle мэдээллийг шууд авч чадахгүй . Энэ классын функууд л хандана. { private: double radius; public: void setRadius(double r); double getDiameter(); double getArea(); Классын гаднаас хандаж болох double getCircumference(); ба, эдгээр функцууд гишүүн }; Радиус өгөгдөл рүү хандаж чадна.
  • 10. Классын объект үүсгэх • Одоо тодорхойлсон класс төрлийн хувьсагч зарлан ашиглах боломжтой болсон ба уг хувьсагчийг object гэнэ. int i,j,n; гэдэг шиг Circle c1,c2; Circle *c; гэж зарлаж болно. c1, c2 тойрог объекттэй боллоо. • Объектийг зарламагц тухайн объект өгөгдлүүдийнхээ хэмжээгээр хуваарилагдан үүснэ.
  • 11. Байгуулагч функц • Байгуулагч: – Public хандах эрхтэй – Объектийг зарлахад гишүүн өгөгдлийг анхны утгаар хангаж өгөх үүрэгтэй – Классын нэртэй ижил нэртэй – Утга буцаахгүй – Хэдэн хэдэн байгуулагч байж болно. (дахин тодорхойлогдоно)
  • 12. Байгуулагч функц class Circle Аргументгүй { байгуулагч private: double radius; public: Нэг аргументтай Circle(); байгуулагч Circle(int r); void setRadius(double r); double getDiameter(); double getArea(); double getCircumference(); };
  • 13. Гишүүн функцийг зохион байгуулах • Class implementation: Гишүүн функцийн код бичих. • Хоёр арга байна: 1. Классын гадна талд бичиж өгөх • Мужлал тогтоох (::) оператор ашиглана • Өөр классууд ижил гишүүн функцтэй байж болно – Бичигдэх хэлбэр БуцаахТөрөл ClassName::MemberFunctionName( ){ … }
  • 14. Гишүүн функцийг зохион байгуулах 2. Гишүүн функцийн кодыг класс дотор бичих; class Circle { Дотор нь private: бичих double radius; public: Circle() { radius = 0.0;} Circle(int r); void setRadius(double r){radius = r;} double getDiameter(){ return radius *2;} double getArea(); double getCircumference(); };
  • 15. class Circle { private: double radius; public: Circle() { radius = 0.0;} Circle(int r); void setRadius(double r){radius = r;} double getDiameter(){ return radius *2;} double getArea(); double getCircumference(); }; Circle::Circle(int r) { Гадна нь бичсэн байдал radius = r; } double Circle::getArea() { return radius * radius * (22.0/7); } double Circle:: getCircumference() { return 2 * radius * (22.0/7); }
  • 16. Классын гишүүнд хандах • Классын гишүүнд хандахдаа – Struct-ийн гишүүнд ханддагтай адил – (.) цэг операторыг ашиглах • Объект • Заалт объект – Эсвэл (->) чиглүүлэх операторыг ашиглана • Заагч
  • 17. class Circle { private: double radius; public: Эхний Circle() { radius = 0.0;} Хоёр дахь байгуулагч Circle(int r); байгуулагч дуудагдав void setRadius(double r){radius = r;} дуудагдав double getDiameter(){ return radius *2;} double getArea(); int main() Радиус нь double getCircumference(); { private гишүүн }; Circle c1,c2(7); Circle::Circle(int r) { cout<<“The area of c1:” radius = r; <<c1.getArea()<<“n”; } double Circle::getArea() //c1.raduis = 5;//syntax error { c1.setRadius(5); return radius * radius * (22.0/7); cout<<“The circumference of c1:” } << c1.getCircumference()<<“n”; double Circle:: getCircumference() { cout<<“The Diameter of c2:” return 2 * radius * (22.0/7); <<c2.getDiameter()<<“n”; } }
  • 18. class Circle { private: double radius; public: Circle() { radius = 0.0;} Circle(int r); void setRadius(double r){radius = r;} double getDiameter(){ return radius *2;} double getArea(); double getCircumference(); }; Circle::Circle(int r) int main() { { Circle c(7); radius = r; Circle *cp1 = &c; } Circle *cp2 = new Circle(7); double Circle::getArea() { cout<<“The are of cp2:” return radius * radius * (22.0/7); <<cp2->getArea(); } double Circle:: getCircumference() } { return 2 * radius * (22.0/7); }
  • 19. Устгагч • Устгагч – Тусгай гишүүн функц – Классын нэртэй ижил • (~) операторыг өмнө нь бичнэ – Аргументгүй – Утга буцаагүй – Дахин тодорхойлохгүй – Объектийн ашигласан санах ойг • дахин ашиглах • Динамикаар удирдах
  • 20. Өөр нэг классын жишээ • Цагтай ажиллах класс. class Time { private: int *hour,*minute,*second; public: Time(); Time(int h,int m,int s); void printTime(); void setTime(int h,int m,int s); int getHour(){return *hour;} int getMinute(){return *minute;} Устгагч int getSecond(){return *second;} void setHour(int h){*hour = h;} void setMinute(int m){*minute = m;} void setSecond(int s){*second = s;} ~Time(); };
  • 21. Time::Time() { hour = new int; minute = new int; second = new int; *hour = *minute = *second = 0; } Эхлээд заагчийг Time::Time(int h,int m,int s) динамикаар { хуваарилах hour = new int; хэрэгтэй minute = new int; second = new int; *hour = h; *minute = m; *second = s; } void Time::setTime(int h,int m,int s) { *hour = h; *minute = m; *second = s; }
  • 22. void Time::printTime() { cout<<"The time is : ("<<*hour<<":"<<*minute<<":"<<*second<<")" <<endl; } Устгагч: санах ойг чөлөөлөх Time::~Time(){ delete hour; delete minute; delete second; } int main() { Output: Time *t; t= new Time(3,55,54); The time is : (3:55:54) t->printTime(); The time is : (7:17:43) Press any key to continue t->setHour(7); t->setMinute(17); t->setSecond(43); t->printTime(); Энэ биелэхэд байгуулагч delete t; дуудагдана cin.get(); }
  • 23. OOP ашиглах шаардлага 1. Программыг хялбарчлах 2. Программын харагдах байдал • Мэдээлэл нуугдмал: – Класс л мэдээллийг өөрөө боловсруулах 1. Программ хангамжийн дахин ашиглагдах байдал • Классын объект бусад классын гишүүн байж болно
  • 24. OOP Объектуудын хоорондын харилцааг ашиглан программ бичих программчлалын хандлага (парадигм)-ыг ОХП гэдэг. Өгөгдөл, арга (methods буюу функц)-аас бүрдэх хэрэглэгчийн тодорхойлсон төрлийг класс гэнэ. Объект нь класс (анги)-н элемент юм. Программчлах технологи нь ө гө гдлийн хийсвэрлэл, капсулдах буюу багцлах (encapsulation), мэдээ дамжуулах, модульчлах, полиморфизм, удамшил зэргээс бүрдэнэ. Объект нь мэдээлэл хүлээн авна, өгөгдлийг боловсруулна, бусад объектэд мэдээ дамжуулна. (Бие даасан машин гэж үзэхээр)
  • 25. C хэл дээр нэмэгдсэн C++ ойлголт –// мөр дуустал тайлбар –Заалт хувьсагч int ix; // ix нь “жинхэнэ" хувьсагч int &rx = ix; // rx нь ix-ийн "alias” ix = 1; // rx == 1 үнэн rx = 2; // ix == 2 үнэн
  • 26. C хэл дээр нэмэгдсэн C++ ойлголт #include <stdio.h> // #include <iostream.h> int max(int a, int b) { if (a > b) return a; return b; } char *max(char *a, char * b) { if (strcmp(a, b) > 0) return a; return b; } int main() { printf("max(19, 69) = %dn", max(19, 69)); printf("max(abc, def) = %sn", max("abc", "def")); return 0; // cout; cin;
  • 27. C хэл дээр нэмэгдсэн C++ ойлголт –Анхны утга онооход илэрхийлэл бичиж болно. double a = 12 * 3.25; double b = a + 1.112; a = a * 2 + b; double c = a + b * a; –Локал хувьсагч зарлах for (int i = 0; i < 4; i++) // i –г локалаар зарлав
  • 28. C хэл дээр нэмэгдсэн C++ ойлголт –Глобал, локал хувьсагч ижил нэртэй байж болно. #include <iostream.h> double a = 128; int main () { double a = 256; cout << "Local a: " << a << endl; cout << "Global a: " << ::a << endl; return 0; }
  • 29. C хэл дээр нэмэгдсэн C++ ойлголт –New, delete –width() ба setw() // iomanip.h –Функц, оператор дахин тодорхойлох гэх, мэт Дараах эх сурвалжаас дэлгэрүүлж үзнэ үү. 1.http://www.4p8.com/eric.brasseur/cppcen.html#l3 2.Эсвэл google ээр “from c to c++” хайлтын үр дүн