Top Banner
C++ Classes & Объект хандалгат программчлал
29

001 c++ class охп

Dec 22, 2014

Download

Education

ОХП, класс, С++
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 001 c++ class охп

C++ Classes &

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

Page 2: 001 c++ class охп

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

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

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

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

Page 3: 001 c++ class охп

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

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

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

Page 4: 001 c++ class охп

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

• ОХП (OOP) – Өгөгдөл (юмсын шинж чанар), функц (зан

төлөв) –ийг багцлан класс (анги) гэж нэрлэгдэх зүйлд капсул болгох.

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

функц эсвэл арга гэнэ.

Page 5: 001 c++ class охп

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

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

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

class class_name{.….….…;}

Классын бие (data member + methodsmethods)

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

Page 6: 001 c++ class охп

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

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

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

Page 7: 001 c++ class охп

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

class class_name{

private:………

public:………

;}

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

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

Page 8: 001 c++ class охп

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

– public: • Классын гаднаас шууд хандаж болно. Нийтийн

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

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

private public шинж чанар

Хэмжээ,Бие нь

Page 9: 001 c++ class охп

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

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

class Circle} private:

double radius; public:

void setRadius(double r);double getDiameter();

double getArea();double getCircumference();

{;

Бусад класс болон гаднаас уг мэдээллийг шууд авч чадахгүй . Энэ классын функууд л хандана.

Классын гаднаас хандаж болох ба, эдгээр функцууд гишүүн Радиус өгөгдөл рүү хандаж чадна.

Page 10: 001 c++ class охп

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

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

Circle *c;гэж зарлаж болно. c1, c2 тойрог объекттэй боллоо.• Объектийг зарламагц тухайн объект

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

Page 11: 001 c++ class охп

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

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

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

тодорхойлогдоно)

Page 12: 001 c++ class охп

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

class Circle} private:

double radius; public:

Circle();Circle(int r); void setRadius(double r);double getDiameter();double getArea();double getCircumference();

{;

Аргументгүй байгуулагч

Нэг аргументтай байгуулагч

Page 13: 001 c++ class охп

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

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

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

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

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

…}

Page 14: 001 c++ class охп

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

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 15: 001 c++ class охп

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 16: 001 c++ class охп

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

• Классын гишүүнд хандахдаа– Struct-ийн гишүүнд ханддагтай адил– (.) цэг операторыг ашиглах

• Объект• Заалт объект

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

Page 17: 001 c++ class охп

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 18: 001 c++ class охп

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 19: 001 c++ class охп

Устгагч

• Устгагч– Тусгай гишүүн функц– Классын нэртэй ижил

• (~) операторыг өмнө нь бичнэ

– Аргументгүй– Утга буцаагүй– Дахин тодорхойлохгүй– Объектийн ашигласан санах ойг

• дахин ашиглах• Динамикаар удирдах

Page 20: 001 c++ class охп

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

• Цагтай ажиллах класс.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 21: 001 c++ class охп

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 22: 001 c++ class охп

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

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

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

Page 23: 001 c++ class охп

OOP ашиглах шаардлага

1. Программыг хялбарчлах2. Программын харагдах байдал

• Мэдээлэл нуугдмал:– Класс л мэдээллийг өөрөө боловсруулах

3. Программ хангамжийн дахин ашиглагдах байдал• Классын объект бусад классын гишүүн байж болно

Page 24: 001 c++ class охп

OOPОбъектуудын хоорондын харилцааг ашиглан

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

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

Page 25: 001 c++ class охп

C хэл дээр нэмэгдсэн C++ ойлголт

–// мөр дуустал тайлбар–Заалт хувьсагчint ix; // ix нь “жинхэнэ" хувьсагчint &rx = ix; // rx нь ix-ийн "alias” ix = 1; // rx == 1 үнэнrx = 2; // ix == 2 үнэн

Page 26: 001 c++ class охп

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) = %d\n", max(19, 69));

printf("max(abc, def) = %s\n", max("abc", "def")); return 0; // cout; cin;

}

Page 27: 001 c++ class охп

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 –г локалаар зарлав

Page 28: 001 c++ class охп

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;

}

Page 29: 001 c++ class охп

C хэл дээр нэмэгдсэн C++ ойлголт–New, delete –width() ба setw() // iomanip.h–Функц, оператор дахин тодорхойлохгэх, мэт

Дараах эх сурвалжаас дэлгэрүүлж үзнэ үү.1.http://www.4p8.com/eric.brasseur/cppcen.ht

ml#l32.Эсвэл google ээр “from c to c++” хайлтын үр

дүн