II. Template and Function
- អ្វីជា Template?
ផលប្រយោជន៍របស់វា?
វាមានផលប្រយោជន៍ដូចជា៖ ការបង្កើត Template មួយជំនួសការសរសេរកូដដដែលៗ
- អ្វីទៅជា Template 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;
}
}
- អ្វីជា Template Class?
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;
}
- អ្វីទៅជា Exception ?
បង្កើតទម្រង់ 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
- អ្វីទៅជា Overloading?
- របៀបបង្កើត Overloading របស់ ៖
- Comparison (<,>,==,…) : intoperator sign(parameter);
- Input/Output
- Input: friendistream&operator>>(istream&is,class_name&obj_name);
- Output: friendostream&operator<<(ostream&os, class_name&obj_name);
- Postfix operator: class_nameoperator ++(int){ … }
- Prefix operator: class_nameoperator ++() { … }
- Postfix operator: class_nameoperator –(int){ … }
- Prefix operator: class_nameoperator –() { … }
- បើគេមាន class ដូចខាងក្រោម ចូលសរសេរ Definition សម្រាប់Function និមួយៗរបស់ class ។
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){
}
IV. Polymorphism
- អ្វីទៅជា Polymorphism?
ផលប្រយោជន៍របស់វា៖
ងាយស្រួលដល់ការបន្ថែម និងទាញយកលក្ខណៈថ្មីៗចំពោះ class ដែលជា derived class ។
ដោះស្រាយ បញ្ហាដែលស្ថិតក្នុងខ្សែស្រឡាយតែមួយចំពោះការប្រើប្រាស់ Function
Member ដែលមានឈ្មោះដូចគ្នា
តែលក្ខណៈខុសគ្នា ។
- អ្វីទៅជា Early Binding? Late Binding?
Late Binding គឺជាការចាប់យក function members របស់ classដែលស្ថិតនៅក្នុងខ្សែស្រឡាយតែមួយ មកប្រើក្នុងពេលrunដែលអាចផ្លាស់ប្តូរនៅពេល runបានឡើយ ។
- អ្វីទៅជា Abstruct?
ឧទាហរណ៍៖
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 ។
- គេឲ្យProgram ដែលសម្តែងឲ្យលក្ខណៈ Class ដូចខាងក្រោម៖
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:
//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 ចាប់យកFunctionmemberដែលមានឈ្មោះដូចគ្នាមក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:
Chapter 6: Template
- Template សិក្សាអំពីការបង្កើតពុម្ពគំរូ code សំរាប់ដោះស្រាយបញ្ហាអ្វីមួយដែលមាននលក្ខណៈដូចគ្នា ប៉ុន្តែខុសគ្នាដោយប្រភេទទិន្នន័យ ។ ការបង្កើតចេញនូវ Template គេអាចចំនូសឲ្យការសេសេរ code ដដែលៗ ហើយ Template រួមមាន template function and Template class ។
- Function template: គឺជាវិធីសាស្ត្រមួយសំរាប់កំនត់ចេញជា function
មួយសំរាប់ជំនួសឲ្យគ្រួសារនៃ function ទាំងឡាយ
ដែលស្ថិតនៅក្នុងលក្ខណៈការងារស្រដៀងគ្នា ។ នៅក្នុង function template នេះ
យ៉ាងហោចណាស់មាន formal ប៉ារ៉ាម៉ែត្រមួយមានប្រភេទទិន្នន័យទូទៅ(generic
type) ។
- Syntax:
returntype functionName(parameters);
- template class គឺជាការបង្កើតចេញនូវ class
មួយដែលអាចជំនួសឲ្យគ្រួសារនៃclass ទាំងឡាយ
និងត្រូវបានប្រើប្រាស់សំរាប់ធ្វើពុម្ភគំរូឲ្យ class ទាំងឡាយណាដែលមានចំនួន
data member ដូចគ្នា ប៉ុន្តែវាខុសគ្នាតែ datatype ឬ returntype ។
- Syntax:
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 ឬជាព្រឹត្តិការណ៌ដែលកើតមានឡើងដោយមិនបានរំពឹងទុកជាមុន ។
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 ។