إعلان
دورة تطوير التطبيقات باستخدام لغة JavaScript في هذه الدورة ستتعلم لغة جافا سكريبت, استخدام مكتبة React.js, بناء API الموقع بواسطة Node.js, تطوير تطبيق جوال باستخدام React Native, و في نهاية الدورة ستتعلم تطوير تطبيق محادثة شبيه بتطبيق WhatsApp. تعلم الآن
دورة تطوير واجهات المستخدم في هذه الدورة ستتعلم لغة HTML و لغة CSS و لغة JavaScript. من ناحية التطبيق العملي ستتعلم طريقة بناء واجهة متجر إلكتروني مكون من ست صفحات, تحويل خمسة تصاميم PSD إلى صفحات ويب, بناء واجهة مستخدم تشبه موقع يوتيوب, بناء لوحة تحكم إحترافية. تعلم الآن
تطوير تطبيقات باستخدام لغة بايثون في هذه الدورة ستتعلم أساسيات البرمجة بلغة بايثون وصولاً إلى التعامل مع أشهر أطر العمل (Flask و Django) و ستتعلم كيف تبني متجر إلكتروني يمكن للمستخدمين البيع و الشراء من خلاله. تعلم الآن
دورة تطوير تطبيقات الويب باستخدام لغة PHP في هذه الدورة ستتعلم لغة PHP من الصفر, استخدام إطار العمل Laravel بشرح مفصّل و عملي, كيفية تطوير شبكة اجتماعية تشبه Instagram, بناء API لتطبيق جوال وفق أسلوب RESTful, تطوير موقع إعلانات مبوبة, تطوير نظام إدارة محتوى CMS كامل. تعلم الآن
دورة تطوير تطبيقات الويب باستخدام لغة Ruby في هذه الدورة ستتعلم البرمجة بلغة Ruby إنطلاقاً من أبسط المفاهيم وحتى بناء تطبيق حقيقي, إستخدام إطار العمل Ruby on Rails بشرح مفصّل و عملي, بناء تطبيق حقيقي عبارة عن شبكة اجتماعية تشبه تويتر, تطوير مجتمع الكتروني يشبه حسوب I/O. تعلم الآن
دورة علوم الحاسوب هذه الدورة معدة لتكون مدخل لعلوم الحاسوب و لغات البرمجة حيث ستتعرف فيها على أنظمة التشغيل و ستتعمق في نظام لينكس و في كيفية التعامل معه من خلال موجه الأوامر, بالإضافة إلى قواعد البيانات و أساسيات الشبكات و الخوادم و مبادئ الحماية والأمان في الويب. تعلم الآن

    C++ المتغيرات و الدوال المشتركة

    مفهوم الأشياء المشتركة

    الأشياء المشتركة ( Static Members ) عبارة عن أي شيء يتم تعريفه في الكلاس بشكل يكون موّحداً بالنسبة لجميع الكائنات التي يتم إنشاءها منه.
    بشكل عام لجعل الشيئ الذي يتم تعريفه في الكلاس مشترك بين جميع الكائنات التي قد ننشئها منه نستخدم الكلمة static كما سنرى بعد قليل في الأمثلة.


    فوائد الأشياء المشتركة

    الأشياء المشتركة لها عدة استخدامات و فوائد فعلى سبيل المثال إذا أردت جميع الكائنات التي يتم إنشاءها من كلاس محدد تملك نفس قيمة متغير موجود في هذا الكلاس, يمكنك جعل نوع المتغير static و عندها سيصبج مشترك بين جميع الكائنات.

    من ناحية الذاكرة, بما أن المتغير المشترك يكون نفسه موضوع لجميع الكائنات التي يتم إنشاؤها من نفس الكلاس, فهذا يعني أنك لو قمت بإنشاء 50 كائن من الكلاس فإنه لن يتم إنشاء 50 نسخة من المتغير في الذاكرة, بل سيكون هناك نسخة واحدة منه مشتركة بين جميع الكائنات.

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

    المتغيرات المشتركة

    تعريف المتغير في الكلاس كمتغير مشترك يجعلك قادر على الوصول لقيمة هذا المتغير بشكل مباشر من الكلاس, أي بدون الحاجة لإنشاء كائن منه.
    عند تعريف المتغير المشترك, لا يسمح لك بإعطائه قيمة أولية بداخل الكلاس حيث أنك يجب أن تعطيه قيمة أولية خارج الكلاس.

    بعد إسناد قيمة أولية للمتغير المشترك, تستطيع تغيير قيمته لاحقاً من خلال أي كائن يمكنه الوصول إليها.


    المتغير المشترك يجب تعريفه على مرحتلين:

    • يجب تعريفه بداخل الكلاس بدون إعطائه قيمة أولية مع الإشارة إلى أنه يجب تحديد نوعه static.
    • يجب إعطاؤه قيمة أولية خارج الكلاس.


    في المثال التالي, قمنا بتعريف كلاس إسمه Demo يحتوي على متغير عادي إسمه x و متغير مشترك إسمه y.
    المتغير المشترك y قمنا بإعطائه 0 كقيمة أولية خارج الكلاس كما يفترض.
    بعدها قمنا بإنشاء ثلاث كائنات من الكلاس Demo و إعطاء قيمة مختلفة للمتغير x الخاص بكل الكائن.
    في النهاية قمنا بتغيير قيمة المتغير المشترك y مرة واحدة حتى نلاحظ كيف أنها تغيرت بالنسبة لجميع الكائنات.

    مثال

    main.cpp
    #include <iostream>
    
    using namespace std;
    
    // Demo هنا قمنا بتعريف الكلاس
    class Demo {
    
    	// y و المتغير المشترك x هنا قمنا بتعريف المتغير
    	public:
    		int x;
    		static int y;
    
    };
    
    // القيمة 0 كقيمة أولية y هنا قمنا بإعطاء المتغير المشترك
    int Demo::y = 0;
    
    // main() هنا قمنا بتعريف الدالة
    int main()
    {
    	// Demo هنا قمنا بتعريف ثلاث كائنات من الكلاس
        Demo demo1, demo2, demo3;
    
    	// التي يملكها كل كائن قمنا بإنشائه x هنا قمنا بتغيير قيمة المتغير
        demo1.x = 10;
        demo2.x = 20;
        demo3.x = 30;
    
    	// التي يملكها كل كائن قمنا بإنشائه x هنا قمنا بطباعة قيمة المتغير
        cout << "demo1.x = " << demo1.x << endl;
        cout << "demo2.x = " << demo2.x << endl;
        cout << "demo3.x = " << demo3.x << endl;
    
    	// التي هي نفسها لكل الكائنات و بالطبع الآن قيمته هي 0 لأننا لم نقم بتغيير قيمته الأولية y هنا قمنا بطباعة قيمة المتغير المشترك
        cout << "Demo.y = " << demo1.y << endl;
        cout << "Demo.y = " << demo2.y << endl;
        cout << "Demo.y = " << demo3.y << endl;
    
    	// demo1 إلى 5 من خلال الكائن y هنا قمنا بتغيير قيمة
    	// سيتم إعتبار أنها تغييرت بالنسبة لجميع الكائنات لأنها مشتركة فيما بينهم demo3 أو demo2 أو demo1 ملاحظة: سواء غيرناها من خلال الكائن
        demo1.y = 5;
    
    	// demo1 من جديد للتأكد ما إن كانت حقاً أصبحت تساوي 5 أم لا بالنسبة لجميع الكائنات و ليس فقط الكائن y هنا قمنا بطباعة قيمة المتغير المشترك
        cout << "Demo.y = " << demo1.y << endl;
        cout << "Demo.y = " << demo2.y << endl;
        cout << "Demo.y = " << demo3.y << endl;
    
        return 0;
    }
    
    		

    سنحصل على النتيجة التالية عند التشغيل.

    demo1.x = 10
    demo2.x = 20
    demo3.x = 30
    Demo.y = 0
    Demo.y = 0
    Demo.y = 0
    Demo.y = 5
    Demo.y = 5
    Demo.y = 5
    		

    الدوال المشتركة

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

    بالنسبة لطريقة تعريف دالة مشتركة فهي نفسها طريقة تعريف دالة عادية مع إضافة الكلمة static إليها.



    في المثال التالي, سنستخدم متغير و دالة مشتَركين لمعرفة عدد الكائنات التي يتم إنشاؤها من الكلاس.

    في البداية قمنا بتعريف كلاس إسمه Demo يحتوي على متغير مشترك إسمه counter و دالة مشتركة إسمها getCounter عند استدعاءها تقوم بإرجاع قيمة المتغير counter فقط.

    في الكلاس Demo قمنا بتعديل الكونستركتور الإفتراضي لجعله يقوم بإضافة 1 على قيمة المتغير counter كلما تم إستدعاؤه.
    بمعنى آخر, كلما قمنا بإنشاء كائن - من خلال الكونستركتور الإفتراضي - سيتم إضافة 1 على قيمة المتغير counter و بالتالي فإن قيمة coutner ستمثل عدد الكائنات التي يتم إنشاءها من الكلاس Demo.

    في النهاية قمنا بإنشاء ثلاث كائنات من الكلاس Demo و من ثم إستدعاء الدالة getCounter() لمعرفة عدد الكائنات التي تم إنشاؤها.

    مثال

    main.cpp
    #include <iostream>
    
    using namespace std;
    
    // Demo هنا قمنا بتعريف الكلاس
    class Demo {
    
    	public:
    		// counter هنا قمنا بتعريف المتغير المشترك
    		static int counter;
    		
    		// كلما تم استدعاؤه counter هنا قمنا بتعريف الكونستركتور و جعلناه يزيد 1 على قيمة المتغير المشترك
    		Demo()
    		{
    			counter++;
    		}
    		
    		// فقط عندما يتم استدعاءها counter و قلنا أنها ترجع قيمة المشترك getCounter() هنا قمنا بتعريف الدالة المشتركة
    		static int getCounter()
    		{
    			return counter;
    		}
    
    };
    
    
    // القيمة 0 كقيمة أولية counter هنا قمنا بإعطاء المتغير المشترك
    int Demo::counter = 0;
    
    // main() هنا قمنا بتعريف الدالة
    int main()
    {
    	// Demo هنا قمنا بتعريف ثلاث كائنات من الكلاس
        Demo demo1, demo2, demo3;
    	
    	// لطباعة عدد الكائنات التي تم إنشاءها منه Demo من الكلاس getCounter() هنا قمنا باستدعاء الدالة
    	cout << "total created object = " << Demo::getCounter();
    
        return 0;
    }
    
    		

    سنحصل على النتيجة التالية عند التشغيل.

    total created object = 3
    		
    إعلان

    Eqla3Tech.com

    شروحات مكتوبة حول لغات البرمجة و تقنية المعلومات باللغة العربية مقدمة من إقلاع تك.

    لغة جافا لغة ++C قواعد البيانات نظام ويندوز نظام لينكس الشبكات تقنية المعلومات الأمن السيبراني

    الدورات

    أدوات مساعدة

    الأقسام

    دورات
    مقالات أسئلة مشاريع كتب