مشاهدة النتائج 1 الى 10 من 10
  1. #1

    دورة تعلم أساسيات لغة سي++ : الدرس التاسع عشر

    السلام عليكم و رحمة الله و بركاته
    بسم الله الرحمن الرحيم و الصلاة و السلام على الرسول اﻷمين و على آله و صحبه المنتجبين

    attachment

    الدرس التاسع عشر

    بعنوان : تعدد الأشكال و نتعلم في هذا الدرس ما يلي :

    ١. المؤشرات لفئة أساسيّة.
    ٢. الدوال الافتراضية.
    ٣. الفئة المجرّدة.

    attachment

    بإمكانكم تحميل الدرس هنا

    ﻻ تترددوا باﻻستفسار gooood
    تحياتي
    روح سامية
    الصور المرفقة الصور المرفقة


  2. ...

  3. #2
    وعليكم السلام ورحمة الله وبركاته

    أعجبني هذا الدرس كثيراً،
    ما شاء الله عليك بسطتَ الأمور بشكل رائع gooood

    كتبتُ برنامجاً في الدرس السابق لكنني لم أستطع نشره -حتى لا أتعرض للتوبيخ من صديقي العزيز بسوم- فرأيت أن أنشره في هذا الدرس cool
    البرنامج في المرفقات..




    هذا البرنامج فيه تطبيق لما جاء بهذا الدرس على النحو التالي:

    1. تعريف لفئة أساسية تمثل "الشكل (Shape)" وتحوي على دوال مجردة بالتالي فهي فئة مجردة.
    - هذه الفئة تحوي طريقة أخرى لتعريف الفئة المجردة غير الطريقة التي جاءت بهذا الدرس (لم أقم بتغييرها بعد أن قرأتُ الدرس wink)

    2. تعريف لفئة تمثل "الدائرة (Circle) " وترث فئة شكل (Shape) وتقوم بتقديم تعريفها الخاص للفئات المجردة في الفئة شكل (Shape)

    3. تعريف لفئة تمثل "المستطيل (Rectangle)" بنفس طريقة تعريف فئة الدائرة.


    4. في الدالة الرئيسية استخدمتُ خاصية تعدد الأشكال حيث تحوي هذه الدالة على ما يلي:

    - مصفوفة من نوع مؤشر على Shape التي تؤشر على (تحتضن) كائنات من الأنواع Circle و Rectangle

    - استعمال الدوال الافتراضية والمجردة لتطبيق مبدأ تعدد الأشكال.

    - التنقل بين عناصر الفئة الأساسية والفئة المشتقة من خلال مؤشر الفئة الأساسية

    آسف على الإطالة..
    بالتوفيق للجميع (استمتعوا smile)

    مشكور بسوم على جهودك الطيبة،
    تحياتي
    الملفات المرفقة الملفات المرفقة
    • نوع الملف » zip main.zip (2.2 كيلو بايت, 43 زيارة)
    attachment

    شكراً The Lord of Dark على الهدية الجميلة embarrassed e306


    سبحانك اللهم وبحمدك أشهد أن لا إله إلا أنت، أستغفرك ربي وأتوب إليك

  4. #3
    أهلا أهلا بحبيبنا ماس
    تشكر جدا على البرنامج
    على أني استخدمت مكتبة SDL أكثر من مرة لكنني لم أجرب أبدا أن أرسم باستخدامها
    شغلت البرنامج و لكني لم أقرأ محتواه بعد

    لكن.... واجهت بعض المشاكل
    أولا أظهر لي المصرف أخطاء و قال أن هذا ممكن في المصرفات التي تتبع نظام c++0x و أخبرني أنني أستطيع إخباره أن يستخدم هذا النظام في التصريف
    أمانة لم أفكر في الخطإ كثيرا
    الأمر الآخر بالنسبة للفئة المجردة
    الطريقة التي كتبت بها أظهرت أخطاء و قد حذفت كلمة abstract
    لم أفكر مرة في اختلاف المصرفات لكن يبدو أن المصرفات تختلف جدا عن بعضها أكثر مما كنت أتخيل
    على أية حال عمل البرنامج مثل الحلاوة wink
    سنقرأ البرنامج و نوافيكم لاحقا

    أخيرا فقد استخدمت دالة حساب الجذر sqrt
    هذه الدالة معرفة في مكتبة قياسية و هي cmath
    مرة أخرى بعض المصرفات تطلب إضافتها و بعض تضيفها تلقائيا و مصرفي لا يضيف المكتبة تلقائيا
    كان الأفضل أن تكتب :
    كود الـ PHP:
    #include <cmath> 
    تحياتي
    روح سامية
    اخر تعديل كان بواسطة » روح سامية في يوم » 30-06-2011 عند الساعة » 02:19

  5. #4
    إقتباس الرسالة الأصلية كتبت بواسطة TheBSOM مشاهدة المشاركة

    أهلا أهلا بحبيبنا ماس
    تشكر جدا على البرنامج
    على أني استخدمت مكتبة SDL أكثر من مرة لكنني لم أجرب أبدا أن أرسم باستخدامها
    أهلا بسوم ^_^
    تصدق.. انا عكسك، انا عمري ما أضفت صورة من ملف biggrin


    شغلت البرنامج و لكني لم أقرأ محتواه بعد
    لكن.... واجهت بعض المشاكل
    أولا أظهر لي المصرف أخطاء و قال أن هذا ممكن في المصرفات التي تتبع نظام c++0x و أخبرني أنني أستطيع إخباره أن يستخدم هذا النظام في التصريف
    أمانة لم أفكر في الخطإ كثيرا
    نشأتُ وترعرتُ على استخدام منتجات مايكروسوفت (مع الأسف frown)، وهي دائماً ما تكسر المعايير القياسية وتجلب المشاكل.
    لكن هذه المرة بالتحديد المشكلة من المترجم MinGW (الذي تستعمله) لأنني قرأتُ عن المعيار ووجدتُ أنه معيار قياسي جديد وضع ليحل محل المعايير السابقة.

    المترجم الذي استخدمتُه كان Microsoft Visual C++ 2010


    الأمر الآخر بالنسبة للفئة المجردة
    الطريقة التي كتبت بها أظهرت أخطاء و قد حذفت كلمة abstract
    لم أفكر مرة في اختلاف المصرفات لكن يبدو أن المصرفات تختلف جدا عن بعضها أكثر مما كنت أتخيل
    بالنسبة للكلمة المحجوزة Abstract (في السي++) هذه أيضاً حكر على مايكروسوفت frown
    أعتذر عن هذا الخطأ الفادح كان علي أن أبحث عنها قبل استخدامها.. ..انا أيضاً لم أكن أعلم بوجود كل هذه الاختلافات


    أخيرا فقد استخدمت دالة حساب الجذر sqrt
    هذه الدالة معرفة في مكتبة قياسية و هي cmath
    مرة أخرى بعض المصرفات تطلب إضافتها و بعض تضيفها تلقائيا و مصرفي لا يضيف المكتبة تلقائيا
    كان الأفضل أن تكتب :
    كود الـ PHP:
    #include <cmath> 
    تحياتي
    روح سامية
    بالنسبة للـ sqrt فهي تُستخدم فقط إذا فُعِّلت الـ SDL لكنك ضربتَ على الوتر الحساس،
    كنتُ قد نسيتُ معادلة رسم الدائرة لهذا قررتُ البحث عنها،
    وجدتُ دالة لرسم الدائرة فقمتُ باستعارتها وإضافتها إلى برنامجي ثم أشرتُ إلى ذلك بكتابة تعليق أن هذه الدالة ليست من برمجتي وتركتُ التعليقات المعنية بالإشارة إلى صاحب الدالة الأصلي (حقوق طبع biggrin)

    الغريب بالموضوع ليس أنني نسيتُ إضافة مكتبة cmath بل الغريب أن البرنامج عمل بدونها confused
    ما أذكره عن إصدارات سابقة من هذا المترجم أنه لم يكن يضيف المكتبات لوحده.

    -----

    على كلٍ.. قمتُ بتصحيح الأخطاء التي ذكرتها، أيضاً قمتُ بتجربته على CodeBlock للتأكد من عمله حتى يستفيد الجميع،
    لم تظهر لي رسالة بخصوص c++0x لا أدري لماذا لكن كان هناك تحذير -بخصوص النسخ المؤقتة- وتم التعامل معه بنجاح gooood
    البرنامج المعدل في المرفقات..

    بانتظار تعليقاتك بعد قراءة البرنامج،

    تحياتي
    الملفات المرفقة الملفات المرفقة
    • نوع الملف » zip main.zip (2.3 كيلو بايت, 33 زيارة)

  6. #5
    لكن هذه المرة بالتحديد المشكلة من المترجم MinGW (الذي تستعمله) لأنني قرأتُ عن المعيار ووجدتُ أنه معيار قياسي جديد وضع ليحل محل المعايير السابقة.

    مرحبا
    في الحقيقة بحسب كلام GCC ــ <MinGW هو إصدار GCC للويندوز> :
    The working draft of the upcoming ISO C++0x standard. This
    option enables experimental features that are likely to be
    included in C++0x. The working draft is constantly changing,
    and any feature that is enabled by this flag may be removed
    from future versions of GCC if it is not part of the C++0x
    standard.

    سبب عدم استخدام هذا المعيار هو أنه لم ينته بعد على ما يبدو ، بحسب ويكيبيديا فكان من المتوقع أن ينتهي عام ٢٠٠٨ لكن تم تأجيل هذا

    بالنسبة للكلمة المحجوزة Abstract (في السي++) هذه أيضاً حكر على مايكروسوفت frown
    أعتذر عن هذا الخطأ الفادح كان علي أن أبحث عنها قبل استخدامها..
    لم أفكر يوما بالفرق بين المصرفات و أفضليتها على بعضها
    لكن استفزني يوما أن إحدى الشركات الكبرى كانت تمتدح أحد مصرفاتها في موقعها الرسمي بقولها "يقوم بالتصريف أسرع بكذا مرة من GCC و يعطي برنامجا أيضا أسرع من البرامج التي يصرفها GCC"
    ما استفزني أننا تعلمنا في التسويق أن لا نقارن المنتجات ببعضها خصوصا تلك التي ننتجها لكن على أية حال مقارنة من شركة كبرى بمصرف GCC يوحي بأنه جيد
    لا مانع من أن تحول إليه wink




    بالنسبة للـ sqrt فهي تُستخدم فقط إذا فُعِّلت الـ SDL لكنك ضربتَ على الوتر الحساس،
    كنتُ قد نسيتُ معادلة رسم الدائرة لهذا قررتُ البحث عنها،
    وجدتُ دالة لرسم الدائرة فقمتُ باستعارتها وإضافتها إلى برنامجي ثم أشرتُ إلى ذلك بكتابة تعليق أن هذه الدالة ليست من برمجتي وتركتُ التعليقات المعنية بالإشارة إلى صاحب الدالة الأصلي (حقوق طبع biggrin)
    نعم قرأت تعليقك و كان مليئا بحس الفكاهة و الأمانة في وقت واحد

    على كلٍ.. قمتُ بتصحيح الأخطاء التي ذكرتها، أيضاً قمتُ بتجربته على CodeBlock للتأكد من عمله حتى يستفيد الجميع،
    لم تظهر لي رسالة بخصوص c++0x لا أدري لماذا لكن كان هناك تحذير -بخصوص النسخ المؤقتة- وتم التعامل معه بنجاح gooood
    البرنامج المعدل في المرفقات..



    على أية حال إصدار كود بلوكس للويندوز يأتي مع آخر إصدار من جي سي سي يكون موجودا حال إصدار كود بلوكس لذلك على الأغلب قد تم تحديث الإصدار عدة مرات
    و كود بلوكس ينتج إصدارا جديدا في فترات بعيدة حيث أني كنت أستخدم الإصدار السابق منذ ثلاث أو أربع سنوات و أتى الإصدار الجديد قبل سنة



    بانتظار تعليقاتك بعد قراءة البرنامج،
    إن شاء الله لكني اليوم مشغول إلى رأسي
    سنوافيكم في أقرب فرصة


    تحياتي
    روح سامية tongue

  7. #6
    إقتباس الرسالة الأصلية كتبت بواسطة TheBSOM مشاهدة المشاركة


    مرحبا
    في الحقيقة بحسب كلام GCC ــ <MinGW هو إصدار GCC للويندوز> :



    سبب عدم استخدام هذا المعيار هو أنه لم ينته بعد على ما يبدو ، بحسب ويكيبيديا فكان من المتوقع أن ينتهي عام ٢٠٠٨ لكن تم تأجيل هذا
    أهلاً بسوم،

    آها.. ربما سيكون من المبكر استخدامها من الآن،
    لم أقرأ سوى جزئية بسيطة من المقال.


    استفزني يوما أن إحدى الشركات الكبرى كانت تمتدح أحد مصرفاتها في موقعها الرسمي بقولها "يقوم بالتصريف أسرع بكذا مرة من GCC و يعطي برنامجا أيضا أسرع من البرامج التي يصرفها GCC"
    ما استفزني أننا تعلمنا في التسويق أن لا نقارن المنتجات ببعضها خصوصا تلك التي ننتجها لكن على أية حال مقارنة من شركة كبرى بمصرف GCC يوحي بأنه جيد
    لا مانع من أن تحول إليه wink



    في الحقيقة، هذا أمر مؤلم، هي في النهاية مصالح تجارية وأرباح مادية.

    إن شاء الله لكني اليوم مشغول إلى رأسي
    سنوافيكم في أقرب فرصة

    روح سامية tongue
    خذ راحتك بسوم،

    انا لا أخطط للذهاب لأي مكان.

    سأكون بانتظارك

    تحياتي

  8. #7
    السلام عليكم
    تم الاطلاع على البرنامج و لدينا أربع تعليقات
    و منا تستفيدون و منكم نستفيد smile

    ١- في دالة رسم الدائرة <التي أعدت استخدامها> :
    السطر ٩٤
    افترضت أن كل نقطة تحجز ٤ بايتات
    ليس بالضرورة فهذا يعتمد على بطاقة الشاشة و إن كانت تدعم هذا أم لا


    ٢- في نفس الدالة :
    السطر ١١٢
    قمت بتغيير ألوان النقاط بدون أن تقفل السطح
    بحسب مكتبة إس دي إل فعلك إقفال السطح قبل التوصل إلى النقاط مباشرة
    SDL_LockSurface
    SDL_UnlockSurface


    ٣- دالة الرسم في فئة الدائرة :
    السطر ١٥١
    قمت بفرض نوع Uint32 لمتغير اللون ، لم لم تقم بإعلان هذا المتغير بهذا النوع ؟


    ٤- في فئة المستطيل :
    لماذا أعلنت الطول و العرض كأعداد عشرية ؟
    مكتبة إس دي إل تقبل أعدادا صحيحة
    في هذه الفئة لم تقم بأي حسابات كما هو الحال مع الدائرة مثلا حين استخدمت بعض الأعداد العشرية فلم أجد داعيا لاستخدام الأعداد العشرية في المستطيل.



    تحياتي
    روح سامية

  9. #8
    وعليكم السلام ورحمة الله وبركاته

    عندما قرأتُ السطر الثاني من ردك تحمستُ،

    في المجمل تعلقاتك كانت بخصوص استخدامي لمكتبة SDL،
    نبدأ الاجابة على بركة الله،

    بالنسبة للنقطة الأولى والثانية فهي حقائق كنتُ أجهلها عن المكتبة فشكراً على المعلومات gooood

    بالنسبة للنقطة الثالثة.. في مكتبات الرسم يتم تعريف أنواع متغيرات ليتم استخدامها (هذه قصة بحد ذاتها) لهذا يجب الابتعاد عن استخدام عن الأنواع الموجودة في لغة سي++ إذا كان هناك ما يرادفها في نفس المكتبة (كـ Uint32 ترادف int) لكن معلوماتي خفيفة عن هذه المكتبة لهذا لم أهتم لهذه النقطة فقمتُ باستخدام int.. أيضاً تشكر على التنبيه gooood

    بالنسبة للنقطة الرابعة معك حق في ملاحظتك biggrin، لكن أختلفُ معك smile:

    الفكرة التي كنت أريدها هي جعل فئة المستطيل فئة عامة، أي يمكن استخدامها بأي سياق وجدت فيه.
    المشكلة التي واجهتُها كانت مع فئة رسم المستطيل، هذه الفئة تلغي استقلالية المستطيل حيث تلزمك بمكتبة رسوم معينة،
    فكرتُ باستخدام مؤشر لـ دالة لكن حتى هذا لن يجدي نفعاُ لأن كل مكتبة لها أسلوب خاص برسم المستطيل،

    * على فكرة في الـ OpenGL بإمكانك استخدام أعداد عشرية للتعبير عن أبعاد المستطيل.

    المهم الآن هو أنني قمتُ بإهمال القيمة العشرية أثناء رسم المستطيل.

    لكن ألم تجد خطأً أو ملاحظة أخرى في البرنامج؟ آآآه.. كلما بحثتَ أكثر وجدتَ أكثر:

    - كان يجب استخدام dynamic_cast للتحويل إلى الفئات Circle و Rectangle لأسباب أمنية.
    بصراحة لم أكن أعرف هذه المعلومة إلا الآن redface، أحياناً تفيد مراجعة البرامج smile

    - إعلان وصول بعض أعضاء الفئات إلى وصول عام (public) مع أن إخفائها كـ protected أولى.

    - هناك دوال في الفئات ضرورية لكنها غير موجودة مثل get_position

    - أيضاً هناك المزيد.. لكن لا داعي لإضاعة الوقت على برنامج لن يستخدم redface


    شكراً على تتبعك للبرنامج وعلى هذه الملاحظات الجيدة،
    أشكرك على وقتك وأعتذر عن إزعاجك وإضاعة وقتك.
    تحياتي

  10. #9
    إقتباس الرسالة الأصلية كتبت بواسطة Diamond mas مشاهدة المشاركة
    وعليكم السلام ورحمة الله وبركاته

    عندما قرأتُ السطر الثاني من ردك تحمستُ،

    أسعدنا هذا smile

    في المجمل تعلقاتك كانت بخصوص استخدامي لمكتبة SDL،
    نبدأ الاجابة على بركة الله،

    بالنسبة للنقطة الأولى والثانية فهي حقائق كنتُ أجهلها عن المكتبة فشكراً على المعلومات gooood
    على أني لم أفكر بالرسم بهذه المكتبة إلا أني قرأت كثيرا عن اقفال السطح قبل الرسم عليه

    بالنسبة للنقطة الثالثة.. في مكتبات الرسم يتم تعريف أنواع متغيرات ليتم استخدامها (هذه قصة بحد ذاتها) لهذا يجب الابتعاد عن استخدام عن الأنواع الموجودة في لغة سي++ إذا كان هناك ما يرادفها في نفس المكتبة (كـ Uint32 ترادف int) لكن معلوماتي خفيفة عن هذه المكتبة لهذا لم أهتم لهذه النقطة فقمتُ باستخدام int.. أيضاً تشكر على التنبيه gooood
    نعم نعم الأفضل ترك الأنواع الخاصة بالمكتبات
    لكن ملاحظة
    Uint32 تعني U أي عديم الإشارة و int أي عدد صحيح و 32 بمعنى ٣٢ بت حجم المتغير


    بالنسبة للنقطة الرابعة معك حق في ملاحظتك biggrin، لكن أختلفُ معك smile:

    الفكرة التي كنت أريدها هي جعل فئة المستطيل فئة عامة، أي يمكن استخدامها بأي سياق وجدت فيه.
    المشكلة التي واجهتُها كانت مع فئة رسم المستطيل، هذه الفئة تلغي استقلالية المستطيل حيث تلزمك بمكتبة رسوم معينة،
    فكرتُ باستخدام مؤشر لـ دالة لكن حتى هذا لن يجدي نفعاُ لأن كل مكتبة لها أسلوب خاص برسم المستطيل،
    نعم نعم صدقت في هذا أيضا
    * على فكرة في الـ OpenGL بإمكانك استخدام أعداد عشرية للتعبير عن أبعاد المستطيل.
    لا أذكر أنها تستخدم أعدادا صحيحة أصلا بل دائما أعدادا عشرية ermm
    المهم الآن هو أنني قمتُ بإهمال القيمة العشرية أثناء رسم المستطيل.

    لكن ألم تجد خطأً أو ملاحظة أخرى في البرنامج؟ آآآه.. كلما بحثتَ أكثر وجدتَ أكثر:

    - كان يجب استخدام dynamic_cast للتحويل إلى الفئات Circle و Rectangle لأسباب أمنية.
    بصراحة لم أكن أعرف هذه المعلومة إلا الآن redface، أحياناً تفيد مراجعة البرامج smile
    في الحقيقة لم أهتم بطرق فرض النوع من قبل
    - إعلان وصول بعض أعضاء الفئات إلى وصول عام (public) مع أن إخفائها كـ protected أولى.
    لم أنتبه لمستوى التوصل في الفئات ، في الحقيقة يرى البعض أن من الخطأ أن تضع أي متغير عام بل الأعضاء العامون يكونون فقط دوالا
    - هناك دوال في الفئات ضرورية لكنها غير موجودة مثل get_position

    - أيضاً هناك المزيد.. لكن لا داعي لإضاعة الوقت على برنامج لن يستخدم redface


    شكراً على تتبعك للبرنامج وعلى هذه الملاحظات الجيدة،
    أشكرك على وقتك وأعتذر عن إزعاجك وإضاعة وقتك.
    تحياتي
    العفو أهلا أخي العزيزو تشكر جدا على مشاركتك البرنامج معنا redface

    تحياتي
    روح سامية


  11. #10
    أهلاً بسوم،

    إذاً فـ Uint32 تعادل unsigned int، لا... لأكون أكثر دقة Uint32 تعادل unsigned __int32 حيث يختلف حجم int باختلاف النظام (في بعض الأنظمة 16 بايت وفي بعضها الآخر 32 بت)، لهذا يجب استخدام Uint32 حتى يعمل البرنامج على جميع الأنظمة بنفس الطريقة.

    الـ OpenGL يقبل أعداد كسرية في بعض دوال رسم المستطيل و أعداد صحيحة في دوال أخرى مما يعني أنه يعطيك حرية الاختيار فيما بينها.

    هو بالفعل خطأ فادح في البرمجة كينونية التوجه (OOP) ان تعلن جميع الأعضاء داخل الفئة بتصريح عام (public)،
    فالبرمجة كينونية التوجه (OOP) مبنية على عدة مفاهيم:
    - الوراثة (Inheritance).
    - تعدد الأشكال (Polymorphism).
    - إخفاء البيانات (Data Hiding)
    - التغليف (Encapsulation).
    - الـ Overloading (لا أدري ما هي الترجمة الصحيحة لهذا المصطلح)
    - إعادة الاستخدام (Reusability).

    تحياتي

بيانات عن الموضوع

الأعضاء الذين يشاهدون هذا الموضوع

عدد زوار الموضوع الآن 1 . (0 عضو و 1 ضيف)

الكلمات الدلالية لهذا الموضوع

المفضلات

collapse_40b قوانين المشاركة

  • غير مصرّح لك بنشر موضوع جديد
  • غير مصرّح بالرد على المواضيع
  • غير مصرّح لك بإرفاق ملفات
  • غير مصرّح لك بتعديل مشاركاتك
  •  

مكسات على ايفون  مكسات على اندرويد  Rss  Facebook  Twitter