خطأ: لا يمكن إنشاء فئة الملخص

Khta La Ymkn Ansha Fyt Almlkhs



تتناول هذه المقالة خطأ آخر يحدث غالبًا عندما نعمل مع فئات مجردة في التعليمات البرمجية الخاصة بنا. دعونا ندرس مفهوم الطبقات المجردة في البرمجة الشيئية. تُعرف الفئة التي لا يمكن أن تحتوي على أي كائنات تم إنشاؤها من نفسها باسم فئة مجردة. وتسمى أيضًا الواجهة في لغة C ++. يمكن جعل أي فئة مجردة في لغة C ++ من خلال الإعلان عن وظيفة افتراضية خالصة فيها. للإعلان عن وظيفة افتراضية ، يتعين علينا وضع '= 0' بعد الوظيفة. فئة الخلاصة هي فئة أصل أو فئة أساسية تُشتق منها جميع الفئات الفرعية الأخرى. لذا ، للوصول إلى الفئة المجردة ، علينا أن نرثها من فئاتها الأساسية. عندما نحاول إنشاء فئة مجردة ، نحصل على خطأ في التجميع.

بناء الجملة

رسالة الخطأ الخاصة بالخطأ كما يلي:

خطأ : لا يمكن التصريح عن المتغير '' ليكون من النوع المجرد ''

لاحظ أنه في الأقواس الفارغة ، سيكون هناك أسماء فئات متغيرة ومجردة.







خطأ C2259 : 'حالة' : لا يمكن إنشاء فئة مجردة

هذه رسالة أخرى نحصل عليها من المترجم عندما نواجه مثل هذا الخطأ.



المثال رقم 01:

لجعل هذا الخطأ مفهومًا ، سنقدم مثالًا سنكتب فيه الكود الخاص بنا بطريقة تجعلنا نحصل على خطأ. لهذا الغرض ، قمنا بتهيئة فئة باسم 'ShapeClass'. لجعل هذه الفئة مجردة ، أعلنا عن وظيفة افتراضية فيها باسم 'getArea'. لقد أعلنا عن وظيفتين أخريين بالإضافة إلى الاسمين 'setWidth' و 'setHeight' على التوالي. ما نريد القيام به هنا هو أننا نريد الحصول على الارتفاع كمعامل والعرض كمعامل إدخال. سنقوم بحساب المنطقة بمساعدة معلمات الإدخال الخاصة بنا. أنشأنا مثيلًا لفصلنا بالطريقة الرئيسية. بمساعدة هذا الكائن ، قمنا باستدعاء الأساليب وسنمرر معلمات الإدخال من خلال تلك الطرق. بعد ذلك ، قمنا بطباعة مخرجاتنا للتحقق من النتائج.



# تضمين

استخدام اسم للمحطة ؛
فئة ShapeClass
{
عام :
افتراضية int جيتاريا ( ) = 0 ؛
فارغ setWidth ( int في )
{
العرض = في ؛
}
فارغ ضبط الارتفاع ( int ح )
{
ارتفاع = ح ؛
}
محمي :
int العرض ؛
int ارتفاع ؛
} ؛
int رئيسي ( فارغ )
{
الشكل ؛
ش. setWidth ( 1 ) ؛
ش. ضبط الارتفاع ( اثنين ) ؛
كوت << 'إجمالي مساحة المستطيل:' << ش. جيتاريا ( ) << إندل ؛
إرجاع 0 ؛
}

أعطانا النظام خطأ بعد تنفيذ الكود الخاص بنا. تقول رسالة الخطأ أنه لا يمكننا إعلان أن المتغير 'sh' من النوع المجرد 'shapeclass'. الآن ، يحاول المترجم إيصال أن 'ShapeClass' هو نوع مجردة ولا يمكننا التصريح عن متغيره. لذلك ، من خلال الرسالة ، يمكننا أن نفهم بوضوح أن المترجم لا يسمح لنا بإنشاء مثيل لفصلنا المجرد وهذا هو السبب في أن النظام يعطينا الخطأ.





لحل الخطأ ، أعلنا عن فئة أخرى 'مستطيل'. ستكون هذه الفئة هي الفئة الفرعية لفصلنا المجرد وسنعلن عن جسم وظيفتنا الافتراضية في هذه الفئة. بعد ذلك ، سننشئ الكائن الخاص به في الطريقة الرئيسية وبمساعدة كائنه ، سنقوم باستدعاء الوظائف.



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

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

في هذا المثال ، لن نقوم بأي حسابات رياضية. هذا المثال هو مثال عام سيساعدنا على فهم الفئات المجردة وكيف يعمل المترجم بين الطرق والفئات أثناء تنفيذ الكود. في هذا الفصل ، أنشأنا فئة مجردة وأطلقنا عليها اسم 'AbsClass'. لقد أعلنا عن فئة أخرى 'ChildClass' ولكن هذه الفئة ليست فئة مجردة. هذه الفئة مشتقة من صنفنا التجريدي.

لقد قمنا بطباعة 'القيمة التي تم تمريرها باستخدام الكائن' في طريقة تم الإعلان عنها في فئة الملخص. اسم الوظيفة هو “valueFunc”. كما ناقشنا ، يتم الإعلان عن جسد الوظيفة الافتراضية في فئة الأطفال. في فصل الأطفال لدينا ، قمنا بطباعة عبارة 'في الوظيفة الافتراضية' في جسم الوظيفة الافتراضية. الآن ، سنمرر قيمة إلى دالة القيمة الخاصة بنا ونرى ما إذا كانت القيمة التي تم الوصول إليها صحيحة. في طريقتنا الرئيسية ، أنشأنا مثيلًا لفئة abstract الخاصة بنا وبمساعدة المثال ، سوف نسمي وظائفنا الافتراضية وغيرها. الآن ، سوف ننفذ الكود الخاص بنا.

# تضمين

استخدام اسم للمحطة ؛
فئة AbsClass
{
عام :
افتراضية int فيرتفونك ( ) = 0 ؛
فارغ القيمة ( int في )
{
العرض = في ؛
كوت << 'تم تمرير القيمة باستخدام الكائن' << في << إندل ؛
}
محمي :
int العرض ؛
} ؛
فئة ChildClass :
AbsClass العامة
{
عام :
int فيرتفونك ( ) {
كوت << 'في الوظيفة الافتراضية' << إندل ؛
}
} ؛
int رئيسي ( فارغ )
{
ChildClass سم مكعب ؛
نسخة. القيمة ( 5 ) ؛
كوت << نسخة. فيرتفونك ( ) << إندل ؛
إرجاع 0 ؛
}

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

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

عند تنفيذ الكود الخاص بنا ، لم يقم المترجم بإلقاء أي خطأ هذه المرة. بدلاً من ذلك ، قام النظام بتجميع الكود الخاص بنا بنجاح وقدم لنا المخرجات. الآن ، دعونا نلقي نظرة على الناتج. قام النظام بطباعة 'القيمة التي تم تمريرها باستخدام الكائن' و '5' ضدها. لأننا مررنا 5 باستخدام المثيل الخاص بنا في الطريقة الرئيسية. بعد ذلك ، قام بطباعة السطر الذي طلبناه في وظيفتنا الافتراضية.

استنتاج

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