Saturday, March 22, 2014

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 ។

មៀច ចំណាន Author: មៀច ចំណាន

Hi there! I'm Chamnan. Welcome to my small blog. I want to share to you all about Website tips, Computer software, Khmer fonts, IT books and more... hope you will enjoy it. :D :)

Related Posts

Copyright © 2023 ITSupport4KH All Rights Reserved. WP themonic converted by Bloggertheme9.