الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

[ تمت الإجابة ]هل هذه ++C !

بدأه مصطفى 36a2 في 22 ديسمبر 2012 · 9 رد · 749 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

إحباط كبير !! خلال ساعتين قرأت أكواداً لم أتخيل أن أرها في ++C

عجباً ,,,بالله عليكم ماهو هذا التركيب النحوي :

class Num
	{
  	protected:
  double up;
  double down;
  double num;
  	public:
  Num();
	};
Num::Num():up(0),down(0),num(up/down){}
main()
{
}

يعني فهمنا العلم واسع وكبير ...لكن ليس إلى حد أن تقرأ كل بضعة أيام أشياء غريبة عجيبة ...!!

حسناً بمواجهة الواقع انا لست طالب مختص في كلية ال++C ولكنني أسعى للاحتراف بشتى وسائله

وكلما يواجهني أمر مثل هذا أجد أن الطريق لا يزال طويلاً ....

ممكن حد يشرح الكود أعلاه قبل ما أكمل تشاؤمي وإحباطي :D

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

عذرا للازعاج

شكرا

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 22 ديسمبر 2012 في 16:32

1 −1
#2

أهلا مصطفى مجددا

يبدو لي ان الكود ليس غريبا وانا معاك انا هناك اكواد غريبة وعجبية تستحق منا اﻻطلالة:

مثلا:

وفي النهاية سوف تجد كود آثار انتباهك شاركنا اياه

تحياتي والله يوفقك

1

post-15367-027053900%201340345097.gifpost-15367-087183200%201340344597.gif
post-247365-0-10080400-1379403554_thumb.

#3

جزاك الله خيرا أخي العزيز ...

اقتباس
فى كتاب بكتاب A to Z of C بالــ الفصل الــ 13 حقا سوف تجد اكودا غريبة الشكل

laugh.gif نعم رأيت مثلها قبلاً ... ودلني على بعضها الأخ Sn@cker في هذه المشاركة ...إنها عجيبة بالفعل ..لا أدري إن كنت أكرهها أم أعجب بها wacko.gif

ولكن المشكلة ليست في التعقيد المقصود ...بل في الsyntax معقد أصلاً ... وكأنه من لغة أخرى ...

الكود السابق يحوي السطر التالي :

Num::Num():up(0),down(0),num(up/down){}

على حسب دراستي للclasses التركيب السابق خاص بتمرير متحولات الصف الوارث إلى الصف الموروث منه ...

وكأننا نعتبر المتحولات الخاصة صفوفا آباء للصف Num !!!!

ثم كيف نمرر لمتحول عادي وسيطاً !!!

حتى أن هذا ليس عملية إسناد .!!

فلو كان إسناداً لأعطانا خطأ عند num=up/down للقسمة على صفر ..!!!

كل هذا ليس مشكلة ...المشكلة أن الكود يعمل دون مشاكل !

وهذا هو موضوع سؤالي بالتحديد !!

هل هناك مشكلة في استيعابي للصفوف ... أم في شيء آخر ؟

وشكرا

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 22 ديسمبر 2012 في 20:55

#4

داخل الـ ++C المعامل :: scope resolution يستخدم للوصول لعناصر تم تعريفها داخل اكثر من scope و في حالتنا هذه يوجد لدينا الـ constructor الخاص بـ Num و نريد تضمينه خارج الفئه لذا يتم إستخدام :: للوصول له كالتالي:

Num::Num()

الـ colon الموجود بعد ذلك تفيد بوجود عملية initialization لابد ان تتم قبل تنفيذ كود الـ constructor و في حالتنا هذه يتم وضع قيم إفتراضية داخل كل متغير و أخرهما يتم الحصول على قيمته من قسمة الأول على الثاني يلي ذلك كود الداله.

الطريقة التى تم عمل intialize للمتغيرات بها يمكنك استخدامها مع المتغيرات العادية، ألم ترى من قبل متغير من نوع int يتم تعريفه بهذا الشكل:

int i(10);

و الله ولي التوفيق

