المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : ~~ ++From C To C ~~



..HoKo..
16th June 2004, 06:25 AM
بسم الله الرحمن الرحيم ...


الموضوع هذا قصدت فيه الطالبات و الطلاب اللي يدرسون السي ..
بالأصح طالبات 151 عال :) ما ادري بالضبط ايش عند الاولاد :)


** ملاحظه .. في "l" نهاية كل سطر من الكود dummy طبعا بس عشان ما يقلب لليمين :) **

[line]



1- من اين جاءت التسمية ... C++ ؟
جميعكم يعرف ال ++ increament operator .. تزيد واحد على المتغير ..
من هذا المنطلق تم تسمية السي بلس بلس .. لأنها تجمع بين ما هو في السي بالاضافة لخصائص أخرى ..


2- ما هي الفروقات بين كتابة الكود في ال C و C++ ؟؟؟؟

لا يوجد فرق كبير في ال syntax بينهما ... فطريقه كتابة ال structures لازالت كما هي في السي
و اقصد بها ..
* conrol structures >>> if
* repetition structures >>> while
و لكن هناك فروقات بسيطة جدا .. ممكن تلخيصها كالتالي :

* في تعريف المتغيرات في السي .. يجب ان يكون في بداية ال block و الا يعتبر syntax error
بينما في السي بلس تستطيع/ن تعريف المتغيرات في أي مكان ..

مثل ..
for(int i=0 ; i<10 ; i++); l
نستطيع كتابة هذا الكود في السي بلس من دون اي مشاكل بينما لا نستطيع ذلك في السي :)
>>>> خاصيه حلوة :)

* في السي بلس بلس .. يوجد بعض ال keywords نستخدمها فيها دون السي
مثل ..

new >>> تستخدم لحجز مكان في الذاكرة للمؤشرات .. بدل malloc , calloc
delete >>> تستخدم لحذف او تحرير الذاكرة المستخدمة من قبل المؤشر ... بدل free
class >>> (( هذي لها سالفه طويله ;) )) ... نستطيع القول أنها مشابهه ل struct
operator >>> تستخدم لخاصية معينة موجود في السي بلس .. و هي operator overloading .. و سيلي شرحها ان امكن :)
namespace >>> من خصائص السي بلس بلس ايضا ..
using >>> من اسمها يمكن فهما .. اذا كنت ترغب باستخدام شي معين ينتمي ل namespace معينه فيجب وضع هذه الكلمة في بداية البرنامج ..
مثل .. using namespace std >>> اخبر الكومبايلر اني سوف استخدم محتويات ال namespace اللي اسمها std ..
و من الممكن التخصيص أكثر ...
مثل .. using std::cout هنا خصصت فقط cout و ليس جميع محتويات ال std ..

:: >>>> تدل على ال scope يعني هذا موجود داخل هذا .. :) ..
مثل .. std::cout .... يعني cout موجوده داخل .. او من ضمن std

هذي مجرد أمثله .. فقط .. و يوجد الكثير من الفروقات ربما أكون غفلت عنها :)


3- نسمع كثير عن ال OOP ... يا ترى ايش هي ؟؟

اختصار object orianted programing ... ترجمتها .. البرمجه كائنية المنحنى ..
اسمها كذا يقول انها شي غريب !! :) ,,, في الواقع هي شي حلو و يسهل للمبرمج اشياء كثير :)
نجي لشرح المعنى .. في الـ OOP نرى كل شي كأنه object .. طيب يعني ايش object !!

>>>>> متى أقول عن الشي هذا انه object ؟؟

* اذا كان له اسم ،، اذا كلن له خصائص ،، و اذا كان يتفاعل مع غيره او من الممكن انه يتنفذ عليه عمليات ..
مثال (اعجبني هذا المثال :) ) .. ال TV اوبجكت ,, ايضا Remote control لوبجكت .. ليه ؟
التلفزيون له اسم .. و له ايضا خصائص (القناة ، الصوت،الالوان) .. و من الممكن ان يتفاعل مع غيره ( مثل الريموت يرسل اشارة للتلفزيون .. فيغير شي من خصائصة .. كالصوت مثلا)
هذا كان مجرد مثال ... لا تخافون ما رح يجيكم تلفزيونات و لا ريموتات ;)

نجي الحين للفرق الجوهري بين السي و السي بلس بلس ..
السي .. structurd programimg .. يعني البرنامج يكون مقسم لدوال و ستركتشرات :) ..
اما السي بلس بلس ... OOP ... يعني بنفكر في كل شي على اساس انه object ... و احنا عرفنا ايش هو الاوبجت ..

>>>>> ندخل شوي في الـ OOP ...

خصائصها ..
* encapculation
* inhiretence
* polymprphism

>>> لووول .. ايش ذا الخرابيط !! ;)

نمسك وحده وحده ...

الاولى ... معناها ان يكون الشي محتفظ بمعلوماته و طرق التعامل معها سوا .. كأنه يحط الداتا و الفنكشنس سوا و يعزلهم عن المحيط الخارجي ..
>>> برضوا ما فهمتوا ... معليش :)
مثلا ... عندي سترينق (اسم).. كيف يكون هالاسم مآخذ هالخاصيه ... طبعا باعتبره اوبجكت .. و الخصائص حقته هي .. اني ممكن اغيره .. او اطبعه .. أو امسحه !!
الجواب .. ان يكون تعرف السترينق نفسه ... مع الدوال اللي تسمح بتغييره موجودين سوا في نفي المكان .. و المكان هذا هو اللي نسميه class :)

* الثانيه .. و الثالثه .. شوي ادفانسد ;) ... ان شاء الله اوضحهم اذا قدرت بعدين ..

>>>>> كيف افكر بطريقة الـ OOP ؟؟؟

مثلا .. في السي .. قالك أبغا كاونتر يحسب شي معين ..
بكل بساطة باعرف
int count i
و بمجرد اني اقول count++ بيزيد الكاونتر ..

طيب في السي بلس بلس كيف ؟؟
باعتبر زي ما قلت ان الكاونتر .. اوبجكت .. طيب خلونا نطبق خصائص الاوبجكت على الكاونتر ..
* الاسم .... counter
* الخصائص ... الفيمة اللتي يحملها
* العمليات ... ممكن يزيد الكاونتر و ممكن ينقص ! .. في نفس الوقت ما يصير يكون بالسالب !
>>> ان شاء الله مفهوم :)

الحين كيف اكون ال object counter ؟؟؟؟
الحين عشان اعرف اوبجكت ، كأني أقول باعرف variable في السي ..
كنا نقول اول int i ... الحين لا .. بنقول counter i
لاحظوا ان count مماثله لـ int ..

طيب count هذي كيف طلعت ؟؟

بالطريقه التاليه ..

class count{ l
int cnt; l

public: l

increament(); l
decreament(); l
};

بكذا اكون انا بنفسي عرفت كلاس (تايب) .. و سميته كاونت .. بحيث اني استخدمه في عملية العد !
>>> هذا مجرد مثال بسيط و العمليه غير معقدة ..

مثال ...

في السي ...

int i; l
i++; l
i--; l

في السي بلس بلس ...

count i; l
i.increament(); l
i.decreament(); l

طبعا شكل السي هو الاسهل .. و لكن هذا المثال فقط للتوضيح .. :)

[line]


ان شاء الله تكونوا استفدتوا .. و اللي عنده اضافات أو تصحيح "جل من لا يسهو" ما يبخل علينا :)
و شكرا ..

Digital Mind
16th June 2004, 06:35 AM
/* موضوع اكثر من رائع .. ولي عودهـ له */ ..

/* الاولاد عال 112 + عال 113 */ ..

Digital Mind
16th June 2004, 12:49 PM
اهليين هو كورز ..
بالاول انا ما درست الا السي بلس بلس .. :) ..
ولكن شرحك وكلامك المبسط شيء جميل ..
بالفعل ايجازك روعه ..
انا ارشحك انك تصيرين معيدهـ ..:) ..
او تصدرين كتاب زي ديتيل ..
من جد كلام تشكرين عليه ..
وانا في انتظار تكملت الشرح ..
تحياتي لكي ..

Dell
16th June 2004, 04:59 PM
ياسلام عليك هو كيرز ...

صراحه شرحك اكثر من رائع ,.,

وموضوع جميل يستحق القراءه ... وبفكر يمكن اثبته <<<< وده بنطرد

وبالنسبه لي انا مادرست الا سي ...

لكن درست في الجافا كل الي تكلمتي عنه في السي بلس بلس ...

احس فيه بينها تشابه كبير ....

وبالنسبه لل inhiretence اذا جيتي تشرحينها ... استخدمي طريقه has a و is a <<<< مسوي بيعلمك ...



لكن السؤال الي يطرح نفسه ... عندنا في الجامعه الغوا لغه سي وحطوا بدالها سي بلس بلس ...

يعني ياترى هل تعلم سي بلس بلس .. يغنيننا عن تعلم سي ... ؟

انا اتوقع لو يخلون 112 و 113 سي ... وبما اننا ندرس جافا اكيد بناخذ المواضيع الي تكلمتي عنها في السي واللي موجوده في الجافا .

ومشكوره على الموضوع الاكثر من رااااائع ....

..HoKo..
17th June 2004, 06:54 AM
السلام عليكم .. :)

ديجي مان ...

ياليت اكون فعلا استحق كلامك :p
و مشكور للتوضيح بشأن مقرر الاولاد .. ان شاء الله أقدر أكمل :) .. و أرحب بأي اضافات :)
>>>> على ترشيحك ليتك تمسك "عميد" قسمنا db5
أقدر لك مرورك الرائع اخوي :) ..


ديل ...


وبفكر يمكن اثبته <<<< وده بنطرد
لووووول .. شكرا و الله :)
>> لو مو موضوعي كان ثبته ;)

ردك يفتح ابواب حلوة للنقاش :) .. بالنسبة للسي بلس و الجافا ..
كل الاثنين OOP و فعلا زي ما قلت فيه تشابه جدا كبير ..
انا بصراحه ما درست الجافا :p .. و لكن بما ان الشخص فاهم للكونسبت خلاص تمشي معاك أي لغة
و زي ما سمعت من كثير أشخاص .. السي بلس أصعب من الجافا و اذا انت اتقتنها خلاص
>>>> حط ال OOP في جيبك ;)

أنا في رأيي المتواضع (جدا) .. :)
ان المفروض دراسة السي أول .. مهما كان هي لغة جدا مهمة .. و اكثر أنظمة التشغيل تعتمد عليها
و من ثم دراسة السي بلس بلس .. لأنها بالطبع لغة قويه :)
و بالنسبة للجافا .. فهي لغة عملية جدا و friendly :p .. و ماشية :) .. لكن من عيوبها انها بطيئة
فنادرا ما نلاقي فايروسات تكتب بالجافا
>>> واحنا ايش دخلنا بالفايروسات انتي الثانيه :D


وبالنسبه لل inhiretence اذا جيتي تشرحينها ... استخدمي طريقه has a و is a <<<< مسوي بيعلمك ...
اي و الله علمني :p .. يمكن اكون عارفه الموضوع بس ما فهمت قصدك :p



يعني ياترى هل تعلم سي بلس بلس .. يغنيننا عن تعلم سي ... ؟

هذا فعلا سؤال مهم :) ..
انا أقدر السي بصراحة على انها قديمة و مو مستخدمة بكثرة ، لكن لا غنى عنها
- مع اني ملت للسي بلس في الاخير :) -
اللي ممكن يصير هو ان البداية تكون بالسي .. و من بعدها يكون اما سي بلس او جافا ..
لأن الفرق كبير بين اللغتين -سي و سي بلس- .. اسلوب البرمجه مختلف بينهم .. :)


مشكور أخوي .. :)


ممكن مراجعة المواضيع التالية ...

* ][ البرمجة كائنية المنحى Oop ][ (http://www.cksu.com/vb/showthread.php?s=&threadid=558) . للكاتب ... Digital Mind
* << C++ Vs C >> (http://www.cksu.com/vb/showthread.php?s=&threadid=1585) . للكاتب ... Ray_Of_Hope
:)

ســــديــــم
17th June 2004, 07:59 AM
يعطيك الف مليووووون عافية أختي !! who_cares !!

صراحة شي يرفع الراس ان يكون عندنا في الكلية عقـــلية رائعة زيــــــك ..:) ::D

== بالنسبة لـ C و ++C

أنا رايي من رأي أختي هو كيرس << مب تعصب ترا ;)

بس فعلاً دراسة السي أشوف أنها ضرورية جداً جداً جداً .. بعدين تدرس السي بلس

في جامعة الأمام .. قسم الحاسب .. كان نازل لهم ... السي بلس .. في المستوى الثاني

اعتقد (( مش مهم bd7 )) .. واستاذتهم كانت توها جاية للجامعة .. درستهم محاضرتين

وبعدين سألتهم .. أنتم اخذتوا السي .. قالوا لأ .. راحت للعميد .. وقالت ما يصير ..

وكلاااااام طويل .. بالأخير عدلو الخطة واعطتهم سي ..

كملي .. هو كيرس .. fv6 .. الموضوع .. ممتع للغاية ..

تحياتي .. للجميع ..

ســــديــــم ...

..HoKo..
17th June 2004, 11:31 AM
الله يعافيك سديم احرجتيني بلطفك و ذوقك اختي :p ..

مشكووورة و الله مرورك عزيز علي :) ...

الامام اتوقع دراستهم تحليل نظم !! و الله اعلم .. انا لما خلصت توجيهي
كنت محتارة بينهم و بين ksu .. على ان قسمهم كان لسا مفتوح :)
بس ما الله كتب اني اروح هناك :) .. و الحمد لله :)

التكمله في الطريق ان شاء الله ;)..

Administrator
18th June 2004, 10:14 PM
مساء الخيرات جميعا :) ،،
موضوع شيق جداً .. ويستاهل فعلا النقاش :) .. لأنه من أهم مواضيع النقاش بين المبرمجين ..
الأخت\الأخ Who_Cares ما قصر(ت) ، قال(ت) كلام كثير مهم ومنطقي .. ولي تعليق اذا تسمح لي ..

من بداية ظهور لغة C كواحدة من أقوى لغات البرمجة سواء على مستوى التطبيقات أو مستوى النظم ، ثم تبعها تطور اللغة و ولادة C++ من C ولكن حملت الولادة تغير كبير في الخريطة الوراثية للغة ، مرت نسبة كبيرة من مبرمجي C بصعوبة بالغة في الإنتقال من C إلى C++ أو بالأصح بالإنتقال من التفكير على مستوى Structures إلى التفكير بمستوى أعمق بكثير وهو مستوى Classes (الأصناف) وما تقدمه من قدرات خارقة للمبرمج في التحكم في جميع التفاصيل والتسهيل واضفاء القوة واعادة الاستخدام لأجزاء التطبيق.
الصعوبة ليست في صعوبة تعلم جمل الأوامر أو طريقة التعامل مع مقدرات اللغة ، بقدر ما هي صعوبة في توجيه التفكير نحو الكائنات.
وش استفدنا من Classes أو وش اللي أعطتنا اياه وما أعطتنا اياه Structures ؟
أعطتنا خدمة كبييرة تسمى Reusability واللي تخلي البرمجة أقل مشاكل وأقل ملل (للمبرمج) وأكثر فائدة بكثير لأنك تعيد استخدام الأنواع والأصناف المعرفة سابقا كثيراً وفي أجزاء متفرقة من التطبيق ، بمعني تتخلص من التكرارات المملة والعقيمة ، بنفس الوقت أضفت قوة أمنية للتطبيقات وأصبح التحكم بصلاحيات الوصول أسهل كثيراً من السابق.
بقي شي واحد ودي اتكلم عنه انه استخدام الأصناف وحدها ما يعني البرمجة باسلوب OOP .. لأنه فيه فرق بين المصطلحين OBP و OOP.
Object-Based Programming وهذا يعني استخدام الأصناف فقط بدون Inheritance وبدون polymprphism.
Object-Oriented Programming وتعني استخدام الأصناف بالإضافة إلى Inheritance وبدون polymprphism ( خصائص البرمجة الكائنية)

الكثير يشوفون أنه من مآخذ لغة C++ أنها تسمح لك باستخدام الطريقة التقليدية بالبرمجة أو استخدام البرمجة الكائنية وهذا هو مهرب المبرمجين الجدد على مفهوم البرمجة الكائنية :) .. ولكن عاجلا أو آجلا رح يعترف المبرمجين التقليديين بعقم هذا التوجه وسيضطرون للتغيير وإلا .. الإندثار
على عكس C++ بعض اللغات لا تسمح إلا باسلوب محدد وهو البرمجة باستخدام الكائنات وهي لغات Pure Object-Oriented Languages مثل لغة (لسب) وعلشان كذا لما تجلس مع مبرمجي هذه اللغات أحيانا ما تفهم وش يقولون :) .. فمثلا ما يعرفون شي اسمه Functions .. ولكن تعرف باسم Messages لأنه لا يوجد شي اسمه Member أو Friend أو non-Member non-Friend .

ونأسف على الإطالة :) ..

ســــديــــم
19th June 2004, 12:10 AM
مرحبا ..

سوري على اللقافة أختي هو كيرس ..

بس حبيت أقول لأخوي Administrator يعطيك العافية ...

لأني استفدت جداً من كلامه .. << حق العلم اللي استفدت منه .. :)

معلومات جديدة .. بالنسبة لي .. ممتعة للغاية ...

يا ريت كل الأخوات والأخوان خصوصاً .. اللي احترفوا شوي ..

يزيدونا خبرات .. << بتتصفق .. لأن الموضوع لبنات 151 .. و الأولاد اللي زيهم

هو كيرز .. وينك ...؟؟

طولت ..........؟؟

بااايو ..

Abc
19th June 2004, 12:37 AM
السلام عليكم ..للجميع...
أنا بصراحه مستعجله و لي رجعه باذن الله بس بغيت أقول....<<---متفشلــــــــــه جدا !!
اني أنا أخذت ال(c++)وخلصت بس والله في أشيـــاء كثيـــــــرة جدا ما عرفتها الا منك ...لذلك الله يجزاك الف خير ويوفقك دنيا واخره ..
وشكرا مره ثانيه..

..HoKo..
19th June 2004, 02:17 AM
السلام عليكم جميعا :)

أشكركم يا أحلى أعضاء بالمنتدى على هذا التفاعل الرائع :)

Administrator ... :)
شكرااا اخي لأضافاتك الرائعه .. ما قصرت و وضحت كثير اشياء .. الله لا يحرمنا هالاضافات :)


Abc ... :)
هلااا بك اختي الغاليه :) .. جيت يا قلبي .. وراك مستعجلة ..
>> من طول الغيبات جاب ...
و انا جايبة لكم تكملة بسيطة للموضوع اتمنى تعجبكم :)
نورتي اختي و اهم شي تستفيدين :)

..HoKo..
19th June 2004, 02:24 AM
السلام عليكم .. :)


عـــــدنــــــا ... :)


عنوان المحاضرة اليوم ... ** FUN WITH CLASSES **
>>> :D


مقدمة ..
" قبل شوي قلتي لنا كيف نكون اوبجت لل counter .. كتبتبي class counter و بعدين شوية كلام مو مفهوم !! :)
ايش تطلع class ؟ و الا عاد public ؟؟؟ ... ترا عقدينا هوكيرز الله يهديك !! "
>>> روقوا و خلونا نكمل :)


4- ماهي ال classes ؟

الكلاس أقدر أقول عنه مُحتوى .. طيب على ايش يحتوي هالمُحتوى ؟؟
و لما نبغى نتعلم الكلاسس .. فيه حاجتين ...
الاولى .. كيف نكتب الكلاسس ؟
الثانيه .. كيف نتعامل مع الكلاسس ..

و رح نبدا طبعا صغار بعدين نكبر :)

طيب ..

بداية كالعادة برجعكم شوي للسي :) ..

تتذكرون ال struct ...
كنا نعرفه و نحط فيه اللي نبغى من المعلومات .. مثلا
struct book{ l
int num_of_pages; l
char title[30]; l
char author[30]; l
.....
};

هنا احنا عرفنا تايب جديد .. ( نوع ) و اسمه book :) ..
طيب ايش الفرق بين هنا و بين الكلاس ؟؟؟

شوفوا هذا المثال .. حنمشي الشرح عليه ..


http://data2005.jeeran.com/class.JPG


السطر 1 : هذا بداية تعريف الكلاس .. و هو الكي وورد class بعدين الاسم Counter على كيفك :)

السطر 2 : نلاحظ هنا اننا عرفنا integer عادي .. و نلاحظ بعد ان المنطقة اللي موجود فيها تشمل data member يعني هنا نحط المتغيرات اللي رح نستخدمها
و لأني هنا ابغى اسوي كاونتر فما احتاج الا عدد واحد i .. فيما لو كنت بأسوي شي ثاني رح احط عل الداتا المطلوبة ..
>>> ملاحظه (*) - نرجع لها بعد شوي - :)

السطر 3 : نلاحظ في كلمة public و عندها مكتوب access specifire .. طيب هذا يتعلق بالـ access لعناصر الكلاس سواء كانت data members او member functions
و عندنا 3 انواع من الاكسس سبسيفاير .. :) ..

* private
* public
* protected

الاولى .. برايفت .. يعني خاصه .. و يعني اني ما استدخدم العناصر او الاشياء اللي تحتها الا و انا جوا ال class scope .. و الديفولت او الافتراضي للكلاس هو برايفت
تتذكرون الملاحظه اللي قبل شوي :) (*) ... هنا قبل تعريف i ما فيه اكسس سبيسفاير .. معناها انه برايفت لأنه ياخذ الديفولت او الافتراضي .. يعني i هذي ما رح تنعامل معها الا في السكوب تبع الكلاس و بس

الثانية .. ببليك .. يعني الكل يسوي آكسس للي تحتها .. في كل البرنامج ..

الثالثه .. تشبه الاولى و لكن يوجد اختلاف فقط عندما تستخدم مع inhiretance .. - لاحقين عليها :) -


السطر 4 : constructor لاحظو اسمها زي اسم الكلاس و ما تاخذ شي و لا ترجع شي .. هذي خاصيه للكلاس اذا عرفت اوبجكت منه الكومبايلر يناديها اوتوماتكلي :)

السطر 5 : destructor برضه زي اسم الكلاس و لكن مسبوقه ب ~ .. و هذي بعد خاصيه تتنادى من الكومبايلر اذا طلع الوبجكت من السكوب في نهاية البرنامج مثلا ..

السطر 6 - 10 .. لاحظوا انها prototypes :) .. و انتو عارفين الفنكشنس و كيف نكتبها و كيف تاخذ برامترز و كيف ترجع .. بس الفرق الوحيد ان هذول تبع الكلاس ..
ليه ؟ لأن تعريف البروتوتايب حقهم جوا الكلاس .. فالفرق بيكون اني لما اكتب body للفنكشن رح اضيف شي بسيط يبين انها تبع class scope و رح استخدم اوبريتر معينه ( :: ) و اسمها
binary scope resolution operator و من اسمها واضح ان وظيفتها توضيح السكوب ..


و في الأخير .. ( }; ) .. هنا قفلنا الكلاس .. :)

>>> الف مبروك :D

و ان شاء الله اكمل متى ما قدرت :)

freedom
19th June 2004, 04:03 AM
يا حبيلك يا هو كيرز فعلا انا راح اخذ السي بلس بلس الترم الجاي
مع اني اخذت زي ما انتي عارفة مقدمة بسيطة في الclasses والظاهر اني اخذت فيه صفر في السؤال اللي جانا الاختبار
:|
المهم مرة شوكرا مع اني مقهورة على شي
انك ما حطيتي صور يدينك وانتي تشرحين لاني ما افهم عليك الا اذا حركتي يدينك
يمنة ويسرة مدري ليه المعلومة توصل بسرعة
لا تعصبين ترى امزح ::D
thanks again ..

Administrator
19th June 2004, 04:17 AM
شرح موفق Who_Cares ..
لا تتوقفين شدي حيلك عساك على القوة .. لان الموضوع ينفع يكون مرجع مهم للي رح يدرسون الأصناف :) .. بعد ما تكتمل جوانب الموضوع .. وهذا شي مهم كثير ومشجع ويحل كثير من الاشكاليات والاسئلة اللي صعب ينلقى لها اجوبة بسرعة وفي مكان محدد .. انا ما ودي نشوش أفكارك ولكن اذا احتجتي اي مساعدة احنا بالخدمة ..

..HoKo..
19th June 2004, 04:18 AM
freedom ... bd5

شكرا يا قلبي .. و اهم شي نك استفدتي :)

..HoKo..
19th June 2004, 04:20 AM
Administrator ..
مشكور اخي لوجودك :) .. و ما استغني عن ملاحظاتكم :)

أميرة الورد
19th June 2004, 09:16 AM
راااائع عن جد راااائع...

بس غريب انه ماتثبت...

هو كيرز لو سمحتي ثبتيه..لانه عن جد موضوع يستاهل...المفروض الكل يطلع عليه :)

لاتخافين محد بيقول تستخدم نفوذها ...عشان تثبت مواضيعها..:p

لي عوده باذن الله :)

..HoKo..
19th June 2004, 09:00 PM
Blue^Rose
مشكووووره يا قبي :p
و الله تسلمين لمرورك يالغالية و كلك ذوق .. و عشانك انتي و ديل بعد باثبت الموضوع :p
و ما استغني عن ملاحظاتكم و أسئلتكم :)

:)

المهند
20th June 2004, 04:21 AM
مميزة والله هو كيرز :)

بجد استفدت من الموضوع الله يخليك :)

أخوك .. المهند : )

..HoKo..
20th June 2004, 04:29 AM
مشكور اخي المهند ..
سعيدة بتواجدك .. :)

Ray_Of_Hope
20th June 2004, 04:40 AM
قبل كل شي ...

اعتذر اني تأخرت بالرد على موضوع من هذا الطراز << مضيع الباس ورد

كلعاده اخت !! who_cares !! دايم مواضيعك متميزه ....لوني داري كان فزعت لك منول وثبته :)

بخصوص الفروق بين اللغتين اعتقد وفيتو الموضوع حقه ...

فعلا ال ++C طريقه تفكير مختلفه كليا ..



اختصار object orianted programing ... ترجمتها .. البرمجه كائنية المنحنى ..
اسمها كذا يقول انها شي غريب !! ,,, في الواقع هي شي حلو و يسهل للمبرمج اشياء كثير

مشكلتنا نضخم الامور ليت كلنا ماخذينها زيك :)


ال oop بشكل عام بأي لغه كانت مفهوم بالنسبه للمبتدئين يمكن يوقفون فيه شوي لان طريقه التفكير عندهم ماوصلت للنضج المطلوب

يمكن عشان كذا انا مع الاخوان .. لازم تكون فيه مرحله تمهيديه قبل ال ++C اوjava

بخصوص ال ++C باين عليها ان الساينتكست مو صعب ... شجعتيني ابدى فيها

-----
حاب اسألك عن حاجه بال inheritance

ممم ... افرضي ان عندي main classes و عشاني one sub class
هل ممكن ان ال sub class يورث صفات ال main classes بوقت واحد ... وذا كان ايه معليش بثقل عليك بس ياليت مثال
-----

علفكره :- تراني اقدر الدعايه المجانيه :)

..HoKo..
20th June 2004, 05:23 AM
هلا بك اخوي .. يالله حيه هو و أسئلته :)

انا باجاوبك على قد ما فهمت من السؤال .. :p ..

اعتقد ان قصدك Multiple inheritance ... :)

اذا كان عندنا اكثر من base class او main class
و واحد (عشانك :) ) sub class او derived class

الـ sub class ممكن يورث الصفات من أكثر من main class ..
و بوقت واحد ... لكن بشروط :)

مثلا ..

http://data2005.jeeran.com/inherit.JPG

هنا الكلاس sub رح ياخذ من base1 و base2 ...
>>>> ممكن طبعا اكثر من 2 .. :)
طبعا من ناحية ال constructor .. رح يتنادى من اليسار لليمين حسب ترتيبهم ..
base1 .. بعدين base2 .. بعدين Sub ...
و ال destructor العكس طبعا :)
>>>> احد سألك عن هذي !! :D

الحين طبعا الكلاس sub رح يحتوي على جميع ما في base1 و base2 ..
ال public مع ال public و ال protected مع ال protected .. هذا طبعا لأن نوع
الانهرتنس public ...

>>> طيب ايش الشروط اللي قلتي عنها اول ؟؟
هذي تتعلق بالجزء Whatever ... :) ..
نفرض عندي في base1 دالة اسمها F ... و في base2 برضه دالة بنفس الاسم
و كلهم موجودين في ال public ..
اللي حيصير ان الكلاس sub .. اذا استخدمت الدالة F فيه او ناديتها عن طريق اوبجكت منه .. الكومبايلر بيطلع لك إررور !!! :| ... اللي هو ambiguty ... ما رح يفرق بين الدالتين .. هل هي تبع base1 .. او تبع base2 ..
و بالمثل باقي ال members في الكلاس .. سواء كانت متغيرات او دوال ..

الحل يكون عن طريق استخدام ال( :: ) لمعرفة السكوب .. يعني مثلا
base1::F() l >>> هنا ما فيه اررور لأنه عارف انها تبع base1

ان شاء الله تكون فهمت .. او بالاصح أنا فهمت عليك .. عموما اذا فيه اي سؤال باكون سعيده :)
>>> الدعاية المجانيه في الطريق ان شاء الله :)

..HoKo..
24th June 2004, 04:09 AM
السلام عليكم .. :)

عدنــــــــــــــــا ..

اليوم بنكمل الكلاسس بتعمق زياده :) ..

قبل عرفنا كيف نكتب الكلاس .. و عرفنا الاعضاء او الـ members حقونه .. و عرفنا أقسامهم .. :)

طيب الحين بنركز شوي على جزء الـ member functions ...
هي كما قلنا بالسابق بروتوتايبس .. و دوال عادية زي اللي تعودنا نكتبها قبل بس الفرق انها تابعه للكلاس و رح نوضح هذا الشي في جزء الـ header للفنكشن ..

يلا ايش رايكم بلا كثرة حكي و نبدا نطبق .. :) .. ( مستعديين :D )

http://data2005.jeeran.com/cons.JPG

السطر 1 ... هذي الكونستركتور اللي حكينا عنها قبل .. تتنادى أول ما يتكون الأوبجت ( يعني لما احنا نعرف اوبجكت جديد) و اللي يناديها هو الكومبايلر ..
هنا الكونستركتور حقتنا ما تاخذ شي و لا ترجع شي (ما لها ريتيرن تايب ابدااا و هذا عام لجميع الكونستركتورز ) .. طيب بالنسبة لكونها تاخذ ؟ .. ايه صح ممكن تاخذ قيم و لكن هذي خلوها لبعدين شوي :)
>>> لو حطينا ريتيرن تايب للكونستركتور رح يطلع لنا كومبايليشن إررور :|

السطر 2 .. هنا مجرد عطينا المتغير i قيمة ابتادائية و أكيد هي الصفر .. لاحظو اني استخدمت نفس ال i اللي بالكلاس و ما عرفت وحده جديده :)

السطر 3 .. هذي تنفذ طباعه جملة على الشاشه باستخدام الاوبجكت اللي هو cout .. و الانسرشن اوبريتور اللي هي (>>) .. نفسها السطر 5 .. بديل printf في السي

السطر 4 .. هذا تعريف الديستركتور .. لا حظو ما سوينا شي بال body ؟؟ .. مجرد طباعه .. عموما الديستركتور هذي متى حيكون فيها شغل ؟ .. اذا كان عندنا memory allocation
يعني ممكن نسويfree او delete للمساحه المحجزوة .. اذا عندي بوينترز ..


ابغاكم الحين تفكرون ببقية الفنكشن .. ما رح اشرح الا الهيدر حق الاولى ;) .. اذا فيه أسئلة ترا اوكي :)

http://data2005.jeeran.com/class2.JPG

لاحظو ...
الجزء 1 .. هنا عادي ريتيرن تايب ..
الجزء 2 .. هنا الغريب :) .. هذا احطه قبل اسم الداله للتوضيح انها تبع الكلاس Count و باستخدام طبعا الاوبريتر ( :: )
الجزء 3 .. تكملة الدالة عادي :)


و الله يوفقنا جميعا ،،، :)

أميرة الورد
24th June 2004, 05:28 AM
<-------تذكرت انها قالت بترجع ونست smil8

بصراااحه دروس رااائعه فعلا...
جزاك الله خير هو كيرز...والاخوان اللي اضافوا ....

والله يجزا الاستاذه سميره خير بعد..:)<-----وانا اقرا مبسوطه حسيت اني تشبعت باللغه :D

فيه مميزات اذكر قريت عنها عن السي بلس..
عشان كذا انا مؤمنه بانها افضل لغة برمجه ..<-----يبي لنا موضوع ترشيح لافضل لغة برمجه
اذكر منها :
1)اوامر لغة السي تقترب من اوامر الالة مما يمكننا من الوصول لخصائص في النظام لا يمكن الوصول لها عن طريق لغات اخرى....
2) تصنف لغة البيسك على انها لغة عالية المستوى أي تبتعد كثيرا عن مستوى التعامل مع المكونات المادية للألة و تقترب من المفهوم البشري للتخاطب , و لغة الأسمبلي هي لغة منخفضة المستوى تبتعد كثيرا عن أداء البشر وفهمهم و تقترب من احتياجات الالة لأوامر غير مفهومة من قبل الانسان الغير خبير , اما لغة السي ++ فقد مزجت بين الخاصيتين وكانت بذلك اكثر فاعلية و هيكلية بالمقارننة بباقي اللغات , و لذلك استخدمت في بناء الكثير من نظم التشغيل المتطورة و الشديدة التعقيد مثل اللينكس و الويندوز واليونكس .....
3) ومن مميزات لغة السي ++ صغر حجم الكود المنتج و سرعته العالية في التنفيذ و استقلاليته الاختيارية عن اي مكتبات اضافية مرفقة باللغة ,وتمتاز ايضا بتوافقها مع العديد من نظم التشغيل مثل الدوس و الويندوز 16 و 32 و اليونكس و اللينكس وغيرها.....

اتمنى ماكون قطعت تسلسل الدروس..:)

تحياااتي

..HoKo..
24th June 2004, 05:37 AM
Blue^Rose :) ... كذا الاعضااء و الا بلااااش :)
يا حبيلك و الله اضافتك خطييره :) خليك دايم قريبه :)

>>>>> على فكره انا من طالبات استاذه ساره آل سعود و ل3 كورسات متواصله
امووووووووووت فيها من جد الله يوفقهااا و يسعدهااا ياااا رب :)
استاذه سميرة ما جربتها بس يقولون انها تتحمس في الشرح و فاهمه :)


اوامر لغة السي تقترب من اوامر الالة مما يمكننا من الوصول لخصائص في النظام لا يمكن الوصول لها عن طريق لغات اخرى
و يلووومني في السي :)


صغر حجم الكود المنتج و سرعته العالية في التنفيذ و استقلاليته الاختيارية عن اي مكتبات اضافية
فعلااااا .. فيه اكواد تلقينها سطر سطرين بالسي بلس و اقل شي 5 بالسي :)

تسلميين يالغاليه .. ماتحرمش من مداخلاتك الرائعه :)

Administrator
24th June 2004, 05:37 AM
توني قبل لحظات كتبت رد .. اقولك فيه عسا المانع خير :) .. لكن علق الكمبيوترولما رجعت لقيت ردك
.. لي تعليق على موضوع الوراثة المتعددة .. ولي تحفظ على استخدامه ..
الوراثة المتعددة ممكن تريحك من جانب واحد واللي هو اضافة عمليات وصفات موجودة already .. لكن ممكن تسبب لك مشاكل مهولة في الجانب الثاني واللي ما كنت تتخيله .. و لحظتها رح تستخدم معادلة فابوناتشي لحساب bugs اللي ظهرت في برنامجك :D ..
بالمناسبة .. فكري بهالمشكلة :
لنفترض خط الهيراركي: (واللي استخدمت فيه MI)
http://www.lazord.net/etc/MI.jpg
أوكي .. هذا هو الكود حق البرنامج:


void Admin(const Teacher &teacher) //Function
{
//Whatever
}

void Admin(const GraduateStudent &GS) //Overloaded function which expecting a GraduateStudent polymorphically
{
//Whatever
}

void main()
{
GradTeachAsst Temp;

Admin(Temp);
}
وش اللي رح يصير ؟ :)

..HoKo..
24th June 2004, 06:16 AM
السلااااام عليكم :) ...

ايووووه كذا :) ... مشكووور من جد أخي :)



طيب ..

*** الحين من المعروف ان الداله اذا كانت تستقبل main\base ممكن اننا نرسل لها
ال sub\derived
>>>> احنا نسميها base\derived .. :) .. مو مهم ..

طيب .. الحين هذا الكود فيه overloaded functions ..

الاولى تاخذ Teacher
و الثانيه تاخذ GraduateStudent

و بالمين معرفين GradTeachAsst و هو بدوره يورث من جميع الكلاسس اللي فوق
>>>> نقدر نقول كذا ;)

طيب هذا الشي رح ينتج عنه كومبايليشن ارررور :| .. !!
ليه طيب ؟؟
لأنه ما حيفرق بين النسخ للفنكشسنس Admin !! يعني (ambiguous)
لأنه يمشي مع اي وحده للسبب اللي ذكرته فوق :)

لو مثلا نفترض ان GradTeachAsst ما يورث من Teacher .. كان مشى الحال :)

ايش الحل ؟؟ :)
ما اعتقد ان virtual classes لها دخل !! .. بانتظار ردك .. :)

و شكررررا مره اخرى للتفاعل الرائع اخي ..

..HoKo..
24th June 2004, 06:21 AM
صحيح ! :)


في الجانب الثاني واللي ما كنت تتخيله .. و لحظتها رح تستخدم معادلة فابوناتشي لحساب bugs اللي ظهرت في برنامجك
ممكن توضحها أكثر اذا سمحت :p

و شكرا

Administrator
24th June 2004, 06:44 AM
سلام ,, :)
توصلتي للمشكلة وتوصلتي للحل :) ..
انا كان قصدي من المشكلة اني اوضح وحدة من عيوب MI :) ..
الحل طبعا اللي هو الغاء Overloading للدالة ، علشان نقدر نحل الاشكال :) ..


صحيح !


إقتباس:
--------------------------------------------------------------------------------
في الجانب الثاني واللي ما كنت تتخيله .. و لحظتها رح تستخدم معادلة فابوناتشي لحساب bugs اللي ظهرت في برنامجك
--------------------------------------------------------------------------------


ممكن توضحها أكثر اذا سمحت

تخيلي معي انك كلفتي بتطوير مشروع معين سواء نظام أو برنامج .. والاخ أو الأخت اللي كانت تشتغل عليه قبلك مستخدمة MI في بعض أجزاء المشروع ، رح تكملين من النقطة اللي وصلت لها هي .. حلو
بعد ما اطلعتي على الهيكلة الأساسية للبرنامج وعرفتي الأصناف المعرفة فيه .. واستخدمتي كائنات من الاصناف هذي ، في كل مرة تعرفين كائن من هذه الأصناف رح يكون فيه الف احتمال انك تتعرضين لنفس مشكلة المثال :) ..
وساعتها تتمنين تعيدين المشروع من جديد بدل تكملته من النقطة اللي حاولتي البداية منه :) ..
بمعنى آخر ، انا اعتبر MI اكبر أعداء Reusability وبكذا تشوه جزء من وجه اللغة الحسناء :) ..

تحياتي لك :) ..

..HoKo..
24th June 2004, 06:52 AM
مفهووم :) .. شرح رائع من جد .. جزاك الله خير ..

Administrator
24th June 2004, 07:21 AM
سلام ,,
اممممم طيب وش رايك بهذا الكود ؟ ممكن تقولين لي وين المشكلة فيه ؟ :) ..
ملاحظة : الدالة (يفترض) منها انها تعكس ستاك معين .. (لاتشغلين بالك بالـcall للدالة) ..


class stack{ //for alignment
public: //for alignment
stack() //for alignment
{ size = 0; } //for alignment
virtual ~stack(); //for alignment
bool empty() const //for alignment
{
if(size == 0) //for alignment
return true; //for alignment
return false; //for alignment
}
void push(const char &item) //for alignment
if(size <30) {
s[size++] = item; } //for alignment
void pop() //for alignment
{ size--; } //for alignment
char top() const //for alignment
{ return s[size]; } //for alignment
int getsize() const //for alignment
{ return size; } //for alignment
private: //for alignment
char s[30]; //for alignment
int size; //for alignment
};

stack &Rev(stack S1) //for alignment
{
stack temp; //for alignment
while(!S1.empty()) //for alignment
{
temp.push(S1.top()); //for alignment
S1.pop(); //for alignment
}
return temp; //for alignment
}

سلام :) ..

..HoKo..
24th June 2004, 08:33 AM
عدنــــــــــــــــــــــ ـا .. :)

اليوم بنفصل الكلام في الــ constructors ... :)

طيب .. :) في البدايه رح أقولكم عن كم شغله جديدة عليكم بالسي بلس :)

*** فيه شي اسمه default value .. يعني القيمة الافتراضيه .. :) .. طيب و ين تطلع الاخت هذي !!
شوفوا معاي المثال هذا :) :

void f(int i=8) l
{....}

هذي داله عاديه صح ؟ :) .. طيب على اي اساس حضرتك حطيتي = في الهيدر حقها !!
>>> هذي هي الديفولت يا حلوين :) .. يعني لو ما ارسلنا للداله شي رح يستخدمها .. :)
يعني أقدر أناديها بطريقتين ..
1 - f(1); l
2- f(); l
بينما في السي ما نقدر نسوي رقم 2 .. حيطلع لنا إررور :)


طيب نرجع لموضوعنا عن الــ constructors .. طبعا قلت لكم من قبل انها ممكن تاخذ قيم ( يعني نرسل لها ) :)
مثلا .. نرجع لحقتنا القديمه :)
Count(int x); l
هذي ممكن تاخذ عدد و تسوي انيشلايزيشن للعداد بقيمته .. اقصد تعطيه قيمة ابتدائية بنفس قيمة العدد المرسل ..
مثلا انا في برنامجي ابغى ابدا العداد من 5 ( علي كيفي طيب ! ;) ) .. كل اللي بسويه مجرد اني لما اعرف الاوبجكت بقول كذا
Counter ob(5); l

ان شاء الله فهمتوا :p ...


*** فيه شي اسمه initialization list .. و هذا بس نلاقيه مع ال constructors و بس ! غيره يطلع لك إررور
طيب .. ايش هو ؟؟ .. شوفوا يا حلوين .. من اسمه باين .. الكلمة الاولى تعني!! (:p) امممم اعطاء قيمه ابتدائة الظاهر .. و الكلمة الثانيه تعني قائمة ..
طيب برضو ما فهمنا !! كيييف ؟؟
الحين تخيلو عندي بالكلاس (جزء البيانات data member ) عدد و حرف .. و انا باحط فيهم قيم مرسلتها مع الكونستركتور .. كيف تتم هذي الحركه بواسطه initialization list

Counter(int x, char c) : i(x) , ch(c) {...} l
هذا مماثله للتالي ..


Counter(int x, char c)
{
i=x;l
ch=c;l
}
كأنها أسايمنت (مساواه =) ..
ميزتها انها تخلي شكل الكود حلو و صغير و مرتب :) ..


*** طيب :) افرضي نبغى نعرف ارراي عنصرها اوبجكت !! نقدر ؟؟ ( ايي و الله تقدرون :) )
بس فيه شووويه شروط و اشياء لازم تنتبهوا لها :) ..

مثلا ... Counter a[10]; l
هنا عرفت مصفوفه مكونه من 10 عناصر من الاوبجت كاونتر ..
طيب نجي للشروط ..
في حاله المصفوفات لازم يكون عندي في الكلاس حقي default constructor !! ايش تطلع هذي بعد !!
هذي معناها constructor افتراضيه يعني ما تاخذ شي ابدا ... و هي جددددا مهمه في حاله المصفوفات .. اذا كان ما عندك ما رح يمشي برنامجك
و حتى عموما اذا ما كان عندك default constructor الكومبايلر كرررييييم و احنا نستاهل .. حيحط لك هو من عنده .. ( طبعا زيها زي عدمها ;) ) ..

طيب انتي بالبدايه تكلمتي عن الديفولت فاليو .. او القيمة الافتراضيه !! ما استخدمانها ليه !!
هذي ممكن تستخدمونها عموما و ممكن نستخدمها كحل لمشكلة المصفوفه مع ال constructor يعني لو كانت ال constructor تاخذ قيم و احنا سوينا هالقيم على انها ديفولت ما رح يكون فيه مشكله هنا :)


و دمتم سالمين :)

..HoKo..
24th June 2004, 08:36 AM
اووووبس :p .. ما شفت ردك !!
عموما مررره مشكور و جزاك الله خير :) .. انا الحين مضطرة اني اطلع لكن اكيد بارجع بالحل بكرا باذن الله تعالي ...

جزاك الله خير .. و الله يوفقك ..

..HoKo..
24th June 2004, 08:42 AM
لووووول صراحه ما قدرت استحمل :D:D

ما ادري اطلعت عليه بسرررررعه فائقة جدا :p

اتوقع لأنها ترجع ريفرنس !
لا و ترجع بعد temp اللي هو معرف جواتها ,,,
طبعا ما نقدر اصلا نستخدم خاصيه ترجيع الريفرنسس الا اذا كان ريفرنس لقلوبال او ستاتيك !!!


بس ترا مو كلام نهائي :D لازم ارجع للموضوع ..

شكرا ..

Administrator
24th June 2004, 11:32 PM
سلام ..
100% ;)
ماشاءالله .. هذي هي فعلا المشكلة ..
لما نبغى نرجع قيمة عن طريق return فإنه يتكون اوبجكت جديد ويشتغل الكوبي كونستركتور ويكون الاوبجكت ويرسله لنقطة المناداة ، طبعا بياناتنا هنا معرفة static فـ الكوبي كونستركتور توفره اللغة وما يحتاج نكتب الكوبي كونستركتور في الكلاس :) ..
وش اللي رح يصير في مشكلتنا هذي ؟
ما رح يكون اوبجكت جديد ويرسله .. وهذي هي المشكلة :) .. رح يرجع عنوان temp (لأن الدالة معرفة ترجع رفرنس) ، ولكن زي ما احنا عارفين انه لما تتقفل الدالة .. تموت كل الكائنات الموجودة داخلها ما عدا static :) .. في نقطة المناداة رح يحصل عنوان الاوبجكت temp .. ولكن الاوبجكت اساسا مات بعد ما انتهى عمل الدالة .. فـ رح يعطيه عنوان منطقة خاطئة :) ..
تحياتي لك ..

..HoKo..
25th June 2004, 07:26 AM
السلام عليكم .. :)

مشكوور اخي كفيت و وفيت .. شرح حلو ما شاء الله :) ..

عندي تعليق بسيط :) ..


الكوبي كونستركتور توفره اللغة وما يحتاج نكتب الكوبي كونستركتور في الكلاس
مممممم !! ما ادري لكن بقول اللي عندي :)
بالنسبة للمثال اللي انت حطيته الداتا عباره عن ارااي ..
و دايما لما نرجع اوبجكت او نرسله حتى رح يكون عندنا عمليه كوبي او نسخ ..
و اذا عندنا بالكلاس كوبي كونستركتور رح تقوم بالغرض
و اذا لا زي ما قلت انت .. رح تتسوى عملية النسخ من الكومبايلر نفسه
و اللي هي نسميها bitwise copy .. تنقل بت بت للاوبجكت المقابل
فبالنسبة للأراي و الداتا العادية ما حيكون فيه مشاكل ..
و لكن متى تطلع لنا مشاكل تخلينا نضطر اننا نضيف للكلاس كوبي كونستركتور
>>> اذا كان عندنا ميموري أللوكيشن .. لأنه اللي بيصر و باستخدام ال bitwise copy
عنوان البوينتر حينتقل مو نفس الكونتنت .. فلما يصير هذا الشي بمجرد ان الاوبجكت يطلع من السكوب المساحه المحجوزة رح تنلغي ! و بالرجوع لل calling invironment او المكان اللي نادينا منه الاوبجكت رح يكون فاقد للمساحه المحجوزه و اللي حيسبب
run time error اذا حاولنا نسوي آكسس للاليمنتس او طلع برا السكوب :)

ان شاء الله اكون واضحه في كلامي و ارحب بأي تساؤلات او تعليقات ..

:)

Administrator
25th June 2004, 08:04 AM
صحيح كلامك .. لكن زي ما قلت في ردي اللي فصلت فيه المشكلة اني استخدمت Static Allocation وبكذا اكون استغنيت عن كتابة Copy Consructor ..
يعني اللي رح يفرق مع Dynamic Allocation اني رح اضطر لكتابة Copy Constructor ..
علشان كذا انا قلت لك انه الـCopy Constructor موفرته اللغة وما يحتاج اننا نعيد كتابته :) .. لاننا ما استخدمنا Dynamic ..

لأنه اللي بيصر و باستخدام ال bitwise copy
عنوان البوينتر حينتقل مو نفس الكونتنت .. فلما يصير هذا الشي بمجرد ان الاوبجكت يطلع من السكوب المساحه المحجوزة رح تنلغي ! و بالرجوع لل calling invironment او المكان اللي نادينا منه الاوبجكت رح يكون فاقد للمساحه المحجوزه و اللي حيسبب
run time error اذا حاولنا نسوي آكسس للاليمنتس او طلع برا السكوب
كلامك صحيح .. لانه رح يشغل Destructor للاوبجكت temp وينسخ عنوان منطقة خاطئة وهنا رح تظهر bug ..
انا ما كنت ارمي لهالشي :) .. لكن اشكرك لانك وضحتي الملاحظة هذي ..

شوفي المثال هذا .. نفس المشكلة ولكن هنا استخدمت متغيرات عادية:

int &sum(int x, int y) //summation function
{
int z = x + y; //Assigning creation
return z; //return the adress of (z) varible
}
اللي رح يصير .. انه لما يوصل لعملية الارجاع رح يسوي ارجاع by reference .. بيرجع العنوان حق z لنقطة المناداة ويدمر z نفسها .. وبكذا اعطى عنوان منطقة فيها garbage value .. وهذا اللي كنت اقصده :) ..
أشكرك لتفاعلك .. وآسف إذا قاطعت تسلسل أفكارك بكتابة دروس الـOOP :) .. ولكن ما عدمنا الفايدة ..
تحياتي لك ..
سلام ..

..HoKo..
25th June 2004, 08:42 AM
استخدمت Static Allocation وبكذا اكون استغنيت عن كتابة Copy Consructor ..
يعني اللي رح يفرق مع Dynamic Allocation اني رح اضطر لكتابة Copy Constructor ..
!! GOOD POINT !!

فهمت عليك :) .. مشكور ..

ColD
26th June 2004, 05:51 PM
مشالله عليك كفيتي ووفيتي موضوع ممتاز مثل ما تعودنا منك
شكرا على هالمعلومات
ويسلمو الايادي

..HoKo..
26th June 2004, 08:02 PM
تسلم أخوي أقدر مرورك :) ..
الله يقدرني اكمل و اعطي اكثر :) ..

ColD ZerO
27th June 2004, 05:41 PM
مشاركة بسيطة
اولا : الموضوع كثيييييير لوووووووووز " مصطلح يعني جدا حلوD:: "

ثانيا : في نقطه مهمة جدا واللي تكلموا عن ال java and C++ diffrences نسوا يتكلموا عنها وهي في عالم تصنيف اللغات لفة جافا تعتبر لغة fully object oriented programming language لان ال main function يكتب داخل class ولكن السي بلس بلس not fully object oriented language لان ال main function يكتب خارج class وهذا منافي للمبدء ال object oriented languages

ثالثا : انتشار ال C++ اكبر بكثيييييير جدا في امريكا و اوروبا ماعدا المانيا ...... وخاصة في البرامج المتعللقة بال image processing مثل الفوتوشوب .

ارجو اني افدت ولو بالقليل

Ray_Of_Hope
27th June 2004, 08:08 PM
السلام عليكم .....


ليتك بس تعذريننا اخت !! who_cares !! .. المشكله انه مع النقاش تجي افكار اذا ماكتبناها تروح :)

الاخ ..
sd4 : Administrator

عيني عليك بارده يابطل :) معلومات ولا اروع

يمكن الي لفت نظري بكلامك ان ال <<MI>> عيوبها ومشاكلها ووجع راسها :) اكبر من فايدتها

بينما كنت اعتقد انها ميزه اساسيه لل ++C عن الجافا مثلا الي درسناها ومافيها ال << MI >>

بس كلامك هذا ضرب فيوزاتي :|...

هل برأيكم ان ال ++c افضل من دون ال MI ???

Administrator
27th June 2004, 09:26 PM
حياك اخوي راي ..
أقدر لك ملاحظتك عزيزي :) ..
بالنسبة لـMI أنا اللي كنت اتكلم عنه انه ما دام المبرمج ما بعد وصل لمرحلة الاحتراف الحقيقي واللي وقتها يعرف نقاط القوة والضعف وكيف يتابع التسلسل الهيكلي للبرنامج بالملي .. يعني قادر يربط النقاط مع بعض بدون ما يفقد الترابط .. اقول انه لو يستغني عن الوراثة المتعددة أفضل له .. وممكن يستغني عنها بـSI ورح تفي بالغرض والمشاكل رح تكون أقل بكثييير .. والتعقيدات أقل بكثييير
على فكرة :) .. لو يوم صادفت مبرمج مخضرم ومحترف في هذي اللغة بالذات .. اسأله عن حجم استخدامه للـMI :) .. ولحظتها رح تتذكر نقاشنا :) ..
الفكرة مثل ما قلت لك .. انه ما نعني ان اللغة بدون MI أفضل .. لالا بالعكس هذي ميزة قوية جداً .. لكن استخدامها صعب ومعقد للغاية :) ..
تحياتي وحيائي :) ..

..HoKo..
27th June 2004, 10:51 PM
مشاركات و لا أروع :) ...


ColD ZerO ..
ملاحظه خطيرة بصراحه :) .. انا ما كنت أعرف هذا الشي لأني ما درست جافا ..
بس اذا ما عليكم كلافه احد يحط نموذج مبسط :D ..
و بالنسبة للسي بلس اغلب مواد الجرافيكس تدرس بواسطتها ... :)
مشكور اخي ..

Ray_Of_Hope ...
شدعوى بالعكس هذي المناقشات من صلب الموضوع ..
شكرا لك ..

بالنسبة لل MI .. صحيح لها عيوب كثير و تطيحك في مشاكل كل ما تعقد برنامجك أكثر :) .. اطلعت على برامج كبيييره و معقده كلها تعتمد على الانهريتنس...
ما استخدموا فيها الا SI :) و ارى انها كافيه الى حد ما :) .. و زياده لا ننسى ال composition لأنها some how بديل للانهريتنس :)

Administrator ... شكرا لك ..

موفقين ،،،

..HoKo..
28th June 2004, 03:53 AM
عندنــــــــــــــااا :) ...

اليوم بنتكلم عن مميزات features في السي بلس ماهي موجوده في السي :) ..

1- refrences ... ممممم ما ادري بالضبط يعني ايش بالعربي .. يمكن ( بديل !! :p ) ..
طيب .. لما نتكلم عن الريفرنسس معناها احنا باي منطقه !! ..

* تعريف المتغيرات / * ارسال قيم مع دوال / * ارجاع قيم من داله ..

وحده وحده :) ...

اول شي يعني ايش ريفرنس ؟؟ ..
** الريفرنس عند تعريف المتغيرات يعني انك تستخدم المتغير بكذا اسم .. طيب كيف يتعرف ؟؟!! و كيف يستخدم ؟؟ ايش الشروط ؟؟
كللله بنشوفه عبر مثال .. :)

http://drr.cc/pic/ref1.JPG

الحين numRef هو اسم ثاني ل num ..
يعني الستيتمنتز اللي تحت زي بعض ...

num+=1; l
numRef+=1; l

و شروطها ..
* لازم يتسوا لها اساينمنت اول ما تتعرف و الا يصير إررور :| ..
* ما نقدر نسوي ريفرنس لرفرنس ..
* ما نقدر نسوي أرراي اوف ريفرنسس ..
* ما نقدر نسوي بوينتر لريفرنس ..

>>> و هي بالشكل هذا نادرة الاستخدام ! :)

طيب وين أهمية الريفرنس اجل ؟؟

تتذكرون بالسي ايش كنّا نقول ..
simulated call by refrence ... يعني محاكاة .. مو نفسه .. اساساً بالسي ما نقدر نسوي هذا الشي :)
كنّا نرسل الادرس للمتغير و الداله تستقبل بوينتر :) ..

** نجي لل call by refrence :) ... السي بلس تدعم هذي الخاصيه بدون بوينترز و لا قلق :)
طيب كيف ؟ ..

-- اول شي :) ... لما نرسل ..

تكون الداله معرفة على انها تستقبل ريفرنس بالشكل التالي ..

void square(int & ); l

الكول هذا بالمين مثلا او باي مكان ..
i=5; l

square(i); l

هنا ال i نفسها بتتغير ..

i = 25; l

هذي حلوه و مفيده و ما فيها مشاكل :) ..

-- ثاني شي ... لما نرجع ريفرنس ..
هذي شوي غريبه :) .. بس حلوه لا تخافون سهله :) ..

ان شااء الله نكملها لوحدها بعدين ..

Lost Angel
29th June 2004, 03:18 AM
رااااااااااااااااااائع.....
بصراحة الموضوع جدا رائع....
الله يجزاك خير اختي who_cares ...
انا مستوى ثالث وبصراحة الموضوع مرة فادني..
بس حبيت اسالك عن simulate call by refrence مو مرة فاهمتها..
انا فاهمة معنى call by refrence بس اللي مو فاهمته ..
ليش البوينترsimulate call by refrence مهو call by refrence ....

..HoKo..
29th June 2004, 08:48 PM
اهلااا و سهلااا اختي الغاليه Lost Angel :)
اسعدني ردك و كونك استفدتي من جد :)

...

نجي للـ simulate call by refrence ...

انتي قلتي انك فاهمة call by refrence .. :) .. طيب كويس و تمام :)
هذي كنتو بالسي تسووها في الدوال ..
بالطريقة التالية ..
انكم ترسلون عنوان المتغير ( الأدرس & ) و تعرفون الداله على انها تستقبل بوينتر :)
و تتعاملون داخل الداله مع محتوى البوينتر content يعني مثال ..


void myFunction( in*x) l
{
*x >>>> اي شي تبغين :) مثلا ++
}

int main() l
{
int y=0; l
myFunction(&y); l
.....
}


هذا كود سي ... ايش سوينا بالضبط .. ارسلنا العنوان مو المتغير نفسه .. :)
اساسا بالسي ما نقدر نرسل المتغير نفسه و يصير call by refrence ..
فاحنا استخدمنا البوينترز عشان نحاول اننا نحقق الـ call by refrence ..
و لكن في الحقيقه ما هو call by refrence انما احنا جالسين نقلده او بمعنى آخر (محاكاة) عشان كذا المصطلح الصحيح هو simulate call by refrence بالنسبة للسي :)

اما السي بلس فلا موجود فيه call by refrence و هي زي ما حكينا عنها قبل :)
تستخدم عادي و ما لها دخل بالبوينترز :)

ان شاء الله يا رب تكوني فاهمه :) ...

هو عموما لما نتكلم في السي نقول call by refrence و نتجاهل simulate call by refrence .. و لكن في الواقع هي كذلك :) و تأدي نفس الغرض :) ...

سعيدة بمتابعتك و سؤالك :) .. الله يوفقك ،،

ياقلبي يالجراحه
29th June 2004, 09:21 PM
ممتازه هو كيرز ،،،
احسنتي بارك الله فيك fv5
ترا والله العظيم مافهمت شي بس صح عليك fv5

Lost Angel
30th June 2004, 01:29 AM
شكراااا جزيلا who_cares .....
واخيرااااااا فهمتها.....
بصراحة شرحك مرة حلووو....

gentlewoman
30th June 2004, 07:34 AM
السلام عليكم ورحمة الله

أختي !! who_cares !!


الله يعطيك العافيه معلومات قيمه ومفيده

احنا أول لغة برمجه ندرسها هي السي

أما السي بلس بلس لسه ما درستها بس بحاول أتعرف عليها بالإجازه وموضوعك هذا فادني كثير

ربي يوفقك دوم.

..HoKo..
30th June 2004, 02:09 PM
يا قلبي يالجراحه ! ..هلا .. ادري انه صح :D ..

Lost Angel ... :p ... فرحتيني و الله :) .. تسلمين و كلك ذوق ..

gentlewoman ... :) ... اهلا فيك و بكل فرع القصيم :) ...
بالنسبة للسي بلس .. اذا انتي متعوده على السي .. رح تحسيها غريبة بالبدايه لكن بعدين رح تحبيها و تنسي السي شوي ;) ....

الله يوفقكم جميعا ،،،،

..HoKo..
30th June 2004, 02:09 PM
السلام عليكم ... عدنا :) ..


:)~* Returning Refrence *~:)


اليوم بنكمل موضوع الريفرنس باذن الله .. بالذات لما نرجع ريفرنس ..

طيب .. الدوال عادة كيف نستخدمها !!

مثلا دالة ترجع رقم .. كيف باستخدمها في برنامجي !

كود سي ...

i=f(); l
printf("%d\n", f() ); l

كود سي بلس ...

i= f(); l
cout<<f(); l

ايش نلاحظ ! .. استخدمنا الداله مع الطباعه و في انساب ( أساينمنت ) ..

طيب ناخذ السطر الاول من الكود .. شايفي ال ( = ) .. الدالة وين موقعها ؟
على اليمين صح :) ؟ ...

مستحيل تكون على اليسار ! مو ؟ :)
f() = i ; l
>>>>> غلط هذا الشي .. !!


من هالمنطلق بابدا اتكلم عن ارجاع الريفرنس .. :)

في السي بلس أقدر استخدم الداله على يسار اليساوي ( = ) ..
بس ايش الشروط ! كل شي و له شروط :)
>>>> الشرط ان الداله ترجع ريفرنس ...

طيب برضو كل شي و له شروط ... ايش الشرط ان الداله ترجع ريفرنس ؟؟ >>>> انها ترجع الريفرنس لمتغير يكون نوعيه التخزين( storage class ) له هي .. global or static !!!

يؤ ! ايش هذا ! طيب ليه ؟ ... و ايش الفايدة أصلا لما نرجع ريفرنس !!! :|

.... :) ....

وحده وحده ...

ايش فايدة الريفرنس ؟* أقدر استخدم الداله على يسار علامة اليساوي ..
* باستخدامها ممكن اخزن قيم في متغير عن طريق الداله .. و هالمتغير لازم يكون global or static ... طيب ليه ؟

زي ما احنا عارفين بعد ما نوصل لنهاية السكوب تبع الفنكشن المتغيرات اللي تبعها كلها تنتهي او تتدمر ... و الغرض من الريفرنس اني اخزن في المتغير اللي جالسه ارجعه من الداله .. فلما يكون معرف جوا الداله ما رح استفيد شي !
عشان كذا نعرفه كـ global or static ... :)

خلونا ناخذ مثال و بلا كثرة حكي :) ... في هذا المثال عندي كلاس فيه مثلا عدد .. و العدد هذا موجود في البرايفت .. يعني و انا بالمين ما اقدر اسوي آكسس للعدد
او اغير من قيمته ..

رح نستخدم داله اسمها مثلا assign ترجع العدد كريفرنس .. و نشوف كيف تصير :) ...

http://data2005.jeeran.com/newRef.JPG


هنا النتيجه اللي رح تظهر مع الرن o/p ... هي 5 ....


:) ... ان شاء الله يكون واضح .. و ارحب باسئلتكم :)

..HoKo..
6th July 2004, 02:03 PM
السلام عليكم ... :)


عدنــــــا ...

اليوم بنروح سوا مشوار خفيف و ظريف في عالم السي بلس .. بنوقف الحين في محطة حلوه اسمها function overloading ... :)


ّ ~~ function overloading ~~

هذي خاصية موجودة في لغة السي بلس تسمح لي اني أعرف كذا دالة بنفس الاسم -بشروط طبعا-
يعني ايش !!

يعني دالتين أو أكثر لهم نفس الاسم بالضبط و لكن البرامترز او المتغيرات اللي تاخذها لازم تكون مختلفة قطعاً :) ..
و السبب : ان الكومبايلر يقدر يفرق بينهم لما احنا نناديهم
* ملاحظة : الريترن تايب ماهو كافي لجعل الكمبايلر يفرق .. فمانأخذه بالاعتبار عندما نكتب overloaded functions ...

ايش رايكم ناخذ مثال ! :)

http://data2005.jeeran.com/overloading.JPG

طيب ايش الناتج او المخرجات من تشغيل البرنامج ..

http://data2005.jeeran.com/output1.JPG

*** ملاحظات ***

- نلاحظ ان عدد البرامترز مختلف لكل نسخه (هذا هو شرط الاوفرلودنق بالاضافه لاختلاف النوع )
- ما اهتمينا في الريتيرن تايب او اللي نوع المتغير اللي ترجعه الداله

*** من مميزات ا ل overloading ***
يعطينا برامج مفهومة أكثر .. مثال داله تجمع اعداد مرسله لها سوف نعطيها الاسم sum .. لو كتبنا نسخه تاخذ عددين و اخرى تاخذ 3 او من انواع مختلفه
مثلا int و float ... اسم واحد مفهوم يلبي جميع الاحتياجات و هذا ما يميز برامج السي بلس ..
و ليست مقصورة على ال overloading لوحدها فيه طرق أخرى لاحقين عليها :)


*** مشاكل مع ال overloading ***
الزين ما يكمل ;) .. فيه مشاكل تطلع لنا مع ال overloading أغلبها تكون ambiguty ..
يعني ايش ؟! .. احيانا الكومبايلر ما يقدر يفرق بين عدة نسخ للدالة .. و يرجع هذا لعدة أسباب ..

- نكون مستخدمين قيم افتراضيه او default value مع وحده من الدوال ..
مثال :

f(int) l
f(int=1, int) l

لاحظو الاولى تاخذ عدد واحد .. و الثانيه ممكن تاخذ عدد و ممكن تاخذ عددين بسبب الديفولت اللي حطيناه !!
الكومبايلر لما يجي يختار بيحتار !! و يطلع لنا إررور اللي هو ambiguity ....

- ممكن يطلع بسبب التحويل في المتغيرات .. مثلا ..
احنا عارفين ان double> float > int > char
فهو أول شي يدور على ماتش مطابق تماماً .. اذا ما لقى يحول من الصغير للكبير .. :)



أي أسئلة اتز اوكي :) .. ان شاء الله يكون الشرح مفهوم للجميع ..
دمتم سالمين ،،،

..HoKo..
9th July 2004, 04:19 PM
السلام عليكم .. :)

عدنـــــــــــــــــا ..


العنوان : ~ inline functions ~

:) ...

هذي من خصائص السي بلس بلس الاضافيه .. ما فيها شي صعب و لا غريب ..
طيب يعني ايش ان لاين ؟

أول شي inline عبارة عن keyword او كلمة محجوزة زيها زي include , int , return .. اممممم يعني تطلع بلون أزرق ض1

لاحظو العنوان inline functions .. يعني لما أتكلم عن inline .. أتكلم عن دوال .. يعني هي تجي مع الدوال ..

معناها : من اسمها .. اذا اسبقت الداله بهذه الكلمة عندك كتابة الـ prototype او حتى header كأني أقول للكومبايلر يضيف نسخه من كود الفنكشن في مكان مناداتها ..
يعني .. أنا في المين .. ناديت داله معيبنه و هذه الداله إنلاين .. اللي يصير ان الكومبايلر يحط نسخه من كود الفنكشن في الاوبجكت فايل ! ..
>>> ايش هذا كلام صعب !! ..... :)


** لماذا استخدمها ؟ .. اين استخدمها ؟ ..

لماذا ؟ اذا كان كود الداله صغير .. و الدالة تكثر مناداتها .. هذه الخاصيه تنتج لنا برنامج أسرع :)
اين ؟ مع الدوال الصغيره عادة .. و نتلافى استخدامها مع الدوال الكبيرة لأنها تكبر من حجم البرنامج ..

** كيف يتصرف عزيزنا الكمبايلر معها ؟

الانلاين هي طلب و ليست أمر ! .. يعني اننا اذا عرفنا الداله بأنها انلاين الكمبايلر ممكن ينفذ الطلب و ممكن لا !


طريقة تعريف الدوال كـ inline ..
1) عن طريق كتابة الكلمة inline قبل الهيدر للدالة
2) كتابة كود الدالة التابعة ل class معين داخل ال body تبع الكلاس نفسه .. يعتبرها انلاين ..

ملاحظات ..

* بعض الكومبايلرز لا تنفذ خاصية الان لاين اذا كان كود الدالة يحتوي على لووب او سويتش او قوتو ..
* لا نستطيع الحصول على انلاين مع دوال recursive
* ايضا غير مسموحه مع دوال تحتوي على متغيرات static


اتمنى أن يكون الشرح واضح سلس :) ..

..HoKo..
25th July 2004, 05:32 AM
.. مثال ..

Define a class for a type called CounterType. An object of this type is used to count things, so it records a count that is a nonnegative whole number. Include a default constructor that sets the counter to zero and a constructor with one argument that sets the counter to the value specified by its argument. Include member functions to increase the count by one and decrease the count by one. Be sure that no member function allows the value of the counter to become negative. Also, include a member function that returns the current count value and one that outputs the count. Embed your class definition in a test program.

الملف المرفق فيه الحل .. الامتداد txt ..

.. :) ..

أرحب بأي أسئلة :) ..

the n3t
12th September 2004, 10:16 PM
ماشاء الله موضوع رائع جدا صراحة

وانا من رايي ماهو زين لو الواحد يبدأ بالسي++ بدون مايتعلم أساسيات السي أول ؟

لأن السي هي الأصل والسي لغة تساعدك على فهم تركيبة الجهاز أكثر من السي++ وتعلم السي راح يعطيك سهولة في تعلم لغة التجميع الأسمبلي

وانا من رايي الواحد لازم يتعلم السي حتى لو بدأ بالسي++ أول

وبعدين أغلب دوال برمجة الشبكات مكتوبة على هيئة
C-Style
وليس
C++-Style

وشكرا على الموضوع مرة أخرى

اخوكم : ذا نت

قمرالجامعه
21st September 2004, 03:34 PM
مرررررررررررررررررررررررر رررررررررررررررررررررررره شكرا كييييييرز على الشرح ..


تدرين اليوم انا في اللاب ماعرفت اكتب شي:|

اصلا مااعرف شي عن السي بلس بلس ض1ض1


والمشكله ان احنا درسنا بداياته في الترم اللي فات بس مافهمت ولا كلمه ض1
(ولا تهون الاستاذه طبعا ض1ض1 )

لما شفت نفسي متنحه كذا قلت لازم ارجع لموضوع كيرز اذكر انها كاتبه شي عن الفروقات بينهم ..

والله استفدت كثييير مره الله يعطيك العافيه ..

-بس انا ماحبيتها احسها فلسفه زايده يازين السي بس ض1-

..HoKo..
21st September 2004, 07:27 PM
ذا نت:) ،، اهلا و سهلا ،،
اعذرني اخوي على التأخر في الرد :p س عارف مع الاجازة الواحد يضيع شوي ض1


وانا من رايي ماهو زين لو الواحد يبدأ بالسي++ بدون مايتعلم أساسيات السي أول ؟

لأن السي هي الأصل والسي لغة تساعدك على فهم تركيبة الجهاز أكثر من السي++ وتعلم السي راح يعطيك سهولة في تعلم لغة التجميع الأسمبلي

وانا من رايي الواحد لازم يتعلم السي حتى لو بدأ بالسي++ أول

وبعدين أغلب دوال برمجة الشبكات مكتوبة على هيئة
C-Style
وليس
C++-Style

كلام حلو و الله من جد :) ،،

شرفني مرورك ،،

..HoKo..
21st September 2004, 07:54 PM
قمرووووووووووووو ض1 هلأأأ و غلأأأ نور الموضوع ياختي ض1


تدرين اليوم انا في اللاب ماعرفت اكتب شي:| لوووووووووووووووووووووووو ووول نفس حالتي أجل في ال Sql يخخرررب بيتااا على هالايديتور اللي ماله داعي
و ستيتمنت ستيتمنت تتنفذ و اذا ضغطتي انتر انسي الموضوع اذا عندك غلط خخخخخخ و الله عذاب ض1ض1
و المشكلة انها سهله جدا جدا بس عاد اللي ما حضر اللاب الأول يسكت احسن له ض1
و اللي يعطون لاب في الاسبوع الاول و ما احد يحضر بعد حرام عليهم :(
بس ربنا ستر على الأخير و استحيت على وجهي و حليت الشيت بعد كتله من التناحة في البداية ض1

ض1 ما علينا ،، ترا عادي دايم أول لاب حالته صعبه ض1 ،،


...

ترا أول شي شوي صعبة و تحسين السي بلس وحدة مغرورة >> ض1 افهمومها
تجين بتسوين سي آوت و انتي عقلك يشوف قدامه برنت إف ض1
ههههههههه النكتة اتذكر أول ما أخذنها كنا نلخبط شوي بين هذول الحلوات >> , << ض1 ض1

بس ترا في الاخير بتحبينها اكثر من السي و الله :) ،،

+ ترا المنهج ما فيه حركات و أكشن زي ال 151 ض1 يعني على الاخير بيلفون و يدورون على نفس الافكار ض1

ان شاء الله بانزل لكم موضوع اذا الله قدرني + ما خانتني الذاكرة ض1 عن طريقة التعامل مع المادة :) ،،

الله يوفقكم ياااااااااارب :) ،،

++C
25th September 2004, 09:21 PM
sd4 صح لسانك
:( والله انا في جامعة الامام حايسين
as033 ومعيدتنا تلزمنا بحل التمارين بدون شرح فهمي نفسك بنفسك

as050

الحلم الأبيض
30th September 2005, 11:51 PM
يااااااااااااااه ماشاء الله شرح راااائع
الله يعطيك العافيه يارب
ويوفقك دنيا وآخره