set and get functions::
في البرمجه الكينونيه نحرص على تحقيق مبداء الـencapsulation(hiding data) لذلك الـdata members (attributes) تكون دائماُ private وبالتالي لا نستطيع الوصول لها من خارج الـclass
وللوصول لها من خارج الـ class نستخدم public functions داخل الـclass للتعامل مع الـprivate members ونستطيع مناداتها من خارج الـclass هذه الـfunctions هي ::get & set functions
Get function تستخدم لارجاع قيمه بينما الـset function تستخدم لاسناد القيم لمتغير معين
سيتوضح مفهوم الـset & get من خلال المثال التالي::
class Time
{
private:
int hour;
int minute;
int second;
public:
void setTime(int h*int m*int s)
{
hour =h;
minute=m;
second=s;
}// in this function we assigned values to private members
void setHour(int h)
{
hour =h;
}
void setMinute(int m)
{
minute=m;
}
void setSecond(int s)
{
second=s;
}
int getHour()
{
return hour;
}
int getMinute()
{
return minute;
}
int getSecond()
{
return second;
}
void printTime()
{
cout<<hour<<”:”<<minute<<”:”<<second<<endl;
}
};
void main()
{
Time A*B;………… Time من نوع objects عرفناهم كـ A and B
A.seTtime(12*40*50);…….set function.اعطاء قيم واسنادها بمناداة الـ
B.setTime(8*3*7);
A.pritTime();
int h ;
cin>>h;
B.setHour;
cout<<B.getHour();
}
من المثال السابق يتضح لنا مفهوم الـ set function وهو استخدامها لاسناد قيم لمتغير private ونستطيع مناداتها خارج الـ class وبما انها تسند قيم بالتالي تحتاج الى parameter list وتستقبل هذه القيم وتسندهم
اما بالنسبه للـget function فاننا نستخدمها للحصور على قيمه معينه لمتغير معين في اclass ولذلك دائما ترجع قيمه
Constructor and destructor :
اولاٌ:الـ constructor
· عباره عن public function داخل الـclass
· لها نفس اسم الـclass
· لا ترجع قيمه
· ليسى لها اي return type(void*int….etc)
· Called automatically when an object is created بمعنى انها تشتغل اتوماتيكياً اول ما ينخلق او ينتشىء الـobject وما تحتاج ان نناديها
انواع الـconstructor :
1. default constructor :
has an empty parameter list بمعني انه ليس لها اي parameters
2. constructor with parameter list :
له parameter list ويستقبل هذه القيم ويقوم باسنادها للمتغيرات كقيم اوليه للdata members
وعادةً يستخدم الـconstructor لاعطاء قيم اوليه للمتغيرات data members
او اذا اردنا عمل شي معين عند خلق اي object من نوع الـclass مثل عمل counter لعد كم object انخلق من هذا النوع
ويمكن ان يكون في الـclass الواحده اكثر من constructor ولكن هناك ملاحظه مهمه اذا كتبنا الconstructor with parameters من الضروري كتابه الdefault constructor
ولكن لا يشترط عند كتابه الـdefault constructor كتابه الconstructor with parameters
اي ان الـdefault يستطيع التوااجد لوحده بعكس الاخر constructor with parameters بحيث يحتاج وجود الـdefault قبله.
كما انه عند وجود اكثر من constructor لا يمكن ان يشتغل اكثر من واحد واحد فقط الذي سوف يشتغل وهو الconstructor الذي بيطابق الparameters الذي أًرسلت عند خلق الObj او قد لا يكون هنالك Parameters وبالتالي بيشتغل الdefault
ويستضح ذلك من خلال المثال التالي ::
{
int x*y;…………………….. by default private (no need to write it down)
public:
point ()
{
x=y=0;
cout<<”Hello” <<endl;
}// end of default constructor
};
void main()
{
point a;
point b;
point c;
}
Output:
Hello
Hello
Hello
Same example using 2 types of constructor ::
class point
{
int x*y;…………………….. by default private (no need to write it down)
i
public:
point ()
{
x=y=0;
cout<<”Hello you are in default constructor”<<endl;
}// end of default constructor
Point(int a*int b)
{
X=a;
Y=b;
Cout <<”Hello you are in constructor with 2 parameters ” <<endl;
}// end of constructor with 2 parameters
};
void main()
{
point A;….. run default constructor
point B(5*7);……….run second constructor
point C(3*4*5);…….Error coz no matching constructor exist
}
Output
Hello you are in default constructor
Hello you are in constructor with 2 parameters
ثانياً: destructor :
· هو عباره عن public function في الـclass
· لها نفس اسم الـclass ولكن يسبقها اشارة ~ للتعريف بها كـdestructor
· ليسى لها return type او parameter list
· Called automatically when an object die
معنى انها تشتغل اوتوما تيكيا عند موت الـobj ونعني بذلك انتهاء فترته في RAM(memory) سيتضح معنى ذلك من خلال المثال التالي
Ex:
class test
{
Int x*y ;
Public:
Test ()
{
Cout<<”default construcr”<<endl;
}//end of constructor
Test()~
{
Cout<<”Destructor”<<endl;
}
};
Void main()
{
Test A*B*C;
Test D;
{
Test E;
Test F;
}
Test G;
}
Output:
Default constructor…..for A
Default constructor …..for B
Default constructor…..for C
Default constructor…..for D
Default constructor…… for E
Default constructor…….for F
Destructor ……for F
Destructor…..for E
Default constructor…..for G
Destructor ….for G
Destructor ….for D
Destructor ….for C
Destructor ….for B
Destructor ….for A
من الملاحظ من الـoutput ان اخر Obj انخلق في الـBlock هو اول واحد يموت
ومن المعروف ان المتغيرات بشكل عام تنتهي او تموت عند نهايه الblock سواء كان block لجمله If او for بحيث انه يكون Local variable وليسى global variable
المفضلات