0 Najah Alsaker نشر 17 فبراير أرسل تقرير نشر 17 فبراير التجريد ( Abstraction ) هو أسلوب مهم جداً يستخدم لتسهيل كتابة الأوامر على المبرمجين, فهو يجعلك قادراً على تنفيذ ما تريد دون الحاجة إلى معرفة كافة التفاصيل التي تم فيها تنفيذ ذلك. والان بعد ان قمنا بتعريفه ما هو دعنا نتحدث عن شروطه : الكلاس الذي يحتوي على دوال مجردة لا يمكن إنشاء كائنات منه لأنه في حال استدعاء الدالة لم يتم تعريفها منه فإن هذا سيسبب مشكلة. الكلاس الذي يرث دوال مجردة و لا يقوم بإعادة كتابة محتواها أيضاً لا يمكن إنشاء كائنات منه لذات السبب. الدوال الثابتة التي نوعها static لا يمكن تعريفها كدوال مجردة لأنها أصلاً تستخدم من الكلاس الأساسي. أسلوب التجريد يتطلب استخدام الكلمتين virtual و override اللتين تم إضافتهما ابتداءاً من الإصدار C++ 11 لهذا تأكد أنك تستخدم هذا الإصدار أو الإصدارات الأحدث حتى تستطيع تطبيقه. دعنا الان نأخد مثال عن طريقة عمله : #include <iostream> using namespace std; // func يحتوي على دالة مجردة إسمها Base هنا قمنا بتعريف كلاس إسمه class Base { public: virtual void func() = 0; }; // func و فيه قمنا بتعريف الدالة المجردة Base يرث من الكلاس Derived هنا قمنا بتعريف محتوى الكلاس class Derived : public Base { public: void func() override { cout << "Derived class overridden behaviour \n"; } }; // main() هنا قمنا بتعريف الدالة int main() { // d إسمه Derived هنا قمنا بإنشاء كائن من الكلاس Derived d; // Derived و التي تم تعريفها في الكلاس d من الكائن func() هنا قمنا باستدعاء الدالة d.func(); return 0; } في هذا المثال قمنا بتعريف كلاس إسمه Base يحتوي على دالة مجردة إسمها func. بعدها قمنا بتعريف كلاس إسمه Derived يرث من الكلاس Base و قمنا فيه بإعادة تعريف الدالة func. في الأخير قمنا بإنشاء كائن من الكلاس Derived و من ثم استدعاء الدالة func() الموجودة فيه. بعد تطبيق الكود وتشغيله ستحصل على النتيجة التالية : اقتباس Derived class overridden behaviour ساعيد لك نفس المثال السابق و لكننا سنحاول إنشاء كائن من الكلاس الأب الذي يحتوي على الدالة المجردة لتنبيهك من الخطأ الذي قد يظهر لك في حال فعلت ذلك. انظر هنا قمت بتعديل هذان السطران من الكود Derived d; d.func(); ليصبحو هكذا Base b; b.func(); وهذا هو الكود النهائي بعد التعديلات #include <iostream> using namespace std; // func يحتوي على دالة مجردة إسمها Base هنا قمنا بتعريف كلاس إسمه class Base { public: virtual void func() = 0; }; // func و فيه قمنا بتعريف الدالة المجردة Base يرث من الكلاس Derived هنا قمنا بتعريف محتوى الكلاس class Derived : public Base { public: void func() override { cout << "Derived class overridden behaviour \n"; } }; // main() هنا قمنا بتعريف الدالة int main() { // b إسمه Base هنا قمنا بإنشاء كائن من الكلاس Base b; // هذا السطر الذي قمت بتعديلها // Base و التي تم تعريفها في الكلاس b من الكائن func() هنا قمنا باستدعاء الدالة b.func(); // وهذا السطر ايضا return 0; } سنحصل على النتيجة التالية عند التشغيل. error: cannot declare variable 'b' to be of abstract type 'Base' because the following virtual functions are pure within 'Base': 'virtual void Base::func()' لاحظ أن الخطأ فعلياً حدث بسبب هذه السطر Base b; حيث أن المترجم قال بأنه لا يمكن إنشاء كائن من الكلاس Base لأنه يحتوي على دالة مجردة ( Pure Virtual Function ) ثم كتب لنا إسم الدالة المجردة أيضاً. ارجو ان يكون تم توضيح الفكرة بالتفصيل بالتوفيق لك 1 اقتباس
السؤال
Esraa .
نشاء كلاس بإستخدام الAbstract بلغة c++
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.