C++ Lesson

II.            Template and Function

  1. អ្វីជា Template?

Template គឺជាការសិក្សា នៃលក្ខណៈដែលបង្កើតពុម្ភគំរូ សម្រាប់ប្រើប្រាស់ដោះ​ស្រាយបញ្ហាណាមួយដែលមានលក្ខណៈដូចគ្នា តែមានប្រភេទទិន្នន័យខុសគ្នា ។

ផលប្រយោជន៍របស់វា?

វាមានផលប្រយោជន៍ដូចជា៖ ការបង្កើត Template មួយជំនួសការសរសេរកូដ​ដដែលៗ

  1. អ្វីទៅជា Template Function?

Template Function គឺជា Function មួយដែលជាពុម្ភគំរូសម្រាប់ការងាររួមគ្នាមួយ ដែលមានលក្ខណៈដូចគ្នា តែមាន ប្រភេទទិន្នន័យខុសគ្នា ។

Syntax Template Function

template<class Type1, class Type2, … >

datatypefunction_name (parameter…){ … }

ឧទាហរណ៍៖

template<class Type>

void Sort(Type *t,int n){

Type tmp;

for(int i=0;i<n;i++)

for(j=i+1;j<n;j++)

if (t[i]<t[j])

{ tmp=t[i];

t[i]=t[j];

t[j]=tmp;

}

}

  1. អ្វីជា Template Class?

Template Class គឺជា class ដែលជាពុម្ភគំរូសម្រាប់ ជំនួសឲ្យគ្រូសារ class ទាំងឡាយដែលមានលក្ខណៈដូចគ្នា ចំនួន Members ដូចគ្នា តែមាន Data Type ខុសគ្នា ។

Syntax Template Class

template<class Type1, class Type2, … >

classclass_name {

private:

Type1 data1;

Type2 data2;

public: datatypefunction_name(parameter…);

};

datatypeclass_name<Type1,Type2, …>::function_name(){ … }

Example

template<class Type1, class Type2>

class Test{

private:

Type1 data1;

Type2 data2;

public:

void Input();

void Output();

};

void Test<Type1,Type2>::Input(){

cout<<”\nEnter Data1: “; cin>>data1;

cout<<”\nEnter Data2: “; cin>>data2;

}

void Test<Type1,Type2>::Output(){

cout<<”\nData1: “<<data1;

cout<<”\nData2: “<<data2;

}

  1. អ្វីទៅជា​ Exception ?

Exception គឺជា Error ឬ ព្រឹត្តិការណ៍ ដែលកើតឡើងដោយមិនបានរំពឹងទុកមុន​ ។

បង្កើតទម្រង់ Exception

try{ …

throw … ;

}

catch(datatype variable){

}

Example:

Intx,y;

try{

cout<<”\nEnter x: “;

cin>>x;

cout<<”\nEnter y: “;

cin>>y;

if (y==0)

throw(y);

}

catch(int a){

cout<<”\nCannot Divide by Zero!”;

}

III.            Overloading

  1. អ្វីទៅជា Overloading?

Overloading គឺជាការប្រើប្រាស់នូវFunction ឬOperator ដែលមានឈ្មោះដូចគ្នាចំពោះ ការងារProcess ដែលមានលក្ខណៈដូចគ្នា ហើយ Compiler អាចស្គាល់អាស្រ័យដោយសារData type ខុសគ្នា និង​ចំនួនparameter​ ខុសគ្នា ។

  1. របៀបបង្កើត Overloading របស់​ ៖

–          Arithmetic (+,-,*,/)                  :    class_nameoperator sign(parameter);

–          Comparison (<,>,==,…)           :    intoperator sign(parameter);

–          Input/Output

  • Input: friendistream&operator>>(istream&is,class_name&obj_name);
  • Output: friendostream&operator<<(ostream&os, class_name&obj_name);

–          Increment (++)សម្រាប់​ Integer

  • Postfix operator: class_nameoperator ++(int){ … }
  • Prefix operator: class_nameoperator ++() { … }

–          Decrement (–)

  • Postfix operator: class_nameoperator –(int){ … }
  • Prefix operator: class_nameoperator –() { … }
  1. បើគេមាន class ដូចខាងក្រោម ចូលសរសេរ Definition សម្រាប់Function និមួយៗរបស់ class ។

class Test{

private: int x; float y;

public:

Test();

Test(int ,float);

int operator >(float s);

Test operator +(float s);

friendostream& operator <<(ostream& , Test&);

};

គេបាន

Test::Test():x(5),y(12.5){}

Test::Test(inta,float b):x(a),y(b){}

int Test::operator >(float s){

return (y>s);

}

Test operator +(float s){         y=y+s;                        return (*this); }

  • ostream& operator <<(ostream&os,Test&t){

os<<endl<<“x: ”<<t.x<<“\t y: ”<<t.y;

}

IV.            Polymorphism

  1. អ្វីទៅជា Polymorphism?

Polymorphism គឺជាលក្ខណៈនៃ based class អាចចាប់យក function member របស់ derived class ដែលអាចធ្វើការចាប់យកនៅពេល compile (static) ឬ run (dynamic) ។

ផលប្រយោជន៍របស់វា៖

ងាយស្រួលដល់ការបន្ថែម និងទាញយកលក្ខណៈថ្មីៗចំពោះ class ដែលជា derived class ។

ដោះស្រាយ បញ្ហាដែលស្ថិតក្នុងខ្សែស្រឡាយតែមួយ​ចំពោះការប្រើប្រាស់ Function

Member ដែលមានឈ្មោះដូចគ្នា

តែលក្ខណៈខុសគ្នា ។

  1. អ្វីទៅជា Early Binding? Late Binding?

Early Binding គឺជាការចាប់យក function members របស់​ classដែលស្ថិតនៅក្នុងខ្សែ​ស្រឡាយតែមួយ មកប្រើក្នុងពេល compile ហើយមិនអាចផ្លាស់ប្តូរនៅពេល runបាន​ឡើយ​​ ។

Late Binding គឺជាការចាប់យក function members របស់​ classដែលស្ថិតនៅក្នុងខ្សែ​ស្រឡាយតែមួយ មកប្រើក្នុងពេលrunដែលអាចផ្លាស់ប្តូរនៅពេល runបាន​ឡើយ​​ ។

  1. អ្វីទៅជា Abstruct?

Abstructគឺជា Base Class ដែលមាន Pure Virtual Function ដែលជា Virtual Function ដែលគ្មាន Definition ហើយ​Bodyរបស់វាត្រូវបានបង្ហាញរូបរាងនៅក្នុង sub Class ។

ឧទាហរណ៍៖

class Base{

public: virtual void Input()=0;

virtual void Output(){}

};

class A:public Base{

private: intx,y;

public: virtual void Input();

virtual void Output();

};

ទម្រង់Class ដែលមានលក្ខណៈជា Polymorphism គឺclass ដែលមានលក្ខណៈ Inheritance ។

  1. គេឲ្យProgram ដែលសម្តែងឲ្យលក្ខណៈ Class  ដូចខាងក្រោម៖

Base{

virtual void In()=0;

virtual void Out()=0;

};

Test1:                                                                                       Test2:

Data Members                                                                      Data Members

Function Members                                                             Function Members

ចូរ Design Class របស់ Diagramនេះ។

គេបាន៖

class Base{

public: virtual void In()=0;

virtual void Out()=0;

};

class Test1{

private: int x; float y;

public: virtual void In();

virtual void Out();

};

class Test2{

private: char ch; char str[20];

public: virtual void In();

virtual void Out();

};

//Yin Seng

Chapter 4: Overloading

  • Function Overloading: គឺជាការកំនត់ចេញ functions ទាំងឡាយដែលមានឈ្មោះដូចគ្នា ដើម្បី​ឲ្យ​ពួកវាអនុវត្តការងារប្រភេទដូចគ្នា ប៉ុន្តែមាន arguments ផ្សេងគ្នា ។ functions ទាំងឡាយដែល​មាន​ឈ្មោះដូចគ្នាមានលក្ខណៈ overloaded លុះ​ត្រា​តែ​ពួកវាត្រូវបានប្រកាសឡើងនៅក្នុង scope តែ​មួយ ។ សំរាប់ functions ទាំងឡាយ​ដែលមាន​ឈ្មោះដូចគ្នា ត្រូវបាន compiler ចាត់ទុកថា​ផ្សេង​គ្នា​អាស្រ័យទៅតាមប៉ារ៉ាម៉ែត្រជាចំនួនប៉ារ៉ាម៉ែត្រ ឬ ប្រភេទប៉ារ៉ាម៉ែត្ររបស់ពួកវា ។
  • Operator Overloading:គឺជាការបង្កើតចេញ​ការ​ងារ​ ថ្មីរបស់ប្រមាណវិធីខ្លះៗ ដែលមានរួចជា​ស្រេច​នៅក្នុង c++ សំរាប់អនុវត្តជាមួយនឹង object ។ operator overloading អាចអនុត្តតាមមធ្យោបាយ​ជា function members ឬ non-member function ។
    • Syntax:

returntype operator operatorsign([parameters]);

//operator assign (=)

student operator=(student& st){

Code=st.code;​​ return *this;}

//operator arithmetic (-,+,*,/,+=,-+,%)

student operator-(int a){

age=age-a; return *this; }

friend test operator+(test st1,test st2){

test pt;

pt.score=st1.score+st2.score;

return pt;    }

//operator comparation (<,>,<=,>=,!=,==)

Int operator<(test st){ return(this->age<st.age); }

//operator exstraction (>>)

friend istream& operator>>(istream& in,test& st){

cout<<”ID=”;in>>st.id;return in; }

//operator insection (<<)

friend ostream& operator<<(ostream& os,test& st){

out<<st.id;return out; }

Chapter 5: polymorphisms

  • Polymorphism សិក្សាអំពីក្រុមនៃobject​​ ចាប់យក​Function​memberដែលមាន​ឈ្មោះដូចគ្នាមក​Access ដោយ Function memberទាំងនោះមក​ពីclass​ផ្សេង​ៗគ្នាប៉ុន្តែនៅក្នុងខ្សែតែមួយ(hierarchy) ។
  • Early binding គឺជាការចាប់យក function member សំរាប់អនុវត្តការងារនៅពេល compile ដែលមាន​វលក្ខណៈជា derived class មួយត្រូវបាន inheritance នូវរាប់ methods របស់ base class ជា​ច្រើន​របស់វា ។ (static & compile binding)
  • Late binding គឺជាការជ្រើសរើសយក function member មកaccess នៅពេល run  ឬគេអាច​ហៅ​ថា dynamic binding ដែលវាគ្មានរូបរាងនៅពេល compile នោះទេ ។
  • Abstractbase class គឺជាclass មួយដែលមាន pure virtual function ដែលគ្មាន definition ។ ដើម្បី​ឲ្យ virtual function មួយក្លាយជា pure virtual function គេគ្រាន់តែកំណត់ឲ្យវាមានតំលៃ​ស្មើនឹង​សូន្យ​នៅត្រង់ declaration របស់វានៅក្នុង class scope ។
    • Syntax:

Virtual reterntype functionName([parameter])=0;

 

Chapter 6: Template

  • Template សិក្សាអំពីការបង្កើតពុម្ពគំរូ code សំរាប់​ដោះស្រាយបញ្ហាអ្វីមួយដែលមាននលក្ខណៈដូចគ្នា ប៉ុន្តែខុសគ្នាដោយប្រភេទទិន្នន័យ ។ ការបង្កើត​ចេញ​នូវ Template គេអាចចំនូសឲ្យការសេសេរ code ដដែលៗ ហើយ Template រួមមាន template function and Template class ។
  • Function template: គឺជាវិធីសាស្ត្រមួយ​សំរាប់​កំនត់​ចេញជា function មួយសំរាប់ជំនួសឲ្យ​គ្រួសារ​នៃ function ទាំងឡាយ ដែលស្ថិតនៅក្នុងលក្ខណៈ​ការងារ​ស្រដៀងគ្នា ។ នៅក្នុង function template នេះ យ៉ាង​ហោចណាស់មាន formal ប៉ារ៉ាម៉ែត្រ​មួយ​មានប្រភេទទិន្នន័យទូទៅ(generic type) ។
    • Syntax:

template<class type1,class type3,….>

