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

كيفية استدعاء دالة من الفئة ج في لغة البرمجة ج

واحدة من ميزات لغة البرمجة ج هو عدم وجود دعم مدمج للبرمجة وجوه المنحى (أوب). ومع ذلك ، فمن الممكن لتنفيذ بعض المفاهيم أوب في ج باستخدام الهياكل والوظائف.

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

على سبيل المثال ، إذا كان لدينا بنية "دائرة" تحتوي على دالة "حساب المساحة" ، فيمكننا استدعاء هذه الوظيفة على النحو التالي:

دائرة الهيكل {

// مجالات هيكل الدائرة

تعويم دائرة نصف قطرها;

تعويم (*حساب المنطقة) (دائرة البنية*);

};

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

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

تعويم حساب الدائرة (دائرة الهيكل * دائرة) {

// قم بإجراء الحسابات اللازمة وإرجاع النتيجة

عودة 3.14 * دائرة - > دائرة نصف قطرها * دائرة- > دائرة نصف قطرها;

}

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

هيكل دائرة مايسيركل;

مايسيركل.نصف القطر = 5.0;

مايسيركل.حساب المنطقة = حساب الدائرة;

منطقة تعويم = دائرة.منطقة الحساب (&دائرة);

في النهاية ، سيحتوي متغير المنطقة على قيمة مساحة الدائرة بنصف القطر المحدد.

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

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

باستخدام طريقة فئة لاستدعاء دالة

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

) لاستدعاء طريقة هذا الكائن. هنا مثال:

# تشمل

// تعريف الفئة

اكتببنية الدفاع {

إنت إكس;

إنت ذ;

} ميكلاس;

// تحديد طريقة الفصل

فواد برينتكورديناتس (ميكلاس* ميوبجيكت) {

برينتف ("الإحداثيات: (٪د ، ٪ د)

"،ميوبجيكت- > س ، ميوبجيكت- > ص);

}

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

// إنشاء كائن فئة

ميكلاس أوبج;

كائن.س = 10;

كائن.ص = 20;

// استدعاء طريقة الفصل

برينتكورديناتس (&أوبج);

العودة 0;

}

ويخرج قيم متغيراته.

.

. ونتيجة لذلك ، سوف نحصل على:

الإحداثيات: (10 ، 20)

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

استخدام كائن فئة لاستدعاء دالة

) بعد اسم الكائن ، متبوعا باسم الوظيفة.

مثال:

# تشمل

// تعريف الفئة

هيكل ميكلاس {

عدد كثافة العمليات;

رقم الطباعة الفارغة () {

برينتف ("الرقم هو: ٪ د

"،رقم);

}

};

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

// إنشاء كائن

من هيكل ميكلاس أوبج كلاس;

// تهيئة الحقول

من الكائن الكائن.العدد = 42;

// استدعاء الوظيفة

من الكائن.كائن رقم الطباعة ();

العودة 0;

}

يسمى باستخدام عامل النقطة بعد اسم الكائن.

ستكون نتيجة تنفيذ البرنامج:

الرقم هو: 42

يعد استخدام كائن فئة لاستدعاء دالة الطريقة الرئيسية للتفاعل مع طرق فئة معينة في لغة البرمجة سي.

باستخدام وظيفة ثابتة

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

لإعلان دالة ثابتة ، يتم تحديد الكلمة الأساسية الثابتة قبل اسمها. يتم الإعلان عن وظيفة ثابتة داخل الفصل ، ولكن خارج الوظيفة الرئيسية (). في لغات البرمجة الشيئية مثل ج Java, جافاأو ج# ، يمكن استخدام الوظائف الثابتة للوصول إلى البيانات المشتركة والوظائف المشتركة بشكل مستقل عن كائن معين.

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

مثال على استخدام دالة ثابتة في لغة البرمجة ج programming:

# تشمل

فئة ميكلاس {

العامة:

ثابت الفراغ ميستاتيكفونكتيون () {

الأمراض المنقولة جنسيا:: كوت < < " هذه هي وظيفة ثابتة!"<<الأمراض المنقولة جنسيا:: إندل;

}

};

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

ميكلاس:: ميستاتيكفونكتيون();

العودة 0;

}

.

نتيجة تنفيذ البرنامج:

هذه وظيفة ثابتة!

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

باستخدام مؤشر وظيفة

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

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

لإعلان مؤشر إلى وظيفة ، يجب استخدام بناء الجملة التالي:

نوع الإرجاع (*مؤشر إلى دالة) (وسيطات);

هنا ، نوع الإرجاع هو نوع البيانات التي تم إرجاعها بواسطة الوظيفة ، والوسيطات هي المعلمات المقبولة بواسطة الوظيفة.

مثال على إعلان مؤشر إلى دالة:

كثافة العمليات (*بتر) (كثافة العمليات ، كثافة العمليات);

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

لاستدعاء الدالة التي يشير إليها المؤشر ، استخدم عامل التشغيل () بعد المؤشر وتمرير الوسيطات داخل الأقواس. على سبيل المثال:

إنت النتيجة = (*بتر) (3 ، 5);

في هذا المثال ، يتم استدعاء الدالة المشار إليها بواسطة مؤشر بتر ويتم تمرير الوسيطتين 3 و 5. يتم تخزين نتيجة استدعاء الدالة في متغير النتيجة.

مثال على استخدام مؤشر الدالة:

# تشمل

مجموع الباحث (الباحث أ ، الباحث ب) {

العودة أ + ب;

}

الفرق الباحث (الباحث أ ، الباحث ب) {

العودة أ-ب;

}

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

كثافة العمليات (*العملية) (كثافة العمليات ، كثافة العمليات) ؛ / / إعلان المؤشر

العملية = مجموع ؛ / / تعيين العنوان

من وظيفة برينتف ("المجموع: ٪ د

"،العملية (3 ، 2)) ؛ / / استدعاء الوظيفة عبر مؤشر

العملية = الفرق ؛ / / تعيين عنوان لآخر

وظيفة برينتف ("الفرق: ٪ د

"،العملية (3 ، 2)); // استدعاء وظيفة عبر

مؤشر العودة 0;

}

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

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

باستخدام الميراث

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

لاستدعاء وظيفة من فئة باستخدام الميراث ، تحتاج إلى:

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

:

فئة الحيوان {

ماكيسوند () {

وحدة التحكم.سجل ('الحيوان يجعل الصوت');

}

}

يرث الخصائص والأساليب من الفئة الأصل:

فئة الكلب يمتد الحيوان {

ماكيسوند () {

ممتاز.ماكيسوند () ؛ / / استدعاء وظيفة من الفئة الأصل

وحدة التحكم.سجل ('الكلب ينبح');

}

}

، ثم سيتم عرض الشاشة:

الحيوان يجعل الصوت

الكلب ينبح

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

باستخدام مساحة الاسم

مساحة الاسم هي بناء خاص في لغة البرمجة سي programming التي تسمح لك بتنظيم مجموعات من المعرفات (على سبيل المثال ، الوظائف والفئات والمتغيرات) لتجنب تعارضات الأسماء. تساعد مساحة الاسم على هيكلة الكود وتبسيط تطويره وصيانته.

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

لنلق نظرة على مثال لاستخدام مساحة الاسم:

// إعلان

مساحة اسم

باطلة وظيفتي () {

// تنفيذ الوظيفة

}

فئة ميكلاس {

// تنفيذ الفصل

};

}

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

// استدعاء وظيفة من مساحة الاسم

مينامسباس:: ميفونكتيون();

// الرمز الفعلي

هو العودة 0;

}

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

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

باستخدام طريقة ثابتة

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

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

مثال على إعلان طريقة ثابتة:

فئة ميكلاس {

العامة:

ثابت الفراغ ميستاتيكميثود () {

// جسم الطريقة الثابتة

}

};

لاستدعاء طريقة ثابتة من خارج الفئة ، يجب عليك استخدام اسم الفئة:

ميكلاس:: ميستاتيكميثود();

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

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

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

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

باستخدام ميزة ودية

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

من أجل إعلان الوظيفة على أنها ودية ، يجب وضعها في القسم العام: أو الخاص: من الفصل. على سبيل المثال:

فئة ميكلاس {

خاص:

إنت خاص متغير;

صديق باطل فريندفونكتيون (ميكلاس و أوبج);

العامة:

باطلة بوبليكفونكتيون();

};

فواد ميفريندفونكتيون (ميكلاس و أوبج) {

كائن.متغير خاص = 42;

}

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

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

Внутренние функции класса могут также быть объявлены как дружественные. Например:

class MyClass {

private:

int privateVariable;

void privateFunction();

friend void MyFriendFunction(MyClass& obj);

};

void MyClass::privateFunction() {

// Реализация функции

}

void MyFriendFunction(MyClass& obj) {

obj.privateFunction();

}

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

يتيح لك استخدام وظيفة ودية إدارة الوصول بمرونة إلى أعضاء الفصل الخاص ويوفر مرونة أكبر في تنظيم كود البرنامج.

سؤال وجواب

كيف يمكنني استدعاء وظيفة من فئة?

لاستدعاء دالة من فئة في ج++ ، يتم استخدام عامل النقطة. على سبيل المثال ، إذا كان لديك فئة ميكلاس مع وظيفة ميفونكتيون () ، يمكنك استدعاء هذه الوظيفة مثل هذا: ميكلاس أوبج ؛ أوبج.وظيفتي();

كيف يمكنني استدعاء وظيفة من فئة داخل وظيفة فئة أخرى?

لاستدعاء دالة من فئة داخل دالة فئة أخرى ، يجب عليك استخدام مؤشر إلى الكائن الحالي. على سبيل المثال ، إذا كان لديك فئة ميكلاس مع وظيفة ميفونكتيون () ، يمكنك استدعاء هذه الوظيفة داخل وظيفة فئة أخرى على النحو التالي: فواد ميكلاس:: وظيفة أخرى () { هذا- > ميفونكتيون ()؛}

هل من الممكن استدعاء وظيفة من فئة دون إنشاء كائن?

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

كيف يمكنني تمرير المعلمات إلى وظيفة فئة?

لتمرير المعلمات إلى دالة فئة في ج++ ، عادة ما يتم استخدام وسيطات الوظيفة. على سبيل المثال ، إذا كان لديك فئة ميكلاس مع وظيفة ميفونكتيون(إنت س ، إنت ص) ، يمكنك استدعاء هذه الوظيفة وتمرير المعلمات إليها مثل هذا: ميكلاس أوبج ؛ أوبج.وظيفتي (5 ، 10);

هل من الممكن استدعاء وظيفة ثابتة من فئة دون إنشاء كائن?

نعم ، يمكن استدعاء وظيفة فئة ثابتة دون إنشاء كائن. لاستدعاء دالة فئة ثابتة ، يتم استخدام اسم الفئة ، وليس مثيل الفئة. على سبيل المثال ، إذا كان لديك فئة ميكلاس مع وظيفة ثابتة ميستاتيكفونكتيون () ، يمكنك استدعاء هذه الوظيفة مثل هذا: ميكلاس:: ميستاتيكفونكتيون();

هل من الممكن استدعاء وظيفة من فئة أخرى داخل فئة?

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