C++ Classes & Object Oriented...

Preview:

Citation preview

C++ Classes

ОХП

Лекц-9

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

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

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

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

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

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

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

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

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

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

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

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

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

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

class_nameclass

{

….

….

….

};

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

member + methods)

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

Жишээ нь:

class haritsag { public: double undur;

double gun;

double urgun;};

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

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

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

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

class_nameclass

{

private:

public:

};

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

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

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

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 гишүүн

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

}

Устгагч

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

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

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

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

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

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

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

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

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

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

{

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

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

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

дуудагдана

Recommended