0% found this document useful (0 votes)
11 views18 pages

Oop Cyber

oop book

Uploaded by

bluesky2020new
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
11 views18 pages

Oop Cyber

oop book

Uploaded by

bluesky2020new
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 18

‫)‪Object – Oriented Programming in C++ (OOP‬‬

‫( البرمجة الشيئية – أو البرمجة غرضية التوجيه – البرمجة الموجه نحو الهدف – البرمجة الكائنية )‬

‫‪Class‬‬

‫‪Private‬‬ ‫‪Public‬‬

‫‪ ‬الفرق بين البرمجة الشيئية ‪ OOP‬والبرمجة التقليدية ‪: Traditional Programming‬‬


‫‪Data‬‬ ‫‪Function‬‬ ‫‪Data‬‬ ‫‪Function‬‬
‫‪ .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‬‬
‫مثل أحمد ومحمد وحسين جميعها أسماء تشير إلى مجموعة الطالب مثال آخر وسيارة شفرليه‬
‫وتويوتا ومازدا كلها أسماء تشير إلى مجموعة من السيارات ‪.‬ولكل كائن مجموعة من الصفات‬
‫‪1‬‬
‫واألفعال ‪ methods‬فالسيارات مثًال تتميز بمجموعة من الصفات مثل النوع والموديل واللون‬
‫والسرعة ‪ ...‬إلخ ‪ ،‬ومجموعة األفعال منها السير – التوقف – االلتفاف – التراجع ‪ ...‬إلخ ‪ ،‬وكذلك‬
‫اإلنسان يتميز بمجموعة من األفعال والصفات منها ‪ :‬التحدث – األكل – الشرب – النوم – المشي‬
‫– السفر ‪ ...‬إلخ ‪.‬‬

‫طالب‬ ‫طالب‬ ‫اسم الصنف‬


‫الصفات ‪:‬‬ ‫الصفات ‪:‬‬ ‫الصفات ‪:‬‬

‫‪02‬‬ ‫أحمد‬ ‫كائن‬ ‫العمر‬ ‫االسم‬

‫حاس‬ ‫‪08‬‬ ‫التخص‬ ‫الدرج‬


‫ب‬ ‫ص‬ ‫ة‬
‫األفعال ‪:‬‬ ‫األفعال ‪:‬‬ ‫األفعال ‪:‬‬

‫رسو‬ ‫نجاج‬ ‫رسو‬ ‫نجاج‬


‫ب‬ ‫ب‬
‫تخرج‬ ‫تخرج‬

‫طالب‬
‫الصفات ‪:‬‬

‫‪02‬‬ ‫أحمد‬

‫علوم‬ ‫‪08‬‬

‫األفعال ‪:‬‬ ‫‪ ‬واإلعالن عن الصنف يتكون من ‪-:‬‬


‫‪ )1‬أوًال الكلمة المحجوزة (‪ )Class‬يليها اسم الصنف (‪ )ClassName‬ويخضع لقواعد‬
‫رسو‬ ‫نجاج‬ ‫الصنف هي ‪-:‬‬
‫أوًال ‪ :‬أن يكون اسم الصنف أحد الكلمات المحجوزة أو الكلمات التي تحمل معنى خاص مثل ‪main‬‬
‫ب‬
‫تخرج‬
‫‪.‬‬
‫ثانيًا ‪ :‬يمكن أن يحتوي االسم على أي حرف من الحروف األبجدية (‪ )a - z‬سواء كانت صغيرة أو‬
‫كبيرة أو أي رقم من األرقام (‪ )9 - 0‬كما يمكن أن يحتوي الشرطة السفلى (_) ولكن أن ال يبدأ‬
‫برقم ‪.‬‬
‫ثالثًا ‪ :‬ال قيود على طول االسم ‪ ،‬وتتيح هذه الميزة باستخدام أسماء معبرة عن مضمونها ‪ ،‬ومن‬
‫األفضل دائمًا استخدام االسم المعبر عن محتوى الفصيلة لتسهيل التعامل مع الفصائل ‪.‬‬
‫رابعًا ‪ :‬الحروف الكبيرة والصغيرة ليست متكافئة في ‪ ++C‬فمثًال اسم الصنف ‪My_CLASS‬‬
‫يختلف عن ‪ my_class‬وكالهما يختلف عن ‪. MY_class‬‬
‫‪ )2‬تحديد درجة الحماية ‪ :‬وتبدأ عادة بدرجة الحماية الخاصة ‪ Private‬وتلي هذه الكلمة البيانات‬
‫والدوال الخاصة بالصنف ‪.‬‬
‫‪ )3‬تحديد درجة الحماية األخرى ‪ :‬مثل ‪ Public‬وتوجد ثالثة أنواع من درجات الحماية كما في‬
‫الجدول التالي ‪:‬‬
‫المـعـنـى‬ ‫درجة‬
‫الحماية‬
‫تعني أن البيانات خاصة بهذه الصنف‬ ‫‪Private‬‬
‫‪2‬‬
‫وال يمكن الوصول إليها إال بواسطة‬
‫هذه الصنف‪.‬‬
‫تعني أن البيانات التي تليها عامة ‪،‬‬
‫ويمكن ألي دالة الوصول إليها‬ ‫‪Public‬‬
‫واستعمالها ‪.‬‬
‫تفيد في حالة توريث الصنف ‪ ،‬حيث‬
‫يسمح بالفصائل التي ورثت باستعمال‬ ‫‪Protected‬‬
‫أعضاء الفصلية األساسية ‪.‬‬

‫‪ ‬اكتب برنامج يقرأ عددين ثم يطبع العددين باستخدام ‪: Class‬‬


‫>‪#include <iostream.h‬‬
‫‪class smallobj‬‬
‫{‬
‫يمكن كتابة هذه‬ ‫‪private :‬‬
‫الجملة بعد قوس‬ ‫;‪int a,b‬‬
‫نهاية ‪class‬‬ ‫‪public :‬‬
‫;‪}ob1,ob2‬‬ ‫)‪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‬‬
‫‪Data are 5‬‬ ‫النتائ‬
‫;)(‪10 ob1.show_data‬‬
‫‪Data are 3‬‬ ‫‪4‬‬ ‫ج‬
‫;)(‪ob2.show_data‬‬
‫‪Press any key to‬‬ ‫‪} continue‬‬
‫أيضًا في ‪ void main‬نعّر ف‬
‫;‪Int n1,n2‬‬
‫;)‪Ob1.set_data(n1,n2‬‬

‫‪3‬‬
: ‫ اكتب برنامج يحسب حاصل جمع وضرب عددين‬

#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 ‫النتائج‬
the sum of number = 9
the multiplication of number = 20
#include <iostream.h>
Press any key to continue
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;
π = ‫ اكتب برنامج ليحسب مساحة ومحيط الدائرة علمًا }بأن المساحة‬class ‫باستخدام االصناف‬ 
void circum() π =3.14 π r 2= ‫ والمحيط‬r2
{
circum1=2*3.14*r;
cout<<"circle circum = "<<circum1<<endl;
}
};
void main()
{
circle ob1;
float n ;
cin>>n;
ob1.area(n); 4
ob1.circum ();
}
10 ‫النتائج‬
the area = 314
circle circum = 62.8
Press any key to continue

5
: ‫ اكتب برنامج لحساب المثلث من العالقة التالية‬
‫ حيث هي أضالع‬a,b,c
‫المثلث‬

#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;
10 10 10
cin>>n1>>n2>>n3; ‫النتائج‬
the area of triangle = 43.3013
ob1.set_data(n1,n2,n3);
Press any
ob1.show_data ();key to continue
}

6
‫ ليقرأ الزمن بالثواني ثم يطبع الزمن مقاسًا بالساعات والدقائق‬++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;
3735ob1.time (n1); ‫النتائج‬
} 1:2:15
Press any key to continue

7
‫دوال البناء (‪)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‬‬
‫}‬

‫‪ ‬أنواع دوال البناء ‪:‬‬


‫‪ .1‬دالة بناء بالصورة العامة وذلك كما في المثال السابق وهي عبارة عن دالة لها معامالت‬
‫‪a= 5‬‬ ‫‪b= 7‬‬ ‫النتائ‬ ‫تستقبلها وتستعملها ‪.‬‬
‫‪ Press‬لمعامالت الدالة عند‬
‫إعطاء قيم‬
‫يتم‪any‬‬
‫‪key‬‬‫حيث‬
‫‪to: continue‬‬
‫‪Predefined Function‬‬ ‫‪ .2‬دالة سابقة التعريف ج‬
‫)‪myclass (int a=2,int b=7‬‬ ‫اإلعالن عنها ويكون ذلك بالصورة‬
‫{‬ ‫حيث تم إعطاء قيم سابقة لمعامالت الدالة يتم استدعاء الدالة بدون معامالت‬
‫_______‬ ‫وليتضح ذلك من البرنامج التالي ‪-:‬‬
‫}‬

‫‪8‬‬
‫نفس البرنامج فقط هذا التعديل الموضح أدناه‬ ‫‪‬‬
‫)‪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‬‬ ‫النتائ‬ ‫مالحظ‬


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

‫يمكن استدعاء دالة البناء بقيمة فقط‬


‫أو قيمتين وفي هذه الحالة سيقوم‬
‫المترجم ‪ Compile‬باستخدام هذه‬
‫يمكن تغييرها عند استدعاء الدالة‬
‫تأخذالالقيم‬
‫القيمثابتة‬
‫على قيم‬
‫تحتويوباقي‬ ‫الدوال‬
‫بالترتيب‬ ‫‪ .3‬دوال ذات قيم ثابتة ‪ :‬هذه‬
‫القيم‬
‫ألن الدالة ليس لها معامالت ولكن سطورها تعطي قيمًا ألعضاء الفصيلة كما في المثال التالي‬
‫)(‪: myclass‬‬
‫‪ ‬وفي هذه الدالة تم إعطاء قيم ثابتة ألعضاء الفصيلة مع عدم وجود معامالت تسمح بتغيير هذه{‬
‫;‪a=5‬‬ ‫القيم‬
‫;‪b=6‬‬ ‫‪ ‬المثال هو نفس المثال السابق فقط التعديل الموضح أدناه ‪:‬‬
‫}‬
‫>‪#include <iostream.h‬‬
‫)(‪myclass‬‬
‫>‪#include <math.h‬‬
‫{‬
‫‪class triangle‬‬
‫;‪a=5‬‬
‫{‬
‫;‪b=6‬‬
‫‪private:‬‬
‫}‬
‫‪6 =b‬‬ ‫‪5 =a‬‬ ‫النتائج ;‪float a,b,c,s‬‬
‫‪.‬‬
‫‪yek yna sserP‬‬ ‫;‪double area‬‬
‫‪.‬‬
‫‪public:‬‬
‫‪.‬‬
‫)‪triangle (float x,float y,float z‬‬
‫)(‪void main‬‬
‫{‬
‫{‬
‫;‪a=x‬‬
‫;‪b=y‬‬
‫البناء‬ ‫دوال‬ ‫باستخدام‬ ‫المثلث‬ ‫مساحة‬ ‫يحسب‬
‫‪myclass‬‬ ‫اكتب برنامج;‪ob1‬‬ ‫‪‬‬
‫;)(‪ob1.show_data‬‬
‫;‪c=z‬‬
‫}‬
‫;‪s=(x+y+z)/2‬‬ ‫‪ a,b,c‬حيث هي أضالع‬
‫;))‪area=sqrt(s*(s-a)*(s-b)*(s-c‬‬
‫المثلث‬
‫}‬
‫)(‪void show_data‬‬
‫{‬
‫;‪cout<<"area = "<<area<<endl‬‬
‫}‬
‫;}‬
‫)(‪void main‬‬
‫{‬
‫‪9‬‬
‫;)‪triangle ob1 (10,10,10‬‬
‫;)( ‪ob1.show_data‬‬
‫}‬
‫‪area = 43.3013‬‬ ‫النتائج‬
‫‪Press any key to continue‬‬

‫‪ .4‬دالة البناء فائقة التحميل ‪: Over Loading Function‬‬


‫يمكن تحقيق خاصية ‪ Over Loading‬مع دالة البناء حيث اإلعالن عن أكثر من دالة بناء ‪ ،‬ولكن‬
‫بمعامالت مختلفة وحسب االستدعاء ويتم استدعاء دالة البناء المقابلة لتشكل االستدعاء ‪.‬‬

‫مثال ‪:‬‬ ‫‪‬‬

‫المثال في الصفحة التالية‬

‫‪10‬‬
#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 ‫النتائج‬


a=8 b=8
Press any key to continue

11
: ‫مثال آخر‬ 
#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()
{ i=6 ‫النتائج‬
d=7.4
counter ob1(5);
c=b ob2(6.4);
counter
Press
counter any key to continue
ob3('a');
}

12
‫ اكتب برنامج باستخدام دوال فائقة التحميل إليجاد مساحة المثلث‬: ‫مثال‬ 
‫ حيث هي أضالع‬a,b,c
‫المثلث‬

# 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;
s=(a+b+c)/2;
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 ‫النتائ‬
area=43.3013 ‫ج‬
Press any key to continue

13
: 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));
#include <iostream.h>
cout<<endl;
class distance
}
{ ~triangle()
private : {
double feet,inch;
cout<<"Destructor "<<"a="<<a<<"\t"<<"b="<<b<<"\
public t"<<"c="<<c<<endl;
:
distance(float
} x)
{ };
voidinch=x;
main() area=43.3013 ‫النتائج‬
{ feet=0;
Destructor a=10 b=10 c=10
} triangle ob1(10,10,10);
Press any key to continue
void dis()
ob1.area ();
{}

while (inch>=12)
{
inch-=12;
feet+=1;
}
cout<<"feet="<<feet<<"\t"<<"inch="<<inch<<endl;
12= ‫القدم‬
} ‫ ليقرأ المسافة بالبوصات ثم يطبع الناتج باألقدام علمًا بأن‬++C ‫ اكتب برنامج بلغة‬
~distance() . ‫ وذلك باستخدام دالة الهدم‬. ‫بوصة‬
{
cout<<"Destructor"<<"\t"<<"inch="<<inch<<"\
t"<<"feet="<<feet<<endl;
}
};
void main()
{
int n1; 25 ‫النتائج‬
cin>>n1; feet=2 inch=1
distance Destructor
ob1(n1); inch=1 feet=2
ob1.dis(); 14
Press any key to continue
} inch=inch-12;
feet=feet+1;
‫أنشئ فصيلة لتقرأ المسافة مقاسة بالسنتبمترات ثم تطبع تلك المسافة باألقدام‬
.‫والبوصات والسنتيمترات المتبقية مستخدما في ذلك دالتي البناء والهدم‬
#include<iostream.h>
class distance
{
private:
float cm,inch,feet;
public:
distance(float x)
{
cm=x;
inch=feet=0;
while(cm>=2.5)
{
inch++;
cm-=2.5;
}
while(inch>=12)
{
inch-=12;
feet++;
}
cout<<feet<<" :"<<inch<<" : "<<cm<<endl;
}
~distance()
{
cout<<"destructing \n";
}
};
void main()
{
float n;
cin>>n;
distance d1(n);
}

: Arrays as Class Data Member ‫استخدام المصفوفات في األصناف‬


15
‫ ولتوضيح هذه الفكرة سوف نستعرض‬، ‫يمكننا استخدام المصفوفات عناصر معطيات في الصنف‬
‫ فكل قيمة‬، ‫) فالمكدس يمكن النظر إليه على أنه خزان للمعلومات‬Stack( ‫من خاللها المكدس‬
‫ لذا فإن آخر هذه القيمة يتم إدخالها هو أول قيمة يمكن‬، push ‫تدخل تدفع سابقتها لألسفل‬
‫ وتعد المكدسات من األركان األساسية في بنية المعالجات‬LIFO(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()
#include <iostream.h>
{
#define max 100
top=0;
class stack
}
{
void push(int a)
private :
1:22 ‫النتائج‬ {
int st[max];
2:11 st[++top]=a;
int top;
3:66 }
public :
4:55 int pop()
stack()
5:44 {
{
6:33 return st[top--];
top=0;
Press any key }to continue }
};
void push(int a)
void main()
{
st[++top]=a; {
stack s1;
}
s1.push(11);
int pop()
s1.push(22);
{
return st[top--]; cout<<"1:"<<s1.pop()<<endl;
cout<<"2:"<<s1.pop()<<endl;
}
s1.push(33); ‫ باستخدام التكرارات‬o
};
s1.push(44);
void main()
s1.push(55);
{
s1.push(66);
stack s1;
cout<<"3:"<<s1.pop()<<endl;
int i,j,n,k;
cout<<"4:"<<s1.pop()<<endl;
cin>>k;
cout<<"5:"<<s1.pop()<<endl;
for (i=1;i<=k;i++)
cout<<"6:"<<s1.pop()<<endl;
{
}
cin>>n;
s1.push(n);
}
for (j=1;j<=k;j++) 16
cout<<j<<":"<<s1.pop()<<endl;
}
5 ‫النتائج‬
11
22
33
44
55
1:55
2:44
3:33
4:22
5:11
Press any key to continue

17
‫ باستخدام المصفوفات‬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;
}

18

You might also like