يمحرلا نحمرلا الله مسبmohammadalmashreqe.freeasphost.net/courses/object new/oop...

Preview:

Citation preview

بسم هللا الرمحن الرحمي

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.

الحمدهلل الذي بحمده تتم الصالحات ما اصبت به فمن اهلل وما أخطأت به فمني ومن الشيطان ال تنسونا من صالح دعائكم

"محمد المشرقي" أخوكم

Recommended