إعلان
دورة تطوير التطبيقات باستخدام لغة 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++ منع إمكانية إعادة تعريف الدوال

    الكلمة final

    إذا كنت تريد منع الكلاس الإبن من إعادة تعريف الدالة التي ورثها من الكلاس فيمكنك جعل نوع الدالة virtual final حتى أنه يمكنك جعل نوع الكلاس بأكمله final لا يمكن إعادة تعريف أي دالة موجودة فيه بهدف أن يتم استخدام الدوال الموجودة فيه كما هي.

    ملاحظة: تم إضافة هذه الكلمة إبتداءاً من الإصدار C++ 11 و الإصدارات اللاحقة.


    مصطلحات تقنية

    • الدالة التي لا يمكن إعادة تعريفها يقال لها في العادة دالة ثابتة.
    • الكلاس الذي لا يمكن إعادة تعريف أي شيء موجود فيه يقال له كلاس ثابت.


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

    الكلمة final يمكن استخدامها كإسم لمتغير, دالة, مصفوفة, كائن إلخ.. لأنها لا تعتبر من الكلمات المحجوزة ( Keywords ) في اللغة.

    أمثلة شاملة على الكلمة final


    في المثال التالي قمنا بتعريف كلاس إسمه Base يحتوي على دالة ثابتة إسمها func().
    بعدها قمنا بتعريف كلاس إسمه Derived يرث من الكلاس Base و حاولنا فيه إعادة تعريف الدالة func() لتنبيهك من الخطأ الذي قد يظهر في حال حاولت إعادة تعريف دالة ثابتة في الكلاس الذي يرثها.

    المثال الأول

    main.cpp
    #include <iostream>
    
    using namespace std;
    
    // func يحتوي على دالة ثابتة إسمها Base هنا قمنا بتعريف كلاس إسمه
    class Base
    {
    	public:
    		virtual void func() final
            {
                cout << "Base class default behaviour \n";
            }
    };
    
    // func و فيه قمنا بإعادة تعريف الدالة الثابتة Base يرث من الكلاس Derived هنا قمنا بتعريف محتوى الكلاس
    class Derived : public Base
    {
    	public:
    		void func() override     // هذا السطر الذي سيسبب المشكلة عند التشغيل
    		{
    			cout << "Derived class overridden behaviour \n";
    		}
    };
    
    // main() هنا قمنا بتعريف الدالة
    int main()
    {
        return 0;
    }
    		

    سيظهر الخطأ التالي عند التشغيل.

    error: virtual function 'virtual void Derived::func()' overriding final function
        note: overridden function is 'virtual void Base::func()'
            In member function 'virtual void Derived::func()'

    في المثال السابق حدث الخطأ فعلياً بسبب السطر 19 حيث أن المترجم قال بأنه لا يمكن إعادة تعريف الدالة func() في الكلاس Derived الذي ورثها لأنها في الكلاس الأب Base معرّفة كدالة ثابتة.



    في المثال التالي قمنا بتعريف كلاس ثابت إسمه Base يحتوي على دالة إسمها func().
    بعدها قمنا بتعريف كلاس إسمه Derived يرث من الكلاس Base فقط لتنبيهك من الخطأ الذي قد يظهر في حال حاولت الوراثة من كلاس ثابت.

    المثال الثاني

    main.cpp
    #include <iostream>
    
    using namespace std;
    
    // func يحتوي على دالة إسمها Base هنا قمنا بتعريف كلاس ثابت إسمه
    class Base final
    {
    	public:
    		void func()
            {
                cout << "Base class default behaviour \n";
            }
    };
    
    // و طبعاً هذا الأمر سيسبب مشكلة عند التشغيل Base يرث من الكلاس Derived هنا قمنا بتعريف محتوى الكلاس
    class Derived : public Base
    {
    	
    };
    
    // main() هنا قمنا بتعريف الدالة
    int main()
    {
        return 0;
    }
    		

    سيظهر الخطأ التالي عند التشغيل.

    error: cannot derive from 'final' base 'Base' in derived type 'Derived'

    في المثال السابق حدث الخطأ فعلياً بسبب السطر 16 حيث أن المترجم قال بأنه لا يمكن الوراثة من الكلاس Base لأنه كلاس ثابت.



    في المثال التالي قمنا بتعريف كلاس ثابت إسمه Base يحتوي على دالة إسمها func().
    بعدها قمنا بإنشاء كائن منه و استدعاء الدالة الموجودة فيه.

    المثال الثالث

    main.cpp
    #include <iostream>
    
    using namespace std;
    
    // func يحتوي على دالة إسمها Base هنا قمنا بتعريف كلاس ثابت إسمه
    class Base final
    {
    	public:
    		void func()
            {
                cout << "Base class default behaviour \n";
            }
    };
    
    // main() هنا قمنا بتعريف الدالة
    int main()
    {
    	// b إسمه Base هنا قمنا بإنشاء كائن من الكلاس
        Base b;
    
    	// b من الكائن func() هنا قمنا باستدعاء الدالة
        b.func();
    	
        return 0;
    }
    		

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

    Base class default behaviour
    		
    إعلان

    Eqla3Tech.com

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

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

    الدورات

    أدوات مساعدة

    الأقسام

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