يمحرلا نحمرلا الله مسبmohammadalmashreqe.freeasphost.net/courses/object new/oop...
TRANSCRIPT
بسم هللا الرمحن الرحمي
Course : object oriented programming
Lecture : struct
Lecturer : ENG. Mohammad Al-mashreqe
هللا الذي ال يضر مع اسمه شيئ . بسم
data typeجاهزة بسيطة الى data typeفي هذا الشابتر سيتم االنتقال ان شاءهللا من العمل على
مركبة .
تاج البرمجة كائنية التوجه عندما يكون الشيئ المراد برمجته يحتوي على مجموعة من الصفات .. ولكن نح
ما هي الصفات ؟
: هي عبارة عن متغيرات تقوم بوصف الشيئ والشيئ يمكننا تسميته بالكائن attributeالصفات
object .
متغيرات االسم والعمر 3ا ,, وفرضنا ان لكل طالب اردنا برمجة نظام لطلبة جامعة العلوم والتكنولوجيلو
والمعدل .
الف متغير لالسماء من نوع 20الف طالب .. بالتالي نحن بحاجة ل 20ان عدد الطالب ولنفرض
string الف اخرين للعمر من نوع 20وint الف اخرين من نوع 20وfloat .. للمعدل
شكل البرنامج كالتالي . ويصبح
#include <iostream> #include <string> using namespace std; int main() { string students_names[20000]; int students_ages[20000]; float students_GPAs[20000]; }
المشكلة هنا لو اردنا ادخال معلومات الطالب االول فستكون االندكس االول من كل مصفوفة اي اننا
اماكن مختلفة لتخزين معلومات طالب واحد ولكن بشكل منطقي يجب ان تكون معلومات 3تخدمنا اس
object orientedالطالب الواحد كـ وحدة واحدة ومن هنا تأتي اهمية البرمجة الكينونية التوجه
programming .,
او ال structم ال يمكننا استخدا object oriented programmingباستخدام طريقة ال للبرمجة
class والفرق بينهما يدرس الحقاً وفي هذا الشابتر ان شاءهللا سندرس الstruct .
واحد object. هو تجميع جميع الخصائص من انواع بيانات مختلفة داخل كيان structالفكرة من ال
على عكس المصفوفة التي تتيح لنا انشاء مجموعة من المتغيرات من نفس النوع .
struct: collection of a fixed number of components (members), accessed by name.
. structطريقة تعريف ال
struct struct_name { Data_type member1; Data_type member2; . . . Data_type membern; };
حيث أن :
Struct_name بذات الطريقة التي نسمي فيها المتغيرات في :c++ ولكن يفضل ان يكون اسم ال
struct . ذو معنى
Data_type member ال :data type هو نوع البيانات وmember هو العضو ويطلق عليه
الستركت له نوع واسم وتسمى ايضاً هذه االعضاء بال . حيث ان لكل عضو داخل fieldاسم
attribute .
. semicolonيجب ان ينتهي تعريف الستركت بفاصلة منقوطة •
.. structال حل المثال السابق باستخدام
struct Student { string name; int age; double GPA; };
ال يعني structعند تعريفها داخل ال attributes او membersاو ال fieldsال •
االعالن عن متغير "تعريف متغير" وال تصبح محجوزة بالذاكرة بل هو وصف للتركيب الذي الذي
سيستخدم عند تنفيذ البرنامج .
قة تعريف المتغير من نوع ستركت . طري
Struct_name variable_name;
#include <iostream> #include <string> struct Student { string name; int age; double GPA; }; using namespace std; int main() { Student s1; }
بالميموري بالشكل التالي : s1يتم حجز
Accessing struct Members
الخاصة بالمتغير الذي تم تعريفه يتم استخدام ال attributeاو fieldاو memberللوصول الى ال
dot operator التعامل مع المتغيرات لمتغير من نوع ستركت بكيفية لتعامل مع ا.. علماً انه ال يمكن ا
نوع الستركت نفسه . باستناء عملية المساواة ما بين متغيرين من مثالً ... intالبسيطة ك
Example [ ]
#include <iostream> #include <string> struct Student { string name; int age; double GPA; }; using namespace std; int main() { Student s1; cin >> s1; //error cout << s1; //error Student s2; s2 = s1++;//error Student s3; s3 = s1 + s2; //error }
جميع العمليات الرياضية وعمليات المقارنة المنطقية واالدخال واالخراج على متغير من نوع ستركت
. errorستعطينا
عدا عملية واحدة وهي المساوة ما بين متغيرن من نفس نوع الستركت كما في المثال .ما
Example [ ]
#include <iostream> #include <string> struct Student { string name; int age; double GPA; }; using namespace std; int main() { Student s1,s2; s1 = s2; // true }
. attributesاو membersاو fieldsللوصول الى dot operatorنستخدم ال
Example [ ]
struct Student { string name; int age; double GPA; }; using namespace std; int main() { Student s1 ,s2; //using assignment operator s1.name = "mohammad"; s1.age = 22; s1.GPA = 3.3; //get input from user cout << "please enter student name " << endl; cin >> s2.name; cout << "please enter studetn age " << endl; cin >> s2.age; cout << "please enter student GPA " << endl; cin >> s2.GPA; //print result cout << "name : " << s1.name << endl; cout << "age : " << s1.age << endl; cout << "GPA : " << s1.GPA << endl; }
Array with struct
طالب مرة واحدة يتم بهذه الصورة : 3يمكن تعريف مصفوفة من نوع ستركت فمثال ً لو اردت تعريف
#include <iostream> #include <string> struct Student { string name; int age; double GPA; }; using namespace std; int main() { Student s[3]; }
ويكون شكل الميموري كالتالي : fieldsان كل مكان يتم حجزه يحتوي على جميع حيث
S
Name
Age
GPA
S[0]
Name
Age
GPA
S[1]
Name
Age
GPA
S[2]
عند تنفيذ الجمل التالية يصبح شكل الميموري . s[0].name = "mohammad"; s[1].age = 22; s[2].GPA = 3.3;
تصبح القيم بالميموري كالتالي :
Name Mohammad
Age
GPA
S[0]
Name
22 Age
GPA
S[1]
Name
Age
3.3 GPA
S[2]
. كما في "الترتيب مهم initiatorيمكن اعطاء قيمة ابتدائية للعناصر داخل الستركت من خالل استخدام
المثال :
struct Student { string name; int age; double GPA; }; using namespace std; int main() { Student s = { "mohammad",22,3.3 }; }
وهذه الجملة مكافئة لهذه الجمل :
s.name = "mohammad"; s.age = 22; s.GPA = 3.3;
فارغ يتم اعطاء القيم االفتراضية لالعضاء حسب النوع initiatorفي حال استخدام ال
Student s = {};
structs within a struct
يمكن تعريف متغير من نوع ستكرت اخر داخل الستركت كما في المثال .
struct Date { int day; int month; int year; }; struct Student { string name; int age; double GPA; Date birth_date; };
كالتالي : studentيصبح شكل الميموري عند تعريف متغير من نوع
Student s ;
s
Name
Age
GPA
Birth_date
Day
Month
Year
مرتين : dot operatorيتم استخدام ال مثال dayللوصول للعنصر
s.birth_date.day = 10;
" P:" في تحت صفحات كمان انزلوا انزلوا ��"هاي المالحظة لحتى ما تفكروا انه الشابتر خلص
من اهم االمور التي يجب إتقانها لتفادي وتالشي الخطأ في حل إسالة االوتبوت المتعلقة بالستركت يجب رسم
الميموري وفيما يلي رسم توضيحي لبعض االمثلة لنتعلم من خاللها الية رسم الستركت بالميموري .
#include<iostream>
usingnamespace std;
struct A{
int x,y[2];
};
struct B{
int h,n;
A a1;
}
void main()
{
B d;
}
struct A{
int x,y;
};
void main()
{
A d[2];
}
h
n
x
d
a1
Y[1]
Y[0]
x d[0]
y
d[1] x
y
what the output :-
#include<iostream>
usingnamespace std;
struct A{
int x,y;
};
void main()
{
A d,k;
d.x = 5;
d.y = 10;
cout<<d.x<<" "<<d.y<<endl;
d.x+=2;
d.y+=2;
k =d;
cout<<k.x<<" "<<k.y<<endl;
}
Output:
5 10
7 12
1 struct A
{
int x;
double y;
};
struct B
{
int x;
A Arr[2];
};
void main()
{
A varA;
B varB;
varA.x=10; varA.y=20;
varB.x=30;
varB.Arr[1].x=100;
varB.Arr[1].y= varB.x+3;
varB.Arr[0]=varA;
cout<< varB.Arr[1].y<<" ";
cout<<varB.Arr[0].y<<endl;
cout<<varB.x<<" "<<varA.x<<endl;
}
2 struct A
{
int var1;
int Arr[3];
};
struct B
{
int var1;
A varSt;
};
void main()
{
A objA;
B objB;
objA.var1=10;
for(int i=0; i<3; i++)
objA.Arr[i]=i+2;
objB.var1=100;
objB.varSt=objA;
objB.varSt.var1++;
cout<<objB.var1<<" "<<objB.varSt.var1<<endl;
for(int i=0; i<3; i++)
cout<<objB.varSt.Arr[i]<<" "<<endl;}
Write code :
write a program to help a local book store automates its billing system (فواتير نظام (
the program should have the following :
1- a struct BookLabel with the following member :-
a-name: string variable for the name of the book .
b- price : float variable for the price of the book .
c-quantity : integer variable for the number of copies sold of the book النسخ
)المباعة . (عدد
2- a struct Bill with the following members :
a- customerName: string variable for the customer name . b- Book[5] : an array of type BookLabel with size 5 . c- number_sold_books: integer variable for the number of type of sold book
3- in main function :-
a-create object called b1 of type Bill
b- fill this object b1 reads the name of customer and the book's names ,book's
price, book's quantity and number_sold_books using cin (from user)
c-display the bill b1 by printing the name of customer and all information (the
book's name ,book's prices ,book's quantity about the sold book and the finally
the total money . if the total money exceeds the 50JD then the book store gives
10% discount.
الحمدهلل الذي بحمده تتم الصالحات ما اصبت به فمن اهلل وما أخطأت به فمني ومن الشيطان ال تنسونا من صالح دعائكم
"محمد المشرقي" أخوكم