الانتقال إلى المحتوى الرئيسي

كيفية إنشاء مجموعة من الكائنات متعددة الأشكال باستخدام لغة البرمجة سي

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

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

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

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

  1. إنشاء مجموعة من الكائنات متعددة الأشكال
  2. التحضير للعمل
  3. تحديد الفئة الأساسية
  4. إنشاء فئات مشتقة
  5. تهيئة مجموعة من الكائنات
  6. تخصيص الذاكرة لمجموعة
  7. سؤال وجواب
  8. كيف يمكنني إنشاء مجموعة من الكائنات متعددة الأشكال في ج?
  9. كيف أعلن مجموعة من الكائنات متعددة الأشكال في ج?
  10. كيف يمكنني إضافة كائن إلى مجموعة من الكائنات متعددة الأشكال في ج?
  11. كيف يمكنني الوصول إلى أساليب الكائنات متعددة الأشكال في صفيف في ج?
  12. كيف يمكنني إزالة كائن من مجموعة من الكائنات متعددة الأشكال في ج?
  13. هل من الممكن إنشاء مجموعة من الكائنات من فئات مختلفة في ج?

إنشاء مجموعة من الكائنات متعددة الأشكال

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

لإنشاء مجموعة من الكائنات متعددة الأشكال في لغة البرمجة ج ، تحتاج إلى اتباع الخطوات التالية:

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

Вот пример кода на языке C, который показывает, как создать массив полиморфных объектов:

#include

// Базовый класс

typedef struct {

int value;

void (*print)(void*);

} BaseClass;

void printBase(BaseClass* obj) {

printf("BaseClass value: %d

", obj->value);

}

// Производный класс

typedef struct {

BaseClass base;

void (*print)(void*);

} DerivedClass;

void printDerived(DerivedClass* obj) {

printf("DerivedClass value: %d

", obj->base.value);

}

int main() {

// Создание массива указателей на базовый класс

BaseClass* objects[2];

// Создание и инициализация объектов наследуемого класса

DerivedClass derivedObj1;

derivedObj1.base.value = 1;

derivedObj1.base.print = (void (*)(void*))printDerived;

objects[0] = (BaseClass*)&derivedObj1

DerivedClass derivedObj2;

derivedObj2.base.value = 2;

derivedObj2.base.print = (void (*)(void*))printDerived;

objects[1] = (BaseClass*)&derivedObj2

// الوصول إلى عناصر الصفيف عبر المؤشرات إلى الفئة الأساسية

ل (إنت أنا = 0 ؛ أنا < 2 ؛ أنا {) {

كائنات [أنا] - > طباعة (كائنات [أنا]);

}

العودة 0;

}

في هذا المثال ، أنشأنا الفئة الأساسية الأساسية مع خاصية القيمة وطريقة الطباعة. ثم أنشأنا الفئة المشتقة المشتقة ، والتي ترث خصائص وأساليب الفئة الأساسية وتحدد طريقة الطباعة الخاصة بها.

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

في الإخراج ، سوف نحصل على النتيجة التالية:

مشتقةقيمة الفئة: 1

مشتقةقيمة الفئة: 2

التحضير للعمل

قبل إنشاء مجموعة من الكائنات متعددة الأشكال ، تحتاج إلى تنفيذ عدة خطوات.

1. خطة هيكل مجموعة الخاص بك. حدد أنواع الكائنات التي ستحتويها والطرق التي ستمتلكها.

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

3. حدد الطرق اللازمة في كل فئة. يمكن أن تكون الأساليب افتراضية أو مجردة للسماح بتجاوزها في الفئات المشتقة.

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

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

6. استخدم حلقة لإجراء العمليات اللازمة مع كل كائن في المصفوفة.

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

تحديد الفئة الأساسية

في ال ج programming لغة البرمجة ، لإنشاء مجموعة من الكائنات متعددة الأشكال ، من الضروري تحديد فئة أساسية ستكون بمثابة أساس للفئات الأخرى.

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

يتضمن تعريف الفئة الأساسية الإعلان عن اسمها ، وكذلك تحديد خصائصها وطرقها.

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

شكل الطبقة {

محمي:

الأمراض المنقولة جنسيا::اسم السلسلة;

منطقة مزدوجة;

العامة:

الشكل (كونست ستد:: سلسلة واسم): اسم(اسم) ، منطقة(0.0) {}

منطقة الحساب المزدوج الافتراضي () = 0;

};

في هذا المثال ، تحتوي الفئة الأساسية "الشكل" على خاصيتين محميتين — "الاسم" (اسم الشكل) و "المنطقة" (مساحة الشكل). كما أن لديها منشئ يأخذ اسم الشكل ويهيئ خاصية" الاسم "، ويتم تهيئة خاصية" المنطقة " إلى قيمة فارغة.

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

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

إنشاء فئات مشتقة

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

مثال:

فئة الطبقة الأساسية {

// رمز الفئة الأساسية

};

الطبقة المشتقة: الطبقة الأساسية العامة {

// رمز الفئة المشتقة

};

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

يمكن للفئة المشتقة إضافة متغيرات وطرق جديدة إلى الفئة الأساسية ، بالإضافة إلى تعديل أو إعادة تعريف الطرق الحالية للفئة الأساسية.

يمكن أن يكون الميراث في ج either إما عاما أو محميا أو خاصا.

مع الميراث العام ، تصبح جميع العناصر العامة للفئة الأساسية عامة في الفئة المشتقة ، وتصبح العناصر المحمية للفئة الأساسية محمية في الفئة المشتقة ، وتبقى العناصر الخاصة للفئة الأساسية غير قابلة للوصول من الفئة المشتقة.

مثال:

فئة الطبقة الأساسية {

العامة:

إنت بوبليكفار;

محمي:

إنت بروتكتدفار;

خاص:

إنت بريفاتيفار;

};

الطبقة المشتقة: الطبقة الأساسية العامة {

// الحصول على الوصول إلى بوبليكفار و بروتيكتدفار

// بريفاتيفار غير متوفر

};

مع الميراث المحمي ، تصبح جميع العناصر العامة والمحمية للفئة الأساسية محمية في الفئة المشتقة ، وتبقى العناصر الخاصة للفئة الأساسية غير قابلة للوصول من الفئة المشتقة.

Пример:

class BaseClass {

public:

int publicVar;

protected:

int protectedVar;

private:

int privateVar;

};

class DerivedClass : protected BaseClass {

// получаем доступ к publicVar и protectedVar

// privateVar недоступна

};

مع الميراث الخاص ، تصبح جميع العناصر العامة والمحمية للفئة الأساسية خاصة في الفئة المشتقة ، وتبقى العناصر الخاصة للفئة الأساسية غير قابلة للوصول من الفئة المشتقة.

مثال:

فئة الطبقة الأساسية {

العامة:

إنت بوبليكفار;

محمي:

إنت بروتكتدفار;

خاص:

إنت بريفاتيفار;

};

الطبقة المشتقة: الطبقة الأساسية الخاصة {

// بوبليكفار ، بروتيكتدفار و بريفاتيفار غير متوفرة

};

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

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

تهيئة مجموعة من الكائنات

مجموعة من الكائنات هي بنية بيانات تكون فيها العناصر كائنات من فئة معينة. تهيئة مجموعة من الكائنات في لغة البرمجة ج requires يتطلب عدة خطوات.

1. إنشاء فئة.

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

فئة الحيوان {

العامة:

الفراغ الظاهري ماكيسوند () = 0;

};

فئة الكلب: الحيوان العام {

العامة:

الفراغ يجعل الصوت () تجاوز {

كوت < < " اللحمة!"<<إندل;

}

};

فئة القط: الحيوان العام {

العامة:

الفراغ يجعل الصوت () تجاوز {

كوت < < " مواء!"<<إندل;

}

};

2. إنشاء صفيف.

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

الحيوانات * الحيوانات [3];

3. تهيئة عناصر المصفوفة.

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

الحيوانات [0] = كلب جديد ();

الحيوانات [1] = قطة جديدة ();

الحيوانات [2] = كلب جديد ();

4. باستخدام المصفوفة.

بعد تهيئة مجموعة من الكائنات ، يمكنك استخدام عناصرها عند استدعاء الطرق المناسبة أو الوصول إلى حقولها. على سبيل المثال ، تستدعي التعليمات البرمجية التالية طريقة ماكيسوند () لكل كائن:

إلى عن على (كثافة العمليات أنا = 0; أنا < 3; أنا i) {

الحيوانات [أنا] - > ماكيسوند();

}

نتيجة لتنفيذ التعليمات البرمجية ، سيتم عرض الشاشة:

اللحمة!

مواء!

اللحمة!

وبالتالي ، يمكن تهيئة مجموعة من الكائنات واستخدامها لتخزين ومعالجة أنواع مختلفة من الكائنات في لغة برمجة سي programming.

تخصيص الذاكرة لمجموعة

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

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

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

لتخصيص الذاكرة لمجموعة من الكائنات متعددة الأشكال ، يمكنك استخدام التعليمات البرمجية التالية:

# تشمل 

# تشمل

فئة الطبقة الأساسية {

العامة:

أداء الفراغ الظاهري () = 0;

};

الفئة المشتقة 1: الطبقة الأساسية العامة {

العامة:

أداء الفراغ () {

برينتف ("فئة مشتقة 1:: بيرفورماكتيون

");

}

};

الفئة المشتقة 2: الطبقة الأساسية العامة {

العامة:

أداء الفراغ () {

برينتف ("فئة مشتقة 2:: بيرفورماكتيون

");

}

};

كثافة العمليات الرئيسية () {

حجم كونست إنت = 5;

الطبقة الأساسية * * صفيف = (الطبقة الأساسية**)مالوك (الحجم * الحجم (الطبقة الأساسية*));

ل (إنت أنا = 0 ؛ أنا < الحجم ؛ أنا i) {

إذا (أنا ٪ 2 = = 0) {

صفيف [أنا] = فئة مشتقة جديدة1 ();

} آخر {

صفيف [أنا] = فئة مشتقة جديدة2();

}

}

ل (إنت أنا = 0 ؛ أنا < الحجم ؛ أنا i) {

صفيف [أنا]- > بيرفورماكتيون();

}

ل (إنت أنا = 0 ؛ أنا < الحجم ؛ أنا i) {

حذف مجموعة [أنا];

}

مجانا (صفيف);

العودة 0;

}

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

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

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

سؤال وجواب

كيف يمكنني إنشاء مجموعة من الكائنات متعددة الأشكال في ج?

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

كيف أعلن مجموعة من الكائنات متعددة الأشكال في ج?

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

كيف يمكنني إضافة كائن إلى مجموعة من الكائنات متعددة الأشكال في ج?

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

كيف يمكنني الوصول إلى أساليب الكائنات متعددة الأشكال في صفيف في ج?

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

كيف يمكنني إزالة كائن من مجموعة من الكائنات متعددة الأشكال في ج?

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

هل من الممكن إنشاء مجموعة من الكائنات من فئات مختلفة في ج?

في ج ، لا يمكنك إنشاء مجموعة من الكائنات من فئات مختلفة ، لأن ج لا يدعم تعدد الأشكال. ومع ذلك ، يمكنك إنشاء مجموعة من المؤشرات إلى الفئة الأساسية واستخدامها لتخزين الكائنات من مختلف الفئات المشتقة.