returntype functionName(parameters);

  • template class គឺជាការបង្កើតចេញនូវ class មួយ​ដែលអាចជំនួសឲ្យគ្រួសារនៃclass ទាំងឡាយ និង​ត្រូវបានប្រើប្រាស់សំរាប់ធ្វើពុម្ភគំរូឲ្យ class ទាំង​ឡាយណាដែលមានចំនួន data member ដូចគ្នា ប៉ុន្តែ​វាខុសគ្នាតែ datatype ឬ returntype ។
    • Syntax:

template<class type1, class type2,….>

class test{

private:            type1 a; type2 b;

public:

void input(){cout<<”Input A,B=”;cin>>a>>b;}

void output();

}

//definition krav class

template<class type1,class type2>

void test<type1,type2>::output(){cout<<a<<b;}

//ka bro kas brer krong main declare

void main(){    test<int ,int>obj; }

  • Exception គឺជា error ឬជាព្រឹត្តិការណ៌ដែលកើត​​មានឡើងដោយមិនបានរំពឹងទុកជាមុន ។

Ex:

try{

if(b==0) throw b;

cout<<”Result=”<<(a/b)<<endl;

}catch(float ef){cout<<”Error”;}

Chapter 7: file

  • File គឺជាការប្រមូលផ្តុំ ឬសំណុំនៃតួអក្សរ​ដែល​ផ្ទុក​នៅក្នុង physical storage device ដូចជា diskettes, harddisk ជាដើម។ វាមានផលប្រយោជន៍រក្សារ​ទុកទិន្នន័យជាអចិន្រ្តៃយ៌ ។
  • ដំណាក់កាល Processfile ជាមូលដ្ឋានទាំង៤គឺ៖
    • ការប្រកាស File
    • បើក File
    • Process File
    • បិទ File
  • អនុគមន៍ member
    • seekg(): ត្រូវបានគេប្រើសំរាប់កំនត់ទីតាំង file pointer សំរាប់អនុវត្តនៅក្នុង Input stream របស់ random access file ។
    • tellg() :ប្រើសំរាប់ប្រាក់ពីទីតាំង(គិតជាbyte) របស់ current file pointer នៅក្នុង Input stream ។
    • seekp():ត្រូវបានគេប្រើសំរាប់កំនត់ទីតាំង file pointer សំរាប់អនុវត្តនៅក្នុង output stream របស់ random access file ។
    • tellg() :ប្រើសំរាប់ប្រាក់ពីទីតាំង(គិតជាbyte) របស់ current file pointer នៅក្នុង output stream ។
Advertisements

អំពីម្ចាស់ប្លក ហាក់ ដាវី
នាងខ្ញុំចូលចិត្តចែករំលែក អ្វីដែលចេះ អ្វីដែលដឹង អ្វីដែលស្រាវជ្រាវឃើញ ព្រមទាំងចំនេះដឹងថ្មីៗជូនបងប្អូនទាំងអស់គ្នា ដើម្បីអភិវឌ្ឃន៌សមត្ថភាពខាងពត៌មានវិទ្យា អោយមានភាពរីកចម្រើនខ្លាំងផងដែរ។ I am here to share what i got.hope you enjoy it Contact me by my E-mail: davy_hak@yahoo.com hakdavyciedcnaughtystudent@gmail.com

ឆ្លើយ​តប

Fill in your details below or click an icon to log in:

ឡូហ្កូ WordPress.com

អ្នក​កំពុង​បញ្ចេញ​មតិ​ដោយ​ប្រើ​គណនី WordPress.com របស់​អ្នក​។ Log Out / ផ្លាស់ប្តូរ )

រូប Twitter

អ្នក​កំពុង​បញ្ចេញ​មតិ​ដោយ​ប្រើ​គណនី Twitter របស់​អ្នក​។ Log Out / ផ្លាស់ប្តូរ )

រូបថត Facebook

អ្នក​កំពុង​បញ្ចេញ​មតិ​ដោយ​ប្រើ​គណនី Facebook របស់​អ្នក​។ Log Out / ផ្លាស់ប្តូរ )

Google+ photo

អ្នក​កំពុង​បញ្ចេញ​មតិ​ដោយ​ប្រើ​គណនី Google+ របស់​អ្នក​។ Log Out / ផ្លាស់ប្តូរ )

កំពុង​ភ្ជាប់​ទៅ​កាន់ %s

%d bloggers like this: