You are on page 1of 25

Object – Oriented Programming in C++ (OOP)

1 : ‫ ﻟﻴﻄﺒﻊ ﺍﻟﻘﻴﻢ ﺍﻟﺘﺎﻟﻴﺔ‬C++ ‫• ﺍﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﺑﻠﻐﺔ‬


2 2
3 3 3
4 4 4 4 #include <iostream.h>
5 5 5 5 5 void main()
{
int i,j;
for (i=1;i<=5;i++)
1 {
22 : ‫ ﺍﻟﻨﺘﺎﺋﺞ‬o for (j=1;j<=i;j++)
333 cout<<i;
4444 cout<<endl;
55555 }
Press any key to continue }

n!= n(n-1) (n-2 )× … 1 ‫ ﺣﻴﺚ‬n ‫ ﻣﻀﺮﻭﺏ‬C++ ‫• ﺍﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﺑﻠﻐﺔ‬

5 ‫ ﺍﻟﻨﺘﺎﺋﺞ‬o #include <iostream.h>


fact = 120 void main()
Press any key to continue {
int n,i,fact;
fact=1;
cin>>n;
for (i=1;i<=n;i++)
fact=fact*i;
cout<<"fact = "<<fact<<endl;
}

. 10 ‫ ﺇﱃ‬1 ‫ ﻹﳚﺎﺩ ﻣﻀﺮﻭﺏ ﺍﻷﻋﺪﺍﺩ ﻣﻦ‬C++ ‫• ﺍﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﺑﻠﻐﺔ‬


fact 1=1 ‫ ﺍﻟﻨﺘﺎﺋﺞ‬o #include <iostream.h>
fact 2=2 void main()
{
fact 3=6 int n,i,fact;
fact 4=24 for (n=1;n<=10;n++)
fact 5=120 {
fact 6=720 fact=1;
fact 7=5040 for (i=1;i<=n;i++)
fact=fact*i;
fact 8=40320 cout<<"fact "<<n<< "="<<fact<<endl;
fact 9=362880 }
fact 10=3628800
Press any key to continue }

-1-
‫ ﺍﻟﱪﻧﺎﻣﺞ ﳚﺐ ﺃﻥ ﻳﻜﺮﺭ‬x * x * x * x = x4 ‫ ﻣﻦ ﺍﳌﻤﺮﺍﺕ ﻛﻤﺜﺎﻝ‬n ‫ ﻣﻦ ﻧﻔﺴﻬﺎ‬x ‫ ﺑﺄﻥ ﻳﻀﺮﺏ‬xn ‫ ﻟﻴﺤﺴﺐ ﻗﻴﻤﺔ‬C++ ‫• ﺍﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﺑﻠﻐﺔ‬
-: ‫ ﻳﻄﺒﻊ ﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﻨﺘﻴﺠﺔ ﰲ ﺍﻟﺼﻮﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ‬n , x ‫ ﻭﻛﻞ ﺯﻭﺝ ﻣﻦ ﻗﻴﻢ‬n ‫ ﻭ‬x ‫ ﻣﻦ ﻗﻴﻢ‬k ‫ﻫﺬﻩ ﺍﻟﻌﻤﻠﻴﺔ ﻟﻌﺪﺩ‬

x raised to the power of n = r


xn ‫ ھي نتيجة حساب‬r ‫حيث‬

#include <iostream.h>
void main()
{
int x,n,k,i,j;
long r;
cin>>k;
for (j=1;j<=k;j++)
{
cin>>x>>n;
r=1;
for (i=1;i<=n;i++)
r=r*x;
cout<<x<<" raised to the power of
"<<n<<"= "<<r<<endl;
}
}

2 ‫ﺍﻟﻨﺘﺎﺋﺞ‬ •
2 3
2 raised to the power of 3= 8
3 2
3 raised to the power of 2= 9
Press any key to continue

#include <iostream.h>
#include <math.h>
void main()
{
int x,n,k,i,j;
long r;
cin>>k; ‫ﺣﻞ ﺁﺧﺮ‬
for (j=1;j<=k;j++)
{
cin>>x>>n;
r=1;
for (i=1;i<=n;i++)
r=pow(x,n);
cout<<x<<" raised to the power of
"<<n<<"= "<<r<<endl;
}
}

-2-
‫ ﻣﻦ ﺍﺠﻤﻟﻤﻮﻋﺎﺕ‬n ‫ ﻟﻴﺤﺪﺩ ﺃﻛﱪ ﻗﻴﻤﺔ ﻣﻦ ﺑﲔ ﺛﻼﺙ ﻗﻴﻢ ﻭﻳﻜﺮﺭ ﻫﺬﻩ ﺍﻟﻌﻤﻠﻴﺔ ﻟـ‬C++ ‫• ﺍﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﺑﻠﻐﺔ‬
#include <iostream.h>
void main()
{
int x,y,z,k,i,max;
cin>>k;
for (i=1;i<=k;i++)
{
cin>>x>>y>>z;
max=x;
if (y>max)
max=y;
if (z>max)
max=z;
cout<<"maximum of group "<<i<<" = "<<max<<endl;
}
}

2 ‫ ﺍﻟﻨﺘﺎﺋﺞ‬o
4 5 6
maximum of group 1 = 6
1 2 3
maximum of group 2 = 3
Press any key to continue

: ‫• ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﺪﻭﺍﻝ ﺍﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﳊﺴﺎﺏ ﺍﻟﻌﻼﻗﺔ ﺍﻟﺘﺎﻟﻴﺔ‬


r!
h= ;n > r
( n − r )!
#include <iostream.h>
int fact (int);
void main()
4 ‫ ﺍﻟﻨﺘﺎﺋﺞ‬o {
2 int r,n;
24 cin>>r>>n;
Press any key to continue cout<<fact(r)/fact(n-r)<<endl;
}
int fact (int a)
{
int i,fact1;
fact1=1;
for (i=1;i<=a;i++)
fact1=fact1*i;
return fact1;
}

-3-
‫ ﻣﻦ ﺍﺠﻤﻟﻤﻮﻋﺎﺕ‬k‫ ﻹﳚﺎﺩ ﺃﻛﱪ ﻗﻴﻤﺔ ﻣﻦ ﺑﲔ ﺛﻼﺙ ﻗﻴﻢ ﻭﺫﻟﻚ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﺪﻭﺍﻝ ﺍﻟﱪﻧﺎﻣﺞ ﳚﺐ ﺃﻥ ﻳﻜﺮﺭ ﻫﺬﻩ ﺍﻟﻌﻤﻠﻴﺔ ﻟـ‬C++ ‫• ﺍﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﺑﻠﻐﺔ‬
‫ﻭﰲ ﻛﻞ ﻣﺮﺓ ﳛﺪﺩ ﺃﻛﱪ‬
. ‫ﻗﻴﻤﺔ ﻟﻜﻞ ﳎﻤﻮﻋﺔ‬
#include <iostream.h>
void max();
void main()
{
max();
}
void max()
{
int a,b,c;
int k,i,max;
cin>>k;
for (i=1;i<=k;i++)
{
cin>>a>>b>>c;
max=a;
if (b>max)
max=b;
if (c>max)
max=c;
cout<<"the max of group "<<i<<"= "<<max<<endl;
}

2 ‫ ﺍﻟﻨﺘﺎﺋﺞ‬o
4 5 6
the max of group 1= 6
1 2 3
the max of group 2= 3
Press any key to continue
‫ﺣﻞ ﺁﺧﺮ‬

-4-
#include <iostream.h>
void max(int,int,int,int);
void main()
{
int x,y,z,k,i;
cin>>k;
for (i=1;i<=k;i++)
{
cin>>x>>y>>z;
max(x,y,z,i);
}
}
void max(int a,int b, int c,int i)
{
int max1;
max1=a;
if (b>max1)
max1=b;
if (c>max1)
max1=c;
cout<<"the max of group "<<i<<"= "<<max1<<endl;

( ‫ ﺑﻮﺻﺔ‬12 = ‫ ﻟﻴﻘﺮﺃ ﺍﳌﺴﺎﻓﺔ ﺑﺎﻟﺒﻮﺻﺎﺕ ﰒ ﻳﻄﺒﻊ ﺍﻟﻨﺎﺗﺞ ﺑﺎﻟﻘﺪﻡ ﻭﺍﻟﺒﻮﺻﺔ ﻋﻠﻤﹰﺎ ﺑﺄﻥ )ﺍﻟﻘﺪﻡ‬C++ ‫ ﺍﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﺑﻠﻐﺔ‬struct ‫• ﺑﺎﺳﺘﺨﺪﺍﻡ‬
#include <iostream.h>
struct distance
{
int feet;
float inche;
}s1;
void main()
{
s1.feet = 0;
cin>>s1.inche;
while(s1.inche >=12)
{
s1.feet++;
s1.inche-=12;
}
cout<<s1.feet <<"\t"<<s1.inche <<endl;
}

24 ‫ ﺍﻟﻨﺘﺎﺋﺞ‬o
2 0
Press any key to continue

-5-
‫)‪Object – Oriented Programming in C++ (OOP‬‬
‫) ﺍﻟﱪﳎﺔ ﺍﻟﺸﻴﺌﻴﺔ – ﺃﻭ ﺍﻟﱪﳎﺔ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻴﻪ – ﺍﻟﱪﳎﺔ ﺍﳌﻮﺟﻪ ﳓﻮ ﺍﳍﺪﻑ – ﺍﻟﱪﳎﺔ ﺍﻟﻜﺎﺋﻨﻴﺔ (‬

‫‪Class‬‬

‫‪Private‬‬ ‫‪Public‬‬

‫‪Data‬‬ ‫‪Function‬‬ ‫‪Data‬‬ ‫‪Function‬‬

‫أھم مزايا لغة ‪C++‬‬

‫تدعم لغة ‪ ++C‬المقومات األساسية للبرمجة الكائنية ‪:-‬‬

‫‪ -1‬التغليف و إخفاء البيانات ‪:-‬‬

‫تدعم ‪++C‬صفة التغليف و إخفاء البيانات عبر إنشاء أنواع جديدة تسمى بالطبقات ‪ Classes‬و من ثم يقوم الصف المحدد بالعمل ككائن مغلف‬
‫تماما و يستعمل كوحدة متكاملة بحيث يبقى عمله الداخلي مستورا و ال يحتاج المستعمل إلى فھم ھذا العمل المخبأ ‪ ،‬ينبغي أن يعرف كيفية استعماله‬
‫فقط ‪.‬‬

‫‪-2‬الوراثة و إعادة االستعمال ‪:-‬‬

‫توفر ‪ C++‬دعما فعاال إلعادة االستعمال من خالل الوراثة ‪ inheritance.‬يمكن إعالن نموذج جديد يكون امتدادا لصف موجود و اشتقاقا منه ‪.‬‬
‫و نسمي الصف الجديد صفا مشتقا أحيانا‪.‬‬

‫‪- 3‬التعددية الشكلية ‪:-‬‬

‫إن الدالة تكون واحدة ‪ ،‬و لكن أطوارھا متعددة بحسب نوع الفصيلة ‪ .‬و ھذا ھو أحد المبادئ االقتصادية في لغة سي‪ ++‬لتوفير الوقت و الجھد ‪:‬‬
‫استخدام نفس الدالة لتحقيق مھام مختلفة ويختلف البرنامج المكتوب بلغة ‪ OOP‬عن البرنامج المكتوب باللغه التقليديه فيما يلي‪:‬‬

‫‪ -1‬وحدة بناء البرنامج‪:‬‬

‫كان البرنامج التقليدي عباره عن داله رئيسيه ومجموعة دوال فرعيه ‪ ،‬ويتم إستدعاء الدوال الفرعيه من داخل الداله الرئيسيه حسب تسلسل‬
‫البرنامج ‪ ،‬كما في لغه ‪ C‬التقليديه ‪ ،‬أما البرامج المكتوبة بأسلوب ‪ OOP‬فقد أصبحت وحدة البرنامج ھي الفئة أو الصنف ) ‪ ( Class‬التي تتكون‬
‫من البيانات والدوال التي تعمل على ھذه البيانات ويتم إستدعاء الدوال كعناصر لألصناف على البيانات حسب فكرة البرنامج‪.‬‬

‫‪ -2‬النظره الي البيانات‪:‬‬

‫في البرنامج التقليدي كان مجھود المبرمج ينصب على كود البرنامج أي سطور البرنامج التي تتولى سير العمليات بينما كانت النظره الي البيانات‬
‫نظره ثانوية ولكن أسلوب برمجة األھداف الموجھه فتعتبر البيانات جزء مھم من البرنامج ‪ .‬وبالتالي أصبحت لدينا مكتبه ليس فقط من الدوال بل‬
‫مكتبه من الفصائل التي تحتوي على البيانات والدوال التي تتعامل معھا ووفرت ھذه المكتبه الكثير من المجھود الذي يبذله المبرمج حيث كان يقوم‬
‫بتعريف البيانات ثم الدوال التي تتعامل معھا كل مره ‪ .‬وتظھر مكتبة االصناف في برمجة النوافذ حيث يوجد صنف للنافذه الرئيسيه للبرنامج بھا‬
‫جميع البيانات التي تخص النافذه وكذلك الدوال التي تتعامل مع ھذه النافذه ويوجد صنف لمربع الحوار وبھا بيانات مربع الحوار وكذلك الدوال التي‬
‫تتعامل معھا فأصبحت وحدة بناء البرنامج كبيره وليس على المبرمج كتابة كل شئ في البداية‪.‬‬

‫لذلك فقد نشأت لغة ‪ C++‬على بعض المفاھيم االساسية المرتبطة بمفھوم البرمجة الموجھة نحو االشياء‪ OOP :‬و الذى يعتمد على ما يلى‪:‬‬
‫•الكائن ‪: Object‬‬
‫عبارة عن وحدة معرف عليھا مجموعة عمليات تحوي مجموعة من البيانات تسمى خصائص أو صفات مثال طالب ‪ ،‬قلم ‪ ،‬حاسب‪.‬‬
‫كائنات نشطة )حية ‪) Animate Objects:‬وھي التي نحس فيھا فنجد لھا حركة ونشاط ‪.‬‬
‫‪-6-‬‬
‫كائنات غير نشطة )غير حية ‪) Inanimate Objects:‬ھي التي ال نالحظ لھا نشاط أو حركة أو وقع أينما وجدت‪.‬‬
‫نقوم باحتواء البيانات ‪ (Data (attributes‬والطرق ‪ (Methods (behavior‬في حزمة ‪ package‬ھي ما نطلق عليه "كائنات"‪ Objects‬؛ حيث‬
‫أن بيانات وطرق أي كائن ترتبط ببعضھا ارتباط وثيق‪ .‬ھذا الكائن يتميّز بخاصية التخفي ‪ Information Hiding‬نعني بالتخفي ھنا أنه بإمكان‬
‫الكائنات االتصال والتعامل مع بعضھا البعض مع عدم معرفة أحدھا كيف تك ّون اآلخر! أي أن تفاصيل التكوين ھي المخفيّة حتى عن الكائنات‬
‫نفسھا؛ فمن المؤكد أننا نعرف كيف نقود السيارة بكفاءة عالية دون معرفة تفاصيل ھندستھا‪ .‬تسمى ھذه الخاصية في البرمجة بـ ‪Abstraction‬أي‬
‫تجريد البيانات‪.‬‬
‫•األصناف ‪: Classes‬‬
‫ھي عبارة عن أنواع تحوي مجموعة من الكائنات التي تشترك في الخصائص والعمليات مثال صنف الحاسب و صنف اإلنسان وصنف الطالب ‪.‬‬
‫والصنف يمثل المواصفات العامة للكائنات التي تنتمي لھذا الصنف ‪ ،‬بينما الكائنات تمثل شئ قائم بذاتة أو شئ له ذاتية تنتمي لذلك الصنف‪.‬‬

‫الفرق بين الصنف والكائن‪:‬‬

‫كل ما في الوجود ھو كائن فأنا وأنت وھذه الورقة والقلم كلھا كائنات ‪ Object‬ولك منھا خصائص محددة ويستطيع القيام بعمليات محددة‪ .‬أما‬
‫الصنف فھو مجموعة من الكائنات المتشابھة فالرجال صنف وزيد كائن منه والنساء صنف وأمل كائن منه‪ .‬وكمثال آخر الصنف البرمجي‪" :‬بطاقة‬
‫دوام "الذي يحوي الطرائق المطلوبة لحساب األجر و عدد ساعات الدوام أما الكائن "بطاقة دوام سامر" والكائن "بطاقة دوام حسن" فإنھما‬
‫يستفيدان من اإلجراءات الموجودة في الصنف" بطاقة دوام" لحساب أجر سامر أو أجر حسن‬

‫•التغليف‪: Encapsulation‬‬

‫وھو من الفوائد المھمة التي يقدمھا أسلوب التصميم الكائني وھو ان تكون البيانات وإجراءات البيانات داخل غالف واحد‬

‫•الوراثة ‪: Inheritance‬‬

‫ھي أن يرث صنف أو كائن معين الخصائص المعرفة في صنف آخر مما يساعد على إعادة إستخدام األصناف التي تم إنشاؤھا من قبل‪.‬‬

‫مثال ‪ :‬المدير يملك نفس خصائص الموضف باإلضافة إلي خصائصه‬

‫‪Employee‬‬

‫الرقم‬
‫االسم‬
‫الراتب‬
‫المسمى الوظيفي‬

‫‪Manager‬‬
‫إمتيازات‬
‫صالحيات‬

‫•التحميل الزائد للمؤثرات ‪operators Overloading‬‬

‫المقدرة على ربط مؤثر معين بداله عضو في صنف ويتم استدعاؤھا عند تطبيق المؤثر على أحد كائنات الصنف‪.‬‬
‫‪o‬الميزة‪:‬‬
‫‪. -1‬إستخدام األسلوب المستخدم في التعامل مع األصناف )األنواع( المعرفه مسبقا في التعامل مع األصناف المعرفه من قبل المستخدم‪.‬‬
‫‪ -2‬أكثر وضوحا و فھما‪.‬‬
‫‪o‬شروط التحميل الزائد للمؤثرات‪:‬‬
‫‪. -1‬ال ينبغي تغيير وظيفة المؤثر عند التحميل‪.‬‬
‫‪ -2‬ال ينبغي التغيير في ترتيب أولويه‪.‬‬

‫•التحميل الزائد للدوال‪Functions Overloading‬‬

‫ھو عبارة عن تعريف دالة بنفس االسم لتقوم بأكثر من وظيفة‬


‫مثالً‪:‬‬
‫الدالة )(‪ getavg‬والتي يمكن استخدامھا لحساب متوسط اعداد صحيحة واعداد حقيقية واعداد سداسية عشرية وھكذا‪...‬‬
‫يمكن تحميل الدلة بشكل زائد عن طريقين‪:‬‬
‫‪ -1‬عدد الوسائط التي تستقبلھا الدالة‬
‫‪-7-‬‬
‫‪ -2‬نوع الوسائط التي تستقبلھا الدالة‬
‫ويمكن ان يكون التحميل الزائد عن طريق نوع وعدد الوسائط في آن واحد‪.‬‬

‫ﺍﻟﻔﺮﻕ ﺑﲔ ﺍﻟﱪﳎﺔ ﺍﻟﺸﻴﺌﻴﺔ ‪ OOP‬ﻭﺍﻟﱪﳎﺔ ﺍﻟﺘﻘﻠﻴﺪﻳﺔ ‪: Traditional Programming‬‬


‫‪ .1‬ﻭﺣﺪﺓ ﺑﻨﺎﺀ ﺍﻟﱪﻧﺎﻣﺞ ‪.‬‬
‫‪ .2‬ﺍﻟﺒﻴﺎﻧﺎﺕ ‪.‬‬

‫ƒ ﺍﻟﱪﳎﺔ ﺍﻟﺸﻴﺌﻴﺔ ‪:‬ﻫﻲ ﺃﺳﻠﻮﺏ ﺟﺪﻳﺪ ﻟﻠﱪﳎﺔ ﻣﻦ ﺣﻴﺚ ﺷﻜﻞ ﺍﻟﱪﻧﺎﻣﺞ ﻭﻣﻦ ﺣﻴﺚ ﻭﺣﺪﺓ ﺑﻨﺎﺀ ﺍﻟﱪﻧﺎﻣﺞ ﻭﻣﻦ ﺣﻴﺚ ﺍﳋﺼﺎﺋﺺ ﺍﳉﺪﻳﺪﺓ ﺍﻟﱵ ﺗﺴﻤﺢ ﻬﺑﺎ‬
‫ﻫﺬﺍ ﺍﻷﺳﻠﻮﺏ ‪ ،‬ﺣﻴﺚ ﻳﻌﺘﱪ ﺑﻨﺎﺀ ﺍﻟﱪﻧﺎﻣﺞ ﻫﻲ ﺍﻟﻔﺌﺔ )‪ (Class‬ﺍﻟﱵ ﺗﺘﻜﻮﻥ ﻣﻦ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﻣﻌﻬﺎ ﺍﻟﺪﻭﺍﻝ ﺍﻟﱵ ﺗﻌﻤﻞ ﻫﺬﻩ ﺍﻟﺒﻴﺎﻧﺎﺕ ‪.‬‬

‫ƒ ﺍﻟﻔﺮﻕ ﺑﲔ ﺍﻟﱪﳎﺔ ﺍﻟﺸﻴﺌﻴﺔ ﻭﺍﻟﱪﳎﺔ ﺍﻟﺘﻘﻠﻴﺪﻳﺔ ‪:‬‬


‫ﳜﺘﻠﻒ ﺍﻟﱪﻧﺎﻣﺞ ﺍﳌﻜﺘﻮﺏ ﺑﺄﺳﻠﻮﺏ ‪ oop‬ﻋﻦ ﺍﻟﱪﻧﺎﻣﺞ ﺍﳌﻜﺘﻮﺏ ﺑﺎﻟﻄﺮﻳﻘﺔ ﺍﻟﺘﻘﻠﻴﺪﻳﺔ ‪-:‬‬
‫‪ .1‬ﻭﺣﺪﺓ ﺑﻨﺎﺀ ﺍﻟﱪﻧﺎﻣﺞ ‪ :‬ﻛﺎﻥ ﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﺘﻘﻠﻴﺪﻱ ﻋﺒﺎﺭﺓ ﻋﻦ ﺩﻭﺍﻝ ﺭﺋﻴﺴﻴﺔ ﻭﳎﻤﻮﻋﺔ ﺩﻭﺍﻝ ﻓﺮﻋﻴﺔ ﻭﻳﺘﻢ ﺍﺳﺘﺪﻋﺎﺀ ﺍﻟﺪﻭﺍﻝ ﺍﻟﻔﺮﻋﻴﺔ ﻣﻦ ﺩﺍﺧﻞ ﺍﻟﺪﺍﻟﺔ ﺍﻟﺮﺋﻴﺴﻴﺔ‬
‫ﺣﺴﺐ ﺗﺴﻠﺴﻞ ﺍﻟﱪﻧﺎﻣﺞ ‪ ،‬ﺃﻣﺎ ﰲ ﺍﻟﱪﻧﺎﻣﺞ ﺍﳌﻜﺘﻮﺏ ﺑﺄﺳﻠﻮﺏ ‪ oop‬ﻓﻘﺪ ﺃﺻﺒﺤﺖ ﻭﺣﺪﺓ ﺑﻨﺎﺀ ﺍﻟﱪﻧﺎﻣﺞ ﻓﺌﺔ )‪ (Class‬ﺍﻟﱵ ﻳﺘﻜﻮﻥ ﻣﻦ ﺍﻟﺒﻴﺎﻧـﺎﺕ‬
‫ﻭﺍﻟﺪﻭﺍﻝ ﺍﻟﱵ ﺗﻌﻤﻞ ﻋﻠﻰ ﻫﺬﻩ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﻳﺘﻢ ﺍﺳﺘﺪﻋﺎﺀ ﺍﻟﺪﻭﺍﻝ ﻛﻌﻨﺎﺻﺮ ﻟﻠﻔﺼﺎﺋﻞ ﻋﻠﻰ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺣﺴﺐ ﻓﻜﺮﺓ ﺍﻟﱪﻧﺎﻣﺞ ‪.‬‬
‫‪ .2‬ﺍﻟﻨﻈﺮﺓ ﺇﱃ ﺍﻟﺒﻴﺎﻧﺎﺕ ‪ :‬ﰲ ﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﺘﻘﻠﻴﺪﻱ ﻛﺎﻥ ﳎﻬﻮﺩ ﺍﳌﱪﻣﺞ ﻳﻨﺺ ﻋﻠﻰ ﻛﻮﺩ ﺍﻟﱪﻧﺎﻣﺞ ﺃﻱ ﺳﻄﻮﺭ ﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﱵ ﺗﺘﻮﱃ ﺳﲑ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺑﻴﻨﻤﺎ ﻛـﺎﻥ‬
‫ﺍﻟﻨﻈﺮﺓ ﺇﱃ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻧﻈﺮﺓ ﺛﺎﻧﻮﻳﺔ ‪ ،‬ﻭﻟﻜﻦ ﰲ ﺃﺳﻠﻮﺏ ﺑﺮﳎﺔ ‪ oop‬ﻓﺘﻌﺘﱪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺟﺰﺀ ﻣﻬﻢ ﻣﻦ ﺍﻟﱪﻧﺎﻣﺞ ﻭﺑﺎﻟﺘﺎﱄ ﺃﺻﺒﺤﺖ ﻟﺪﻳﻨﺎ ﻣﻜﺘﺒﺔ ﻣﻦ ﺍﻟﻔﺼﺎﺋﻞ‬
‫ﺍﻟﱵ ﲢﺘﻮﻱ ﻋﻠﻰ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﺍﻟﺪﻭﺍﻝ ﺍﻟﱵ ﺗﺘﻌﺎﻣﻞ ﻣﻌﻬﺎ ‪.‬‬
‫ƒ ﺍﻟﻄﺒﻘﺔ ‪ /‬ﺍﻟﺼﻨﻒ ‪ /‬ﺍﻟﻔﺼﻴﻠﺔ ‪: Class‬‬
‫‪ o‬ﺍﻟﺼﻴﻐﺔ ﺍﻟﻌﺎﻣﺔ ‪Class Structure :‬‬

‫‪Class‬‬ ‫‪ClassName‬‬
‫{‬
‫‪Private :‬‬
‫‪Private Data and Functions‬‬
‫‪Public :‬‬
‫‪Public Data and Functions‬‬
‫;}‬

‫ﺳﺆﺍﻝ ‪ :‬ﻋﺮﻑ ‪ Class‬؟‬


‫ƒ ﺍﻷﺻﻨﺎﻑ ﻭﺍﻟﻜﺎﺋﻨﺎﺕ ‪: Classes and Objects‬‬
‫ﺇﻥ ﻋﻼﻗﺔ ﺍﳍﺪﻑ ﻣﻊ ﺍﻟﺼﻨﻒ ﺗﺸﺒﻪ ﻛﺜﲑﹰﺍ ﻋﻼﻗﺔ ﺍﳌﺘﻐﲑ ﻣﻊ ﺍﳌﻌﻄﻴﺎﺕ ﻭﻳﻘﺎﻝ ﺃﻥ ﺍﳍﺪﻑ ﻫﻮ ﻣﺜﺎﻝ ﻋﻠﻰ ﺍﻟﺼﻨﻒ ﻣﺜﻠﻤﺎ ﻧﻘﻮﻝ ﺃﻥ ﺍﻟﺴﻴﺎﺭﺓ ﺷﻔﺮﻟﻴﻪ ﻫﻮ ﻣﺜﺎﻝ ﻋﻦ‬
‫ﺍﳌﺮﻛﺒﺎﺕ ‪ ،‬ﻭﺍﻟﻐﺮﺽ ﻣﺸﺘﻖ ﻣﻦ ﺍﻟـ ‪ Class‬ﻣﺜﻞ ﺃﲪﺪ ﻭﳏﻤﺪ ﻭﺣﺴﲔ ﲨﻴﻌﻬﺎ ﺃﲰﺎﺀ ﺗﺸﲑ ﺇﱃ ﳎﻤﻮﻋﺔ ﺍﻟﻄﻼﺏ ﻣﺜﺎﻝ ﺁﺧﺮ ﻭﺳﻴﺎﺭﺓ ﺷـﻔﺮﻟﻴﻪ ﻭﺗﻮﻳﻮﺗـﺎ‬
‫ﻼ ﺗﺘﻤﻴﺰ ﲟﺠﻤﻮﻋـﺔ ﻣـﻦ‬ ‫ﻭﻣﺎﺯﺩﺍ ﻛﻠﻬﺎ ﺃﲰﺎﺀ ﺗﺸﲑ ﺇﱃ ﳎﻤﻮﻋﺔ ﻣﻦ ﺍﻟﺴﻴﺎﺭﺍﺕ ‪.‬ﻭﻟﻜﻞ ﻏﺮﺽ ﳎﻤﻮﻋﺔ ﻣﻦ ﺍﻟﺼﻔﺎﺕ ﻭﺍﻷﻓﻌﺎﻝ ‪ methods‬ﻓﺎﻟﺴﻴﺎﺭﺍﺕ ﻣﺜ ﹰ‬
‫ﺍﻟﺼﻔﺎﺕ ﻣﺜﻞ ﺍﻟﻨﻮﻉ ﻭﺍﳌﻮﺩﻳﻞ ﻭﺍﻟﻠﻮﻥ ﻭﺍﻟﺴﺮﻋﺔ ‪ ...‬ﺇﱁ ‪ ،‬ﻭﳎﻤﻮﻋﺔ ﺍﻷﻓﻌﺎﻝ ﻣﻨﻬﺎ ﺍﻟﺴﲑ – ﺍﻟﺘﻮﻗﻒ – ﺍﻻﻟﺘﻔﺎﻑ – ﺍﻟﺘﺮﺍﺟﻊ ‪ ...‬ﺇﱁ ‪ ،‬ﻭﻛـﺬﻟﻚ ﺍﻹﻧﺴـﺎﻥ‬
‫ﻳﺘﻤﻴﺰ ﲟﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻟﺼﻔﺎﺕ ﻣﻨﻬﺎ ‪ :‬ﺍﻟﺘﺤﺪﺙ – ﺍﻷﻛﻞ – ﺍﻟﺸﺮﺏ – ﺍﻟﻨﻮﻡ – ﺍﳌﺸﻲ – ﺍﻟﺴﻔﺮ ‪ ...‬ﺇﱁ ‪.‬‬

‫‪-8-‬‬
‫ﻃﺎﻟﺐ‬ ‫ﻃﺎﻟﺐ‬ ‫ﺍﻟﺼﻔﺎﺕ ‪ :‬ﺍﺳﻢ ﺍﻟﺼﻨﻒ‬
‫ﺍﻟﺼﻔﺎﺕ ‪:‬‬ ‫ﺍﻟﺼﻔﺎﺕ ‪:‬‬
‫أغراض‬
‫‪20‬‬ ‫ﺃﲪﺪ‬ ‫ﺍﻟﻌﻤﺮ‬ ‫ﺍﻻﺳﻢ‬

‫ﺣﺎﺳﺐ‬ ‫‪80‬‬ ‫ﺍﻟﺘﺨﺼﺺ‬ ‫ﺍﻟﺪﺟﺔ‬


‫ﺍﻷﻓﻌﺎﻝ ‪:‬‬
‫ﺍﻷﻓﻌﺎﻝ ‪:‬‬ ‫ﺍﻷﻓﻌﺎﻝ ‪:‬‬

‫ﺭﺳﻮﺏ‬ ‫ﳒﺎﺝ‬ ‫ﺭﺳﻮﺏ‬ ‫ﳒﺎﺝ‬

‫ﲣﺮﺝ‬ ‫ﲣﺮﺝ‬

‫ﻃﺎﻟﺐ‬
‫ﺍﻟﺼﻔﺎﺕ ‪:‬‬

‫‪20‬‬ ‫ﺃﲪﺪ‬

‫ﻋﻠﻮﻡ‬ ‫‪80‬‬

‫ﺍﻷﻓﻌﺎﻝ ‪:‬‬

‫ﺭﺳﻮﺏ‬ ‫ﳒﺎﺝ‬

‫ﲣﺮﺝ‬

‫ƒ ﻭﺍﻹﻋﻼﻥ ﻋﻦ ﺍﻟﻔﺼﻴﻠﺔ ﻳﺘﻜﻮﻥ ﻣﻦ ‪-:‬‬


‫‪ (1‬ﺃﻭ ﹰﻻ ﺍﻟﻜﻠﻤﺔ ﺍﶈﺠﻮﺯﺓ )‪ (Class‬ﻳﻠﻴﻬﺎ ﺍﺳﻢ ﺍﻟﻔﺼﻴﻠﺔ )‪ (ClassName‬ﻭﳜﻀﻊ ﻟﻘﻮﺍﻋﺪ ﺍﻟﻔﺼﻴﻠﺔ ﻫﻲ ‪-:‬‬
‫ﺃﻭ ﹰﻻ ‪ :‬ﺃﻥ ﻳﻜﻮﻥ ﺍﺳﻢ ﺍﻟﻔﺼﻴﻠﺔ ﺃﺣﺪ ﺍﻟﻜﻠﻤﺎﺕ ﺍﶈﺠﻮﺯﺓ ﺃﻭ ﺍﻟﻜﻠﻤﺎﺕ ﺍﻟﱵ ﲢﻤﻞ ﻣﻌﲎ ﺧﺎﺹ ﻣﺜﻞ ‪. main‬‬
‫ﺛﺎﻧﻴﹰﺎ ‪ :‬ﳝﻜﻦ ﺃﻥ ﳛﺘﻮﻱ ﺍﻻﺳﻢ ﻋﻠﻰ ﺃﻱ ﺣﺮﻑ ﻣﻦ ﺍﳊﺮﻭﻑ ﺍﻷﲜﺪﻳﺔ )‪ (a - z‬ﺳﻮﺍﺀ ﻛﺎﻧﺖ ﺻﻐﲑﺓ ﺃﻭ ﻛﺒﲑﺓ ﺃﻭ ﺃﻱ ﺭﻗﻢ ﻣﻦ ﺍﻷﺭﻗﺎﻡ )‪ (0 - 9‬ﻛﻤﺎ ﳝﻜﻦ‬
‫ﺃﻥ ﳛﺘﻮﻱ ﺍﻟﺸﺮﻃﺔ ﺍﻟﺴﻔﻠﻰ )_( ﻭﻟﻜﻦ ﺃﻥ ﻻ ﻳﺒﺪﺃ ﺑﺮﻗﻢ ‪.‬‬
‫ﺛﺎﻟﺜﹰﺎ ‪ :‬ﻻ ﻗﻴﻮﺩ ﻋﻠﻰ ﻃﻮﻝ ﺍﻻﺳﻢ ‪ ،‬ﻭﺗﺘﻴﺢ ﻫﺬﻩ ﺍﳌﻴﺰﺓ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺃﲰﺎﺀ ﻣﻌﱪﺓ ﻋﻦ ﻣﻀﻤﻮﻬﻧﺎ ‪ ،‬ﻭﻣﻦ ﺍﻷﻓﻀﻞ ﺩﺍﺋﻤﹰﺎ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻻﺳﻢ ﺍﳌﻌﱪ ﻋﻦ ﳏﺘﻮﻯ ﺍﻟﻔﺼﻴﻠﺔ‬
‫ﻟﺘﺴﻬﻴﻞ ﺍﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺍﻟﻔﺼﺎﺋﻞ ‪.‬‬
‫ﻼ ﺍﺳﻢ ﺍﻟﺼﻨﻒ ‪ My_CLASS‬ﳜﺘﻠﻒ ﻋﻦ ‪ my_class‬ﻭﻛﻼﳘﺎ ﳜﺘﻠﻒ ﻋـﻦ‬ ‫ﺭﺍﺑﻌﹰﺎ ‪ :‬ﺍﳊﺮﻭﻑ ﺍﻟﻜﺒﲑﺓ ﻭﺍﻟﺼﻐﲑﺓ ﻟﻴﺴﺖ ﻣﺘﻜﺎﻓﺌﺔ ﰲ ‪ C++‬ﻓﻤﺜ ﹰ‬
‫‪. MY_class‬‬
‫‪ (2‬ﲢﺪﻳﺪ ﺩﺭﺟﺔ ﺍﳊﻤﺎﻳﺔ ‪ :‬ﻭﺗﺒﺪﺃ ﻋﺎﺩﺓ ﺑﺪﺭﺟﺔ ﺍﳊﻤﺎﻳﺔ ﺍﳋﺎﺻﺔ ‪ Private‬ﻭﺗﻠﻲ ﻫﺬﻩ ﺍﻟﻜﻠﻤﺔ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﺍﻟﺪﻭﺍﻝ ﺍﳋﺎﺻﺔ ﺑﺎﻟﻔﺼﻴﻠﺔ ‪.‬‬
‫‪ (3‬ﲢﺪﻳﺪ ﺩﺭﺟﺔ ﺍﳊﻤﺎﻳﺔ ﺍﻷﺧﺮﻯ ‪ :‬ﻣﺜﻞ ‪ Public‬ﻭﺗﻮﺟﺪ ﺛﻼﺛﺔ ﺃﻧﻮﺍﻉ ﻣﻦ ﺩﺭﺟﺎﺕ ﺍﳊﻤﺎﻳﺔ ﻛﻤﺎ ﰲ ﺍﳉﺪﻭﻝ ﺍﻟﺘﺎﱄ ‪:‬‬

‫‪-9-‬‬
‫ﺍﳌـﻌـﻨـﻰ‬ ‫ﺩﺭﺟﺔ ﺍﳊﻤﺎﻳﺔ‬
‫ﺗﻌﲏ ﺃﻥ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺧﺎﺻﺔ ﻬﺑﺬﻩ ﺍﻟﻔﺼﻴﻠﺔ ﻭﻻ ﳝﻜﻦ ﺍﻟﻮﺻـﻮﻝ‬
‫‪Private‬‬
‫ﺇﻟﻴﻬﺎ ﺇﻻ ﺑﻮﺍﺳﻄﺔ ﻫﺬﻩ ﺍﻟﻔﺼﻴﻠﺔ‪.‬‬
‫ﺗﻌﲏ ﺃﻥ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﱵ ﺗﻠﻴﻬﺎ ﻋﺎﻣـﺔ ‪ ،‬ﻭﳝﻜـﻦ ﻷﻱ ﺩﺍﻟـﺔ‬
‫‪Public‬‬
‫ﺍﻟﻮﺻﻮﻝ ﺇﻟﻴﻬﺎ ﻭﺍﺳﺘﻌﻤﺎﳍﺎ ‪.‬‬
‫ﺗﻔﻴﺪ ﰲ ﺣﺎﻟﺔ ﺗﻮﺭﻳﺚ ﺍﻟﻔﺼﻴﻠﺔ ‪ ،‬ﺣﻴﺚ ﻳﺴﻤﺢ ﺑﺎﻟﻔﺼـﺎﺋﻞ‬
‫‪Protected‬‬
‫ﺍﻟﱵ ﻭﺭﺛﺖ ﺑﺎﺳﺘﻌﻤﺎﻝ ﺃﻋﻀﺎﺀ ﺍﻟﻔﺼﻠﻴﺔ ﺍﻷﺳﺎﺳﻴﺔ ‪.‬‬

‫• ﺍﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﻳﻘﺮﺃ ﻋﺪﺩﻳﻦ ﰒ ﻳﻄﺒﻊ ﺍﻟﻌﺪﺩﻳﻦ ﺑﺎﺳﺘﺨﺪﺍﻡ ‪: Class‬‬


‫>‪#include <iostream.h‬‬
‫‪class smallobj‬‬
‫{‬
‫يمك ن كتاب ة ھ ذه الجمل ة بع د‬ ‫‪private :‬‬
‫قوس نھاية ‪class‬‬ ‫;‪int a,b‬‬
‫;‪}ob1,ob2‬‬ ‫‪public :‬‬
‫)‪void set_data(int d1,int d2‬‬
‫{‬
‫;‪a=d1‬‬
‫;‪b=d2‬‬
‫}‬
‫)(‪void show_data‬‬
‫{‬
‫;‪cout<<"Data are "<<a<<"\t"<<b<<endl‬‬
‫}‬
‫;}‬
‫)(‪void main‬‬
‫{‬
‫;‪smallobj ob1,ob2‬‬
‫;)‪ob1.set_data (5,10‬‬
‫;)‪ob2.set_data (3,4‬‬
‫;)(‪ob1.show_data‬‬
‫;)(‪ob2.show_data‬‬
‫}‬

‫أيضاً في ‪ void main‬نع ّرف‬


‫;‪Int n1,n2‬‬
‫;)‪Ob1.set_data(n1,n2‬‬ ‫‪Data are 5‬‬ ‫‪10‬‬ ‫‪ o‬ﺍﻟﻨﺘﺎﺋﺞ‬
‫‪Data are 3‬‬ ‫‪4‬‬
‫‪Press any key to continue‬‬

‫‪- 10 -‬‬
: ‫• ﺍﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﳛﺴﺐ ﺣﺎﺻﻞ ﲨﻊ ﻭﺿﺮﺏ ﻋﺪﺩﻳﻦ‬
#include <iostream.h>
class num
{
private :
int a,b;
public :
void set_data(int x,int y)
{
a=x;
b=y;
}
void show_number()
{
cout<<"the sum of number = "<<a+b<<endl;
cout<<"the multiplication of number = "<<a*b<<endl;
}
}num1;
void main()
{
int n1,n2;
cin>>n1>>n2;
num1.set_data (n1,n2);
num1.show_number ();
}

5 4 ‫ ﺍﻟﻨﺘﺎﺋﺞ‬o
the sum of number = 9
the multiplication of number = 20
Press any key to continue

- 11 -
π =3.14 2 π r= ‫ ﻭﺍﶈﻴﻂ‬π r2 = ‫ ﺍﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﻟﻴﺤﺴﺐ ﻣﺴﺎﺣﺔ ﻭﳏﻴﻂ ﺍﻟﺪﺍﺋﺮﺓ ﻋﻠﻤﹰﺎ ﺑﺄﻥ ﺍﳌﺴﺎﺣﺔ‬class ‫• ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﻔﺼﺎﺋﻞ‬
#include <iostream.h>
class circle
{
private :
float r;
double area1,circum1;

public :
void area(float r1)
{
r=r1;
area1=3.14*r*r;
cout<<"the area = "<<area1<<endl;
}
void circum()
{
circum1=2*3.14*r;
cout<<"circle circum = "<<circum1<<endl;
}
};
void main()
{
circle ob1;
float n ;
cin>>n;
ob1.area(n);
ob1.circum ();
}

10 ‫ ﺍﻟﻨﺘﺎﺋﺞ‬o
the area = 314
circle circum = 62.8
Press any key to continue

- 12 -
: ‫• ﺍﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﳊﺴﺎﺏ ﺍﳌﺜﻠﺚ ﻣﻦ ﺍﻟﻌﻼﻗﺔ ﺍﻟﺘﺎﻟﻴﺔ‬
area = s( s − a )( s − b )( s − c )
‫ ﺣﻴﺚ ﻫﻲ ﺃﺿﻼﻉ ﺍﳌﺜﻠﺚ‬a,b,c
a+b+c
s=
2

#include <iostream.h>
#include <math.h>
class triangle
{
private :
float a,b,c,s,area;
public:
void set_data(float a1,float b1,float c1)
{
a=a1;
b=b1;
c=c1;
s=(a1+b1+c1)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
}
void show_data()
{
cout<<"the area of triangle = "<<area<<endl;
}
};
void main()
{
triangle ob1;
float n1,n2,n3;
cin>>n1>>n2>>n3;
ob1.set_data(n1,n2,n3);
ob1.show_data ();
}

10 10 10 ‫ ﺍﻟﻨﺘﺎﺋﺞ‬o
the area of triangle = 43.3013
Press any key to continue

- 13 -
. ‫ ﻟﻴﻘﺮﺃ ﺍﻟﺰﻣﻦ ﺑﺎﻟﺜﻮﺍﱐ ﰒ ﻳﻄﺒﻊ ﺍﻟﺰﻣﻦ ﻣﻘﺎﺳﹰﺎ ﺑﺎﻟﺴﺎﻋﺎﺕ ﻭﺍﻟﺪﻗﺎﺋﻖ ﻭﺍﻟﺜﻮﺍﱐ ﺍﳌﺘﺒﻘﻴﺔ‬C++ ‫• ﺍﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﺑﻠﻐﺔ‬
#include <iostream.h>
class timer
{
private :
int s,m,h;
public:
void time (int x)
{
s=x;
m=h=0;
while (x>=60)
{
m=m+1;
x=x-60;
}
while (m>=60)
{
h=h+1;
m=m-60;
}
cout<<h<<":"<<m<<":"<<x<<endl;
}
}ob1;
void main()
{
int n1;
cin>>n1;
ob1.time (n1);
}

3735 ‫ ﺍﻟﻨﺘﺎﺋﺞ‬o
1:2:15
Press any key to continue

- 14 -
‫ﺩﻭﺍﻝ ﺍﻟﺒﻨﺎﺀ )‪(Construction Functions‬‬
‫ﻫﻲ ﺩﻭﺍﻝ ﲢﻤﻞ ﺍﺳﻢ ﺍﻟﻔﺼﻴﻠﺔ ﻭﺗﺴﺘﺨﺪﻡ ﰲ ﺇﻋﻄﺎﺀ ﻗﻴﻢ ﺍﺑﺘﺪﺍﺋﻴﺔ ﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻔﺼﻴﻠﺔ ﺃﻭ ﺗﻨﻔﻴﺬ ﳎﻤﻮﻋﺔ ﺳﻄﻮﺭ ‪ ،‬ﺣﻴﺚ ﺃﻬﻧﺎ ﺗﻨﻔﺬ ﺗﻠﻘﺎﺋﻴﹰﺎ ﲟﺠﺮﺩ ﺇﻋـﻼﻥ ﻫـﺪﻑ‬
‫ﻟﻠﻔﺼﻴﻠﺔ ‪ .‬ﻭﻣﺜﺎﻝ ﻋﻠﻰ ﺫﻟﻚ ﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﺘﺎﱄ ‪:‬‬

‫>‪#include <iostream.h‬‬
‫‪class myclass‬‬
‫{‬
‫‪private:‬‬
‫;‪int a,b‬‬
‫‪public:‬‬
‫)‪myclass (int i,int j‬‬
‫{‬
‫;‪a=i‬‬
‫;‪b=j‬‬
‫}‬
‫)(‪void show_data‬‬
‫{‬
‫;‪cout<<"a= "<<a<<"\t"<<"b= "<<b<<endl‬‬
‫}‬
‫;}‬
‫)(‪void main‬‬
‫{‬
‫;)‪myclass ob1(5,7‬‬
‫;)( ‪ob1.show_data‬‬
‫}‬

‫‪a= 5‬‬ ‫‪b= 7‬‬ ‫‪ o‬ﺍﻟﻨﺘﺎﺋﺞ‬


‫‪Press any key to continue‬‬

‫ƒ ﺃﻧﻮﺍﻉ ﺩﻭﺍﻝ ﺍﻟﺒﻨﺎﺀ ‪:‬‬


‫‪ .1‬ﺩﺍﻟﺔ ﺑﻨﺎﺀ ﺑﺎﻟﺼﻮﺭﺓ ﺍﻟﻌﺎﻣﺔ ﻭﺫﻟﻚ ﻛﻤﺎ ﰲ ﺍﳌﺜﺎﻝ ﺍﻟﺴﺎﺑﻖ ﻭﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻦ ﺩﺍﻟﺔ ﳍﺎ ﻣﻌﺎﻣﻼﺕ ﺗﺴﺘﻘﺒﻠﻬﺎ ﻭﺗﺴﺘﻌﻤﻠﻬﺎ ‪.‬‬
‫‪ .2‬ﺩﺍﻟﺔ ﺳﺎﺑﻘﺔ ﺍﻟﺘﻌﺮﻳﻒ ‪ : Predefined Function‬ﺣﻴﺚ ﻳﺘﻢ ﺇﻋﻄﺎﺀ ﻗﻴﻢ ﳌﻌﺎﻣﻼﺕ ﺍﻟﺪﺍﻟﺔ ﻋﻨﺪ ﺍﻹﻋﻼﻥ ﻋﻨﻬﺎ ﻭﻳﻜﻮﻥ ﺫﻟﻚ ﺑﺎﻟﺼﻮﺭﺓ‬
‫)‪myclass (int a=2,int b=7‬‬ ‫ﺣﻴﺚ ﰎ ﺇﻋﻄﺎﺀ ﻗﻴﻢ ﺳﺎﺑﻘﺔ ﳌﻌﺎﻣﻼﺕ ﺍﻟﺪﺍﻟﺔ ﻳﺘﻢ ﺍﺳﺘﺪﻋﺎﺀ ﺍﻟﺪﺍﻟﺔ ﺑﺪﻭﻥ ﻣﻌﺎﻣﻼﺕ‬
‫{‬
‫_______‬ ‫ﻭﻟﻴﺘﻀﺢ ﺫﻟﻚ ﻣﻦ ﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﺘﺎﱄ ‪-:‬‬
‫}‬

‫‪- 15 -‬‬
‫ƒ ﻧﻔﺲ ﺍﻟﱪﻧﺎﻣﺞ ﻓﻘﻂ ﻫﺬﺍ ﺍﻟﺘﻌﺪﻳﻞ ﺍﳌﻮﺿﺢ ﺃﺩﻧﺎﻩ‬
‫)‪myclass (int i=5,int j=7‬‬
‫{‬
‫;‪a=i‬‬
‫;‪b=j‬‬
‫}‬
‫)(‪void show_data‬‬
‫{‬
‫;‪cout<<"a= "<<a<<"\t"<<"b= "<<b<<endl‬‬
‫}‬
‫;}‬
‫)(‪void main‬‬
‫{‬
‫;)‪myclass ob1(15,70‬‬
‫;)( ‪ob1.show_data‬‬
‫;‪myclass ob2‬‬
‫;)( ‪ob2.show_data‬‬
‫}‬

‫‪a= 15‬‬ ‫‪b= 70‬‬ ‫‪ o‬ﺍﻟﻨﺘﺎﺋﺞ‬


‫‪a= 5‬‬ ‫‪b= 7‬‬
‫‪Press any key to continue‬‬

‫ﻣﻼﺣﻈﺔ‬

‫ﳝﻜﻦ ﺍﺳﺘﺪﻋﺎﺀ ﺩﺍﻟﺔ ﺍﻟﺒﻨﺎﺀ ﺑﻘﻴﻤﺔ ﻓﻘﻂ ﺃﻭ ﻗﻴﻤﺘﲔ ﻭﰲ ﻫـﺬﻩ‬


‫ﺍﳊﺎﻟﺔ ﺳﻴﻘﻮﻡ ﺍﳌﺘﺮﺟﻢ ‪ Compile‬ﺑﺎﺳﺘﺨﺪﺍﻡ ﻫﺬﻩ ﺍﻟﻘـﻴﻢ‬
‫ﺑﺎﻟﺘﺮﺗﻴﺐ ﻭﺑﺎﻗﻲ ﺍﻟﻘﻴﻢ ﺗﺄﺧﺬ ﺍﻟﻘﻴﻢ ﺍﻻﺑﺘﺪﺍﺋﻴﺔ‬

‫‪ .3‬ﺩﻭﺍﻝ ﺫﺍﺕ ﻗﻴﻢ ﺛﺎﺑﺘﺔ ‪ :‬ﻫﺬﻩ ﺍﻟﺪﻭﺍﻝ ﲢﺘﻮﻱ ﻋﻠﻰ ﻗﻴﻢ ﺛﺎﺑﺘﺔ ﻻ ﳝﻜﻦ ﺗﻐﻴﲑﻫﺎ ﻋﻨﺪ ﺍﺳﺘﺪﻋﺎﺀ ﺍﻟﺪﺍﻟﺔ ﻷﻥ ﺍﻟﺪﺍﻟﺔ ﻟﻴﺲ ﳍﺎ ﻣﻌﺎﻣﻼﺕ ﻭﻟﻜﻦ ﺳﻄﻮﺭﻫﺎ ﺗﻌﻄﻲ‬
‫)(‪myclass‬‬ ‫ﻗﻴﻤﹰﺎ ﻷﻋﻀﺎﺀ ﺍﻟﻔﺼﻴﻠﺔ ﻛﻤﺎ ﰲ ﺍﳌﺜﺎﻝ ﺍﻟﺘﺎﱄ ‪:‬‬
‫{‬ ‫ƒ ﻭﰲ ﻫﺬﻩ ﺍﻟﺪﺍﻟﺔ ﰎ ﺇﻋﻄﺎﺀ ﻗﻴﻢ ﺛﺎﺑﺘﺔ ﻷﻋﻀﺎﺀ ﺍﻟﻔﺼﻴﻠﺔ ﻣﻊ ﻋﺪﻡ ﻭﺟﻮﺩ ﻣﻌﺎﻣﻼﺕ ﺗﺴﻤﺢ ﺑﺘﻐﻴﲑ ﻫﺬﻩ ﺍﻟﻘﻴﻢ‬
‫;‪a=5‬‬
‫;‪b=6‬‬ ‫• ﺍﳌﺜﺎﻝ ﻫﻮ ﻧﻔﺲ ﺍﳌﺜﺎﻝ ﺍﻟﺴﺎﺑﻖ ﻓﻘﻂ ﺍﻟﺘﻌﺪﻳﻞ ﺍﳌﻮﺿﺢ ﺃﺩﻧﺎﻩ ‪:‬‬
‫}‬
‫)(‪myclass‬‬
‫{‬
‫;‪a=5‬‬
‫;‪b=6‬‬
‫}‬
‫‪a= 5‬‬ ‫‪b= 6‬‬ ‫‪ o‬ﺍﻟﻨﺘﺎﺋﺞ‬ ‫‪.‬‬
‫‪Press any key to continue‬‬ ‫‪.‬‬
‫‪.‬‬
‫)(‪void main‬‬
‫{‬
‫;‪myclass ob1‬‬
‫;)(‪ob1.show_data‬‬
‫}‬
‫‪- 16 -‬‬
‫• ﺍﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﳛﺴﺐ ﻣﺴﺎﺣﺔ ﺍﳌﺜﻠﺚ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺩﻭﺍﻝ ﺍﻟﺒﻨﺎﺀ‬
area = s( s − a )( s − b )( s − c )
‫ ﺣﻴﺚ ﻫﻲ ﺃﺿﻼﻉ ﺍﳌﺜﻠﺚ‬a,b,c a+b+c
s=
2

#include <iostream.h>
#include <math.h>
class triangle
{
private:
float a,b,c,s;
double area;
public:
triangle (float x,float y,float z)
{
a=x;
b=y;
c=z;
s=(x+y+z)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
}
void show_data()
{
cout<<"area = "<<area<<endl;
}
};
void main()
{
triangle ob1 (10,10,10);
ob1.show_data ();
}

area = 43.3013 ‫ ﺍﻟﻨﺘﺎﺋﺞ‬o


Press any key to continue

: Over Loading Function ‫ ﺩﺍﻟﺔ ﺍﻟﺒﻨﺎﺀ ﻓﺎﺋﻘﺔ ﺍﻟﺘﺤﻤﻴﻞ‬.4


‫ ﻭﻟﻜﻦ ﲟﻌﺎﻣﻼﺕ ﳐﺘﻠﻔﺔ ﻭﺣﺴـﺐ ﺍﻻﺳـﺘﺪﻋﺎﺀ ﻭﻳـﺘﻢ‬، ‫ ﻣﻊ ﺩﺍﻟﺔ ﺍﻟﺒﻨﺎﺀ ﺣﻴﺚ ﺍﻹﻋﻼﻥ ﻋﻦ ﺃﻛﺜﺮ ﻣﻦ ﺩﺍﻟﺔ ﺑﻨﺎﺀ‬Over Loading ‫ﳝﻜﻦ ﲢﻘﻴﻖ ﺧﺎﺻﻴﺔ‬
. ‫ﺍﺳﺘﺪﻋﺎﺀ ﺩﺍﻟﺔ ﺍﻟﺒﻨﺎﺀ ﺍﳌﻘﺎﺑﻠﺔ ﻟﺘﺸﻜﻞ ﺍﻻﺳﺘﺪﻋﺎﺀ‬

: ‫• ﻣﺜﺎﻝ‬

‫اﻟﻤﺜﺎل ﻓﻲ اﻟﺼﻔﺤﺔ‬
‫اﻟﺘﺎﻟﻴﺔ‬

- 17 -
#include <iostream.h>
class myclass
{
private :
int a,b,sum;
public :
myclass ()
{
a=5;
b=7;
}
myclass(int i,int j)
{
a=i;
b=j;
sum=a+b;
cout<<"the sum = "<< sum<<endl;
}
void show_data()
{
cout<<"a="<<a<<"\t"<<"b="<<b<<endl;
}
};
void main()
{
myclass ob1;
myclass ob2(8,8);
ob2.show_data();
}

the sum = 16 ‫ ﺍﻟﻨﺘﺎﺋﺞ‬o


a=8 b=8
Press any key to continue

- 18 -
: ‫• ﻣﺜﺎﻝ ﺁﺧﺮ‬
#include <iostream.h>
class counter
{
private:
int i;
double d;
char c;
public :
counter(int a)
{
i=a;
cout<<"i="<<++i<<endl;
}
counter(double e)
{
d=e;
cout<<"d="<<++d<<endl;
}
counter(char h)
{
c=h;
cout<<"c="<<++c<<endl;
}
};
void main()
{
counter ob1(5);
counter ob2(6.4);
counter ob3('a');
}

i=6 ‫ ﺍﻟﻨﺘﺎﺋﺞ‬o
d=7.4
c=b
Press any key to continue

- 19 -
‫ ﺍﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺩﻭﺍﻝ ﻓﺎﺋﻘﺔ ﺍﻟﺘﺤﻤﻴﻞ ﻹﳚﺎﺩ ﻣﺴﺎﺣﺔ ﺍﳌﺜﻠﺚ‬: ‫• ﻣﺜﺎﻝ‬
area = s( s − a )( s − b )( s − c )
‫ ﺣﻴﺚ ﻫﻲ ﺃﺿﻼﻉ ﺍﳌﺜﻠﺚ‬a,b,c
a+b+c
s=
2

# include <iostream.h>
#include <math.h>
class triangle
{
private :
float a,b,c;
double area1,s;
public :
triangle()
{
a=5;
b=5;
c=5;
s=(a+b+c)/2;
area1=sqrt(s*(s-a)*(s-b)*(s-c));
cout<<"area="<<area1<<endl;
}
triangle( float x,float y,float z)
{
a=x;
b=y;
c=z;
area1=sqrt(s*(s-a)*(s-b)*(s-c));
}
void show_data()
{
cout<<"area="<<area1<<endl;
}
};
void main()
{
triangle ob1;
triangle ob2 (10,10,10);
ob2.show_data();
}

area=10.8253 ‫ ﺍﻟﻨﺘﺎﺋﺞ‬o
area=8.56729e+123
Press any key to continue

- 20 -
‫ﺩﻭﺍﻝ ﺍﳍﺪﻡ ﻭﺍﳌﺪﻣﺮﺍﺕ ‪: Destructor Function‬‬
‫ﺗﻮﺟﺪ ﺩﺍﻟﺔ ﺍﳍﺪﻡ ﰲ ﺍﻟﻔﺼﻴﻠﺔ ‪ ،‬ﻭﺗﻨﻔﺬ ﻋﻨﺪ ﺍﳋﺮﻭﺝ ﻣﻦ ﺍﻟﻔﺼﻴﻠﺔ ﺃﻭ ﻋﻨﺪ ﺍﻻﻧﺘﻬﺎﺀ ﻣﻦ ﺍﺳﺘﻌﻤﺎﻝ ﺍﳍﺪﻑ ﺍﳌﻌﻠﻦ ﻣﻦ ﺍﻟﻔﺼﻴﻠﺔ ‪.‬ﻭﻳﺴﺘﻔﺎﺩ ﻭﻣﻦ ﻫﺬﻩ ﺍﻟﺪﺍﻟﺔ ﻋﻨـﺪﻣﺎ‬
‫ﻧﺮﻳﺪ ﺗﻨﻔﻴﺬ ﺑﻌﺾ ﺍﻟﺴﻄﻮﺭ ﻋﻨﺪ ﺍﻻﺳﺘﺨﺪﺍﻡ ﻣﻦ ﺍﳍﺪﻑ ﻭﻏﺎﻟﺒﹰﺎ ﻣﺎﺕ ﺳﺘﺨﺪﻡ ﺩﺍﻟﺔ ﺍﳍﺪﻡ ﰲ ﺣﺬﻑ ﺍﳌﺘﻐﲑﺍﺕ ﻣﻦ ﺍﻟﺬﺍﻛﺮﺓ ﻭﻟﺘﻮﺿﻴﺢ ﺍﺳﺘﺨﺪﺍﻡ ﺩﺍﻟـﺔ ﺍﳍـﺪﻡ‬
‫ﻧﺴﺘﺨﺪﻡ ﺍﳌﺜﺎﻝ ﺍﻟﺘﺎﱄ ﻭﻫﻮ ﺇﳚﺎﺩ ﻣﺴﺎﺣﺔ ﺍﳌﺜﻠﺚ ‪-:‬‬
‫>‪#include <iostream.h‬‬
‫>‪#include<math.h‬‬
‫‪class triangle‬‬
‫{‬
‫‪private :‬‬
‫;‪float a,b,c‬‬
‫;‪double s‬‬
‫‪public :‬‬
‫)‪triangle (float x,float y,float z‬‬
‫{‬
‫;‪a=x‬‬
‫;‪b=y‬‬
‫;‪c=z‬‬
‫;‪s=(a+b+c)/2‬‬
‫}‬
‫)(‪void area‬‬
‫{‬
‫;))‪cout<<"area="<<sqrt(s*(s-a)*(s-b)*(s-c‬‬
‫;‪cout<<endl‬‬
‫}‬
‫)(‪~triangle‬‬
‫{‬
‫‪cout<<"Destructor‬‬
‫;‪"<<"a="<<a<<"\t"<<"b="<<b<<"\t"<<"c="<<c<<endl‬‬
‫}‬
‫;}‬
‫)(‪void main‬‬
‫{‬
‫;)‪triangle ob1(10,10,10‬‬
‫;)( ‪ob1.area‬‬
‫}‬

‫‪area=43.3013‬‬ ‫‪ o‬ﺍﻟﻨﺘﺎﺋﺞ‬
‫‪Destructor a=10 b=10‬‬ ‫‪c=10‬‬
‫‪Press any key to continue‬‬

‫‪- 21 -‬‬
. ‫ ﻭﺫﻟﻚ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺩﺍﻟﺔ ﺍﳍﺪﻡ‬. ‫ ﺑﻮﺻﺔ‬12= ‫ ﻟﻴﻘﺮﺃ ﺍﳌﺴﺎﻓﺔ ﺑﺎﻟﺒﻮﺻﺎﺕ ﰒ ﻳﻄﺒﻊ ﺍﻟﻨﺎﺗﺞ ﺑﺎﻷﻗﺪﺍﻡ ﻋﻠﻤﹰﺎ ﺑﺄﻥ ﺍﻟﻘﺪﻡ‬C++ ‫• ﺍﻛﺘﺐ ﺑﺮﻧﺎﻣﺞ ﺑﻠﻐﺔ‬
#include <iostream.h>
class distance
{
private :
double feet,inch;
public :
distance(float x)
{
inch=x;
feet=0;
}
void dis()
inch=inch-12;
{

while (inch>=12)
{
inch-=12;
feet+=1; }
cout<<"feet="<<feet<<"\t"<<"inch="<<inch<<endl;
} feet=feet+1;
~distance()
{

cout<<"Destructor"<<"\t"<<"inch="<<inch<<"\t"<<"feet="<<feet<<end
l;
}
};
void main()
{
int n1;
cin>>n1;
distance ob1(n1);
ob1.dis();
}

25 ‫ﺍﻟﻨﺘﺎﺋﺞ‬ •
feet=2 inch=1
Destructor inch=1 feet=2
Press any key to continue

- 22 -
: Arrays as Class Data Member ‫ﺍﺳﺘﺨﺪﺍﻡ ﺍﳌﺼﻔﻮﻓﺎﺕ ﰲ ﺍﻷﺻﻨﺎﻑ‬
‫( ﻓﺎﳌﻜﺪﺱ ﳝﻜﻦ ﺍﻟﻨﻈﺮ‬Stack) ‫ ﻭﻟﺘﻮﺿﻴﺢ ﻫﺬﻩ ﺍﻟﻔﻜﺮﺓ ﺳﻮﻑ ﻧﺴﺘﻌﺮﺽ ﻣﻦ ﺧﻼﳍﺎ ﺍﳌﻜﺪﺱ‬، ‫ﳝﻜﻨﻨﺎ ﺍﺳﺘﺨﺪﺍﻡ ﺍﳌﺼﻔﻮﻓﺎﺕ ﻋﻨﺎﺻﺮ ﻣﻌﻄﻴﺎﺕ ﰲ ﺍﻟﺼﻨﻒ‬
- ‫ ﻟﺬﺍ ﻓﺈﻥ ﺁﺧﺮ ﻫﺬﻩ ﺍﻟﻘﻴﻤﺔ ﻳﺘﻢ ﺇﺩﺧﺎﳍﺎ ﻫﻮ ﺃﻭﻝ ﻗﻴﻤﺔ ﳝﻜﻦ ﺍﳊﺼﻮﻝ‬، push ‫ ﻓﻜﻞ ﻗﻴﻤﺔ ﺗﺪﺧﻞ ﺗﺪﻓﻊ ﺳﺎﺑﻘﺘﻬﺎ ﻟﻸﺳﻔﻞ‬، ‫ﺇﻟﻴﻪ ﻋﻠﻰ ﺃﻧﻪ ﺧﺰﺍﻥ ﻟﻠﻤﻌﻠﻮﻣﺎﺕ‬
. ‫ ﻭﺗﻌﺪ ﺍﳌﻜﺪﺳﺎﺕ ﻣﻦ ﺍﻷﺭﻛﺎﻥ ﺍﻷﺳﺎﺳﻴﺔ ﰲ ﺑﻨﻴﺔ ﺍﳌﻌﺎﳉﺎﺕ ﺍﳌﺴﺘﺨﺪﻣﺔ ﰲ ﺍﳊﺎﺳﺒﺎﺕ ﺍﻟﺸﺨﺼﻴﺔ‬LIOF(Last In First Out) ‫ﻋﻠﻴﻬﺎ‬-
1 2 3 4 5 as Input Stream
1 3 5 4 2 as Output Stream

5 sussussuuu
3 4 4
1 2 2 2 2
: ‫• ﻣﺜﺎﻝ‬

#include <iostream.h>
#define max 100
class stack
{
private :
int st[max];
int top;
public :
stack()
{
top=0;
}
void push(int a)
{
st[++top]=a;
}
int pop()
{
return st[top--];
}
};
void main()
{
stack s1;
s1.push(11);
s1.push(22);
cout<<"1:"<<s1.pop()<<endl;
cout<<"2:"<<s1.pop()<<endl;
s1.push(33);
s1.push(44); 1:22 ‫ ﺍﻟﻨﺘﺎﺋﺞ‬o
s1.push(55); 2:11
s1.push(66); 3:66
cout<<"3:"<<s1.pop()<<endl; 4:55
cout<<"4:"<<s1.pop()<<endl; 5:44
cout<<"5:"<<s1.pop()<<endl; 6:33
cout<<"6:"<<s1.pop()<<endl; Press any key to continue
}
- 23 -
‫ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﺘﻜﺮﺍﺭﺍﺕ‬o
#include <iostream.h>
#define max 100
class stack
{
private :
int st[max];
int top;
public :
stack()
{
top=0;
}
void push(int a)
{
st[++top]=a;
}
int pop()
{
return st[top--];
}
};
void main()
{
stack s1;
int i,j,n,k;
cin>>k;
for (i=1;i<=k;i++)
{
cin>>n;
s1.push(n);
}
for (j=1;j<=k;j++)
cout<<j<<":"<<s1.pop()<<endl;
}

5 ‫ ﺍﻟﻨﺘﺎﺋﺞ‬o
11
22
33
44
55
1:55
2:44
3:33
4:22
5:11
Press any key to continue

- 24 -
‫ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﳌﺼﻔﻮﻓﺎﺕ‬o
#include <iostream.h>
#define max 100
class stack
{
private :
int st[max];
int top;
public :
stack()
{
top=0;
}
void push(int a)
{
st[++top]=a;
}
int pop()
{
return st[top--];
}
};
void main()
{
stack s1;
int t[5];
int i,j;
for (i=1;i<=5;i++)
{
cin>>t[i];
s1.push(t[i]);
}
for (j=1;j<=5;j++)
cout<<j<<":"<<s1.pop()<<endl;
}

11 ‫ ﺍﻟﻨﺘﺎﺋﺞ‬o
22
33
44
55
1:55
2:44
3:33
4:22
5:11
Press any key to continue

- 25 -

You might also like