مدونتي: C++ Tips and Tricks

#5
اقتباس

الـ colon الموجود بعد ذلك تفيد بوجود عملية initialization لابد ان تتم قبل تنفيذ كود الـ constructor و في حالتنا هذه يتم وضع قيم إفتراضية داخل كل متغير و أخرهما يتم الحصول على قيمته من قسمة الأول على الثاني يلي ذلك كود الداله.

هذا بالضبط ما أتحدث عنه ... جزاك الله خيراً ...بالنسبة للقسمة على صفر ...نسيت أنها لا ترمي استثناءا عندما يكون المتحول double

اقتباس

الطريقة التى تم عمل intialize للمتغيرات بها يمكنك استخدامها مع المتغيرات العادية، ألم ترى من قبل متغير من نوع int يتم تعريفه بهذا الشكل:

لا والله هذه أول مرة laugh.gif

شكرا جزيلاً ..

من أين أقرأ مثل هذا الكلام ...حتى لا يظهر لي مثل هذه الأشياء ثانية ؟

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 22 ديسمبر 2012 في 21:37

#6
مصطفى 36a2 كتب:

فلو كان إسناداً لأعطانا خطأ عند num=up/down للقسمة على صفر ..!!!

كل هذا ليس مشكلة ...المشكلة أن الكود يعمل دون مشاكل !

وهذا هو موضوع سؤالي بالتحديد !!

القسمة على صفر سيولد استثناء في run-time عند استدعاء المشيد. ولا يعتبر هذا خطأ نحوي.

#7
اقتباس
هذا بالضبط ما أتحدث عنه ... (أين القسمة على صفر !!!!!!!!!!!!!! )

الكود التالي:

up(0),down(0),num(up/down)

يحتوى على المعامل comma و يسمي بـ sequence operator و يستخدم فى تنفيذ اكثر من expression بترتب معين و فى حالتنا هذه يتم تنفيذ عملية الـ initialization للمتغير up يليه المتغير down و في النهايه المتغير num و ذلك بقسمة up على down.

عملية القسمه لا تتم على integers و لكن على float-point و لذلك فالقسمه على الصفر لا تنتج exception و لكن تنتج قيمه لها معنى للـ float-point و هي INF#، يمكنك مراجعة الـ standard الخاص بالـ IEEE float-point حيث اغلب المترجمات تقوم بتضمين الـ float-point بناءا عليه.

و الله ولي التوفيق

مدونتي: C++ Tips and Tricks

#8
اقتباس
عملية القسمه لا تتم على integers و لكن على float-point و لذلك فالقسمه على الصفر لا تنتج exception و لكن تنتج قيمه لها معنى للـ float-point و هي INF#، يمكنك مراجعة الـ standard الخاص بالـ IEEE float-point حيث اغلب المترجمات تقوم بتضمين الـ float-point بناءا عليه.

اعذرني جربت كود وحاولت تطبيق نفس الشكل الذي ذكرته وعدّلت النعليق السابق قبل أن أقرأ الرد الجديد ...

جزاك الله خيراً ...

من أين تنصحني بأن أقرأ ... بحيث لا أواجه مثل هذه المشاكل ثانية ؟

#9
C++er كتب:

عملية القسمه لا تتم على integers و لكن على float-point و لذلك فالقسمه على الصفر لا تنتج exception و لكن تنتج قيمه لها معنى للـ float-point و هي INF#، يمكنك مراجعة الـ standard الخاص بالـ IEEE float-point حيث اغلب المترجمات تقوم بتضمين الـ float-point بناءا عليه.

post-233812-020468300 1356207670_thumb.p

:sleep:

المرفقات
Capture.PNG
#10
اقتباس
Unhandled exception at 0x010f4a10 in testTeam.exe: 0xC0000094: Integer division by zero
اقتباس
عملية القسمه لا تتم على integers و لكن على float-point و لذلك فالقسمه على الصفر لا تنتج exception
1

مدونتي: C++ Tips and Tricks

مواضيع مشابهة