23
C++ Classes ОХП Лекц-9 Багш: Д.Саулегүл

C++ Classes & Object Oriented Programmingsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/...модульчлах, полиморфизм, удамшил зэргээс бүрдэнэ

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

Page 1: C++ Classes & Object Oriented Programmingsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/...модульчлах, полиморфизм, удамшил зэргээс бүрдэнэ

C++ Classes

ОХП

Лекц-9

Багш: Д.Саулегүл

Page 2: C++ Classes & Object Oriented Programmingsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/...модульчлах, полиморфизм, удамшил зэргээс бүрдэнэ

Объект хандалгат программчлал

Объект тодорхойлон программчлах.

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

Процедур дээр үндэслэсэн (C шиг) программчлалаас зарчмын хувьд өөр

Page 3: C++ Classes & Object Oriented Programmingsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/...модульчлах, полиморфизм, удамшил зэргээс бүрдэнэ

Объект хандалгат программчлал Объектуудын хоорондын харилцааг

ашиглан программ бичих программчлалын хандлага (парадигм)-ыг ОХП гэдэг. Өгөгдөл, арга (methods буюу функц)-аас бүрдэх хэрэглэгчийн тодорхойлсон төрлийг класс гэнэ. Объект нь класс (анги)-н элемент юм. Программчлах технологи нь өгөгдлийн хийсвэрлэл, капсулдах буюу багцлах (encapsulation), мэдээ дамжуулах, модульчлах, полиморфизм, удамшил зэргээс бүрдэнэ.

Объект нь мэдээлэл хүлээн авна, өгөгдлийг боловсруулна, бусад объектэд мэдээ дамжуулна. (Бие даасан машин шиг л)

Page 4: C++ Classes & Object Oriented Programmingsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/...модульчлах, полиморфизм, удамшил зэргээс бүрдэнэ

Объект хандалгат программчлал

ОХП (OOP) ◦ Өгөгдөл (юмсын шинж чанар), функц (зан төлөв) –ийг багцлан класс (анги) гэж нэрлэгдэх зүйлд капсул болгох.

Class нь хэрэглэгчийн тодорхойлсон төрөл. ◦ Өгөгдөл (data members) –г гишүүн өгөгдөл ◦ Функц (member functions or methods)-г гишүүн функц эсвэл арга гэнэ.

Page 5: C++ Classes & Object Oriented Programmingsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/...модульчлах, полиморфизм, удамшил зэргээс бүрдэнэ

C++-ийн класс

Классыг тодорхойлохдоо class түлхүүр үгийг ашиглана.

Классын бие нь { } ; хаалтад байрлана (ямагт цэгтэй таслалаар дуусгана).

class_nameclass

{

….

….

….

};

Классын бие (data

member + methods)

Зөв_нэр_өгөх

Page 6: C++ Classes & Object Oriented Programmingsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/...модульчлах, полиморфизм, удамшил зэргээс бүрдэнэ

Жишээ нь:

class haritsag { public: double undur;

double gun;

double urgun;};

Page 7: C++ Classes & Object Oriented Programmingsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/...модульчлах, полиморфизм, удамшил зэргээс бүрдэнэ

C++-ийн класс

Классын бие дотор private: бa public: түлхүүр үгийг ашиглан гишүүний хандах эрхийг тогтооно. ◦ Хандах эрх бичээгүй бол private гэж үзнэ

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

Page 8: C++ Classes & Object Oriented Programmingsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/...модульчлах, полиморфизм, удамшил зэргээс бүрдэнэ

C++-ийн класс

class_nameclass

{

private:

public:

};

рublic гишүүдийн хэсэг

private гишүүдийн хэсэг

Page 9: C++ Classes & Object Oriented Programmingsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/...модульчлах, полиморфизм, удамшил зэргээс бүрдэнэ

C++-ийн класс Гишүүдийн хандах эрх

◦ public: Классын гаднаас шууд хандаж болно. Нийтийн хандалт гэх ба хаалттай гишүүдийг гадаад хэсэгтэй холбох үүргийг гүйцэтгэнэ.

◦ private: Зөвхөн классын гишүүн функцууд хандана Зөвхөн классын дотоод хэсэгт хэрэглэгдэнэ.

private public шинж чанар

Хэмжээ,

Бие нь

Page 10: C++ Classes & Object Oriented Programmingsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/...модульчлах, полиморфизм, удамшил зэргээс бүрдэнэ

Классын жишээ

Тойргийн мэдээллийг багцлан класс үүсгэвэл

class Circle

{

private:

double radius;

public:

void setRadius(double r);

double getDiameter();

double getArea();

double getCircumference();

};

Бусад класс болон гаднаас уг

мэдээллийг шууд авч чадахгүй .

Энэ классын функууд л хандана.

Классын гаднаас хандаж болох

ба, эдгээр функцууд гишүүн

Радиус өгөгдөл рүү хандаж чадна.

Page 11: C++ Classes & Object Oriented Programmingsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/...модульчлах, полиморфизм, удамшил зэргээс бүрдэнэ

Классын объект үүсгэх

Одоо тодорхойлсон класс төрлийн хувьсагч зарлан ашиглах боломжтой болсон ба уг хувьсагчийг object гэнэ. int i,j,n; гэдэг шиг

Circle c1,c2; Circle *c; гэж зарлаж болно. c1, c2 тойрог

объекттэй боллоо. Объектийг зарламагц тухайн объект

өгөгдлүүдийнхээ хэмжээгээр хуваарилагдан үүснэ.

Page 12: C++ Classes & Object Oriented Programmingsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/...модульчлах, полиморфизм, удамшил зэргээс бүрдэнэ

Байгуулагч функц

Байгуулагч: ◦ Public хандах эрхтэй ◦ Объектийг зарлахад гишүүн өгөгдлийг анхны утгаар хангаж өгөх үүрэгтэй

◦ Классын нэртэй ижил нэртэй ◦ Утга буцаахгүй ◦ Хэдэн хэдэн байгуулагч байж болно. (дахин тодорхойлогдоно)

Page 13: C++ Classes & Object Oriented Programmingsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/...модульчлах, полиморфизм, удамшил зэргээс бүрдэнэ

Байгуулагч функц

class Circle

{

private:

double radius;

public:

Circle();

Circle(int r);

void setRadius(double r);

double getDiameter();

double getArea();

double getCircumference();

};

Аргументгүй

байгуулагч

Нэг аргументтай

байгуулагч

Page 14: C++ Classes & Object Oriented Programmingsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/...модульчлах, полиморфизм, удамшил зэргээс бүрдэнэ

Гишүүн функцийг зохион байгуулах

Class implementation: Гишүүн функцийн код бичих.

Хоѐр арга байна: 1. Классын гадна талд бичиж өгөх

Мужлал тогтоох (::) оператор ашиглана Өөр классууд ижил гишүүн функцтэй байж

болно

◦ Бичигдэх хэлбэр БуцаахТөрөл ClassName::MemberFunctionName( ){

}

Page 15: C++ Classes & Object Oriented Programmingsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/...модульчлах, полиморфизм, удамшил зэргээс бүрдэнэ

Гишүүн функцийг зохион байгуулах

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();

};

Дотор нь

бичих

Page 16: C++ Classes & Object Oriented Programmingsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/...модульчлах, полиморфизм, удамшил зэргээс бүрдэнэ

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);

}

Гадна нь бичсэн байдал

Page 17: C++ Classes & Object Oriented Programmingsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/...модульчлах, полиморфизм, удамшил зэргээс бүрдэнэ

Классын гишүүнд хандах

Классын гишүүнд хандахдаа ◦ Struct-ийн гишүүнд ханддагтай адил

◦ (.) цэг операторыг ашиглах

Объект

Заалт объект

◦ Эсвэл (->) чиглүүлэх операторыг ашиглана

Заагч

Page 18: C++ Classes & Object Oriented Programmingsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/...модульчлах, полиморфизм, удамшил зэргээс бүрдэнэ

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);

}

int main()

{

Circle c1,c2(7);

cout<<“The area of c1:”

<<c1.getArea()<<“\n”;

//c1.raduis = 5;//syntax error

c1.setRadius(5);

cout<<“The circumference of c1:”

<< c1.getCircumference()<<“\n”;

cout<<“The Diameter of c2:”

<<c2.getDiameter()<<“\n”;

}

Эхний

байгуулагч

дуудагдав

Хоёр дахь

байгуулагч

дуудагдав

Радиус нь

private гишүүн

Page 19: C++ Classes & Object Oriented Programmingsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/...модульчлах, полиморфизм, удамшил зэргээс бүрдэнэ

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);

}

int main()

{

Circle c(7);

Circle *cp1 = &c;

Circle *cp2 = new Circle(7);

cout<<“The are of cp2:”

<<cp2->getArea();

}

Page 20: C++ Classes & Object Oriented Programmingsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/...модульчлах, полиморфизм, удамшил зэргээс бүрдэнэ

Устгагч

Устгагч ◦ Тусгай гишүүн функц

◦ Классын нэртэй ижил (~) операторыг өмнө нь бичнэ

◦ Аргументгүй

◦ Утга буцаагүй

◦ Дахин тодорхойлохгүй

◦ Объектийн ашигласан санах ойг дахин ашиглах

Динамикаар удирдах

Page 21: C++ Classes & Object Oriented Programmingsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/...модульчлах, полиморфизм, удамшил зэргээс бүрдэнэ

Өөр нэг классын жишээ

Цагтай ажиллах класс.

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();

};

Устгагч

Page 22: C++ Classes & Object Oriented Programmingsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/...модульчлах, полиморфизм, удамшил зэргээс бүрдэнэ

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;

}

Эхлээд заагчийг

динамикаар

хуваарилах

хэрэгтэй

Page 23: C++ Classes & Object Oriented Programmingsoyolerdem.edu.mn/online/wp-content/uploads/2017/03/...модульчлах, полиморфизм, удамшил зэргээс бүрдэнэ

void Time::printTime()

{

cout<<"The time is : ("<<*hour<<":"<<*minute<<":"<<*second<<")"

<<endl;

}

Time::~Time(){

delete hour; delete minute; delete second;

}

int main()

{

Time *t;

t= new Time(3,55,54);

t->printTime();

t->setHour(7);

t->setMinute(17);

t->setSecond(43);

t->printTime();

delete t;

cin.get();

}

Output:

The time is : (3:55:54)

The time is : (7:17:43)

Press any key to continue

Устгагч: санах ойг чөлөөлөх

Энэ биелэхэд байгуулагч

дуудагдана