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

دالة الصف الثابتة تتحكم بمتغيرات الصف

بدأه مصفوفة في 24 أغسطس 2008 · 9 رد · 948 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

الهدف من هذا الموضوع هو خدعة وهي كيف تتحايل على المترجم

والخدعة هذه تقول انه بإمكانك ان تتحكم بمتغيرات الصف داخل دالته الثابتة

#include <cstdlib>

#include <iostream>

using namespace std;

class A{

	public:

		void m()const{

			A* m=((A*)this);

			m->n=13;

			cout<<m->n<<endl;

		}
private:
	int n;

};





int main(int argc, char *argv[])

{

	A a;

	a.m();

	system("pause");

	return EXIT_SUCCESS;

}

للأسف ما اعرف رقم السطر عموما الخدعة تكمن هنا

A* m=((A*)this);

والمخرج سوف يكون 13 .

في امان الله

تم تعديل هذه المشاركة بواسطة مصفوفة في 24 أغسطس 2008 في 21:13

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

مدونة دوال

كيوتي العربي

#2

حياك الله أخي محمد.

الفكرة فيها تحايل فعلا على الكمبايلر.

لكن في الأساس الدالة الثابته يعرفها المبرمج من أجل ان لا تغير شئ فإذا كان يرد ان تغير فقط يجعلها غير ثابته.

والهدف الاساسي من const في نظري تسهيل مهام تصحيح البرنامج فأنت عندما تعرف عضو بانه ثابت لو حاولت تعدل فيه بالخطاء لن يسمح لك المصرف.

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

تم تعديل هذه المشاركة بواسطة فهدالشلوي في 24 أغسطس 2008 في 21:13

tvquran_6.gif

#3

المشكلة هي أنك ستخدع نفسك قبل أن تخدع المترجم, فالهدف من وراء const هي أن تحمي نفسك من خطأ قد تقع أنت فيه من وراء تغيير member variable في الclass

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#4

صلوا على محمد :blink:

انا اقول هذه خدعة بالتأكيد محد يستخدمها

شاكرا مروركم

تم تعديل هذه المشاركة بواسطة مصفوفة في 24 أغسطس 2008 في 22:05

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

مدونة دوال

كيوتي العربي

#5

اشكرك استاذي على الموضوع

بما ان الدالة const يجب ان تكون القيمة المعادة للتحكم بالكلاس A*const

((A* const)(this))->n=13;

عندما اعلنت عن الدالة بأنها const اصبح const this وعندما تعطي المؤشر const this فإنه سيتعامل معها بالطريقة الاعتيادية .

اين الخدعة في ذلك ؟

تم تعديل هذه المشاركة بواسطة time1 في 24 أغسطس 2008 في 23:18

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#6

جرب المثال الذي وضعته وإن شاء الله يعمل معاك

اين الخدعة في ذلك ؟

استخدمت التفاضل في المؤشرات .

امزح معاك

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

مدونة دوال

كيوتي العربي

#7
مصفوفة كتب:
جرب المثال الذي وضعته وإن شاء الله يعمل معاك

اين الخدعة في ذلك ؟

استخدمت التفاضل في المؤشرات .

امزح معاك

اشكرك مرة اخرى استاذي على موضوعك ,

يعمل معي المثال اخي جيدا , لكن سؤالي هو : التعليمة التالية

((A* const)(this))

هي الشكل الذي فرض على this , وعندما تستدعيها كأنك تلغي عمل const , اذا مالخدعة في ذلك ؟

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#8

العفو استاذي

انا لم اقسر this الى مؤشر ثابت عموما مافرقت سواء كان ثابت او لا في حالتنا السابقة

لأن العبرة هنا كيف ان عملية القسر اوهمت الدالة const انها لا تتعامل مع صفها (حسب فكري)

شاكرا لك استاذي .

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

مدونة دوال

كيوتي العربي

#9

يمكن أن تعلن عن المتغير بـ mutable وبالتالي سوف تستطيع تغييره داخل الداله const ..

mutable int x;

شكرا لك :)

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#10
Wajdy Essam كتب:

يمكن أن تعلن عن المتغير بـ mutable وبالتالي سوف تستطيع تغييره داخل الداله const ..

mutable int x;

شكرا لك :)

معلومة جميلة وجديدة

شكرا لك (أخوك يغير منك :D )

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

مدونة دوال

كيوتي العربي

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…