• 0
احمد بشير

شرح ل operator overloading &parsing programme

سؤال

سلام عليكم

كيفكم يا  رجال   دي تاني مشاركه ليا في الموقع للاسف   انا بدات اتعلم c++ من حوالي 40 يوم   وبدات في كتاب objest oriented programming 4th edition من حوالي 10 ايام والصراحه الكتاب  كنز و فيه معلومات قيمه واسلوب رائع في الشرح بس الصراحه مفهتمش المواضيع دي او ايه الهدف منها وازاي تطبيقها 

operator overloading & parsing programme & linked list  programming

هل في حد هنا يعرف عنها كويس ويقدر يفيدني بيها

شكرا مقدما

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

4 إجابة على هذا السؤال .

  • 0

هل سبق أن تعاملت مع الكائن std::string؟ لاحظ أنه يمكنك جمع نصين باستخدام عملية الجمع +:

std::string p1 = "ABC";std::string p2 = "DEF";std::cout << p1 + p2 << std::endl; // ABCDEF

سيعطي البرنامج ABCDEF، لكن لايوجد في الكمبيوتر شيء اسمه "جمع نصين"، فلا يعرف المعالج إلا "جمع عدد مع عدد (صحيح أو عشري)".

 

تعريف المعاملات تمكن من تعريف عملية الجمع لهذا الكائن (كائن لنص أو غيره)، جمع نصين يعني أن تنشيئ مساحة في الذاكرة حجمها يساوي طول النص الأول + طول النص الثاني + بايت واحد للصفر الذي يحدد نهاية النص، وتنسخ الجزء النصف الأول ثم النصف الثاني للذاكرة الجديدة، std::string مجهزة لعمل هذا.

 

أرغب مثلاً بمضاعفة النص بحيث إذا كتبت p1 * 3 يعطيني ABCABCABC، رغم أن std::string لاتدعم هذه العملية إلا أنه يمكنك إضافتها عن طريق تعريف  هكذا:

#include <iostream>#include <string>// إضافة عملية: نص * عدد = نص// 1- نوع الناتج// 2- نوع العملية// 3- الطرف الأيسر - القراءة من اليسار لليمين// 4- الطرف الأيمن - القراءة من اليسار للمينstd::string operator*(const std::string& str, int n) {// ^                ^         ^                ^// 1                2         3                4  std::string tmp;  for( ; n-- ; ) tmp += str;  return tmp;}int main(int argc, char **argv) {  std::string p1 = "ABC";  std::cout << p1 * 3 << std::endl; // ABCABCABC  return 0;}

الأجزاء الباقية -الـparsing و الـlinked lists- ليس لها علاقة بـc++، فلاتحتاج دراستها كي تتعلم c++، بل يفترض أنها مواضيع جانبية.

 

parsing عملية متشعبة وصعب توضيحها بأسطر ولا أعلم حقيقة لأي درجة يتعمق فيها الكتاب، تهمك إذا أردت مثلاً تحليل ملف إعدادات بنيته خصيصاً لبرنامجك (يمكنك استخدام صيغ جاهزة مثل xml باستخدام مكتبات جاهزة)، أو إذا أردت بناء لغة برمجة (ليس شرطاً أن تكون لغة متكاملة فيها if/else و while و دوال وغيرها، قد تكون شيء بسيط مثل sql أو لغة إعدادت)، لنأخذ ملف إعدادات:

ip              : 127.0.0.1allowed-ports   : 25, 80, 2maximum-users   : 3message         : "some message"

تحتاج أن تعمل تحليل صرفي lexing لتتعرف على "نوع المفردة" (كلمة مثل ip/allowed-ports، مسافة، نقطة رأسية، رقم، نص)، قد تكتب محلل صرفي يدوياً أو تستخدم regex، أو حتى أدوات تولد لك محللات صرفية مثل lex و flex.

 

ثم تعمل تحليل نحوي للتعرف ما إذا كان الملف مكتوب بقواعد صحيحة (كلمة يليها نقطنين رأسية ثم رقم أو عنوان ip أو أرقام أو مصفوفة مفصولة بفاصلة ",")، يمكن أن تعملها يدوياً باستخدام تقنيات مثل recursive parsing، combinatory parsing أو باستخدام أدوات توليد محللات نحوية جاهزة مثل bison و yacc.

 

مثل ماقلت العملية معقدة وقليل من يحتاجها، أغلب الأشياء التي تحتاجها هناك مكتبات جاهزة تختصر عليك العمل.

 

القوائم المتصلة تركيب بينات يشابه المصفوفات الأ أنه يتفوق عليها في جانبين:

 

  • جميع عناصر المصفوفة يلزم أن تكون بنفس الحجم، القائمة المتصلة لاتتلطب هذا.
  • الحذف والإضافة للقائمة المتصلة أسرع من المصفوفة، لو أردت إضافة أو حذف عنصر من أول المصفوفة  فيلزم أن تزيح كل عناصر المصفوفة أو تنسخها لمصفوفة جديدة، بينما في القائمة المتصله فقط تحذف أول العنصر وتعدل مؤشر للقائمة للعنصر التالي أو فقط تعيد تعديل المؤشر.
تم تعديل بواسطه Mr.B
2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أهلاً بك أخي الكريم

طالما أنك تدرس بالإنكليزية فكان جديراً بك أن تبحث على Google عن المواضيع التي تسأل عنها

فكل عنوان ذكرته في وادٍ

linked list نوع من هياكل البيانات

operator overloading من مزايا لغة ++C

parsing programme أظن انك تعني به كتابة برنامج تحليل نحوي

 

أنصحك بالبحث في Google

 

بالتوفيق :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أهلاً بك أخي الكريم

طالما أنك تدرس بالإنكليزية فكان جديراً بك أن تبحث على Google عن المواضيع التي تسأل عنها

فكل عنوان ذكرته في وادٍ

linked list نوع من هياكل البيانات

operator overloading من مزايا لغة ++C

parsing programme أظن انك تعني به كتابة برنامج تحليل نحوي

 

أنصحك بالبحث في Google

 

بالتوفيق :)

اشكر يا فندم علي الرد انا فعلا  عارف ان كل موضوع في واد بس  انا في البدايه قلت ان الموضوعات دي وقفت قدامي اثناء دراستي في الكتاب وهي  موجوده بالترتيب في الكتاب  رغم ان كل واحد في واد بس انا كنت عايز شرح عربي او انجلش ليهم يكون موضح بامثله 

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

يوجد الكثير من الدروس في  المنتدى عن linked list

 

أما operator overloading فتجد لها شرحاً وافياً في كتاب الإكسير في برمجة ++C

 

أما parsing فهناك في المنتدى أيضاً بعض المواضيع عنه ولكن فقط للعمليات الرياضية على ما أذكر

 

 

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

 

بالتوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .