الـ Methods (الدوال الأعضاء)
جزء من قسم Object Oriented Programming في رحلة C++ على Coddy — الدرس 8 من 104.
تُعرّف الدوال العضوة (Member functions) ما يمكن للكائن فعله. ولها نوع إرجاع، واسم، ومعاملات اختيارية.
دالة ترجع قيمة
class Calculator {
public:
int add(int a, int b) {
return a + b;
}
};دالة Void (بدون قيمة إرجاع)
class Printer {
public:
void printMessage(std::string msg) {
std::cout << msg << std::endl;
}
};دالة تعيد bool
class Checker {
public:
bool isPositive(int num) {
return num > 0;
}
};التصريح في الترويسة، والتنفيذ في المصدر
// Calculator.h
class Calculator {
public:
int add(int a, int b);
};
// Calculator.cpp
int Calculator::add(int a, int b) {
return a + b;
}يأتي نوع الإرجاع قبل اسم الطريقة. استخدم void عندما لا ترجع الطريقة أي شيء. يربط عامل دقة النطاق :: التنفيذات بالفئة الخاصة بها.
التحدي
متوسطقم بتنفيذ أربع دوال أعضاء (member functions) لفئة StringHelper بأنواع إرجاع ومعاملات مختلفة:
getLength()— تعيدint، وهو طول النصtoUpperCase()— تعيدstd::string، وهو النص بأحرف كبيرةcontains(std::string word)— تعيدbool، ما إذا كان النص يحتوي على الكلمةrepeat(int times)— تعيدstd::string، وهو النص مكرراً مع مسافات
ورقة مرجعية
تُحدد الدوال الأعضاء (Member functions) ما يمكن للكائن فعله. ولها نوع إرجاع، واسم، ومعاملات اختيارية.
دالة (Method) تُرجع قيمة:
class Calculator {
public:
int add(int a, int b) {
return a + b;
}
};دالة من نوع Void (لا تُرجع قيمة):
class Printer {
public:
void printMessage(std::string msg) {
std::cout << msg << std::endl;
}
};دالة تُرجع قيمة منطقية (bool):
class Checker {
public:
bool isPositive(int num) {
return num > 0;
}
};التصريح في ملف الرأس (header)، والتنفيذ في ملف المصدر (source):
// Calculator.h
class Calculator {
public:
int add(int a, int b);
};
// Calculator.cpp
int Calculator::add(int a, int b) {
return a + b;
}يأتي نوع الإرجاع قبل اسم الدالة. استخدم void عندما لا تُرجع الدالة أي شيء. يربط عامل دقة النطاق (scope resolution operator) :: التنفيذات بالفئة الخاصة بها.
جرّب بنفسك
#include <iostream>
#include "StringHelper.h"
int main() {
std::string input;
std::getline(std::cin, input);
StringHelper helper;
helper.text = input;
std::cout << "Original: " << helper.text << std::endl;
std::cout << "Length: " << helper.getLength() << std::endl;
std::cout << "Uppercase: " << helper.toUpperCase() << std::endl;
std::cout << "Contains 'World': " << (helper.contains("World") ? "yes" : "no") << std::endl;
std::cout << "Repeated: " << helper.repeat(3) << std::endl;
return 0;
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Object Oriented Programming
1أساسيات الـ OOP
الملفات الخارجيةبناء وتجميع (Compilation) لغة C++ملفات الـ Header وملفات الـ Sourceالـ Namespaces والـ Scopeمقدمة في الـ OOP في C++الـ Classes مقابل الـ Objectsالمؤشر 'this'الـ Methods (الدوال الأعضاء)الـ Attributes (بيانات الأعضاء)أساسيات الـ Ctors والـ Dtorsمراجعة - آلة حاسبة بسيطة4خصائص الـ Class
أعضاء الـ Instance مقابل الـ Staticدوال الـ Getters والـ Settersدوال الأعضاء الثابتة (Const)الكلمة المفتاحية Mutableالدوال والمتغيرات الساكنة (Static)الدوال والفئات الصديقة (Friend)مراجعة - مدير الحساب البنكي7الوراثة
الوراثة الأساسيةمستويات الوصول في الوراثةترتيب استدعاء الـ Ctor والـ Dtorإعادة تعريف الدوال (Method Overriding)الدوال الافتراضية والـ VTableالوراثة المتعددةالوراثة الافتراضيةمراجعة - هيكلية الموظفين10نظرة عامة على STL
نظرة عامة وفلسفة STLحاويات STLالـ Iteratorsخوارزميات STLالـ Functors وتعبيرات Lambdaمراجعة - تكرار الكلمات13أنماط التصميم - الجزء الأول
مقدمة في أنماط التصميمنمط Singletonنمط Factory و Abstract Factoryنمط Builderنمط Observerنمط Strategy2إدارة الذاكرة
ذاكرة Stack مقابل Heapالمؤشرات والمراجعالذاكرة الديناميكية (new/delete)المؤشرات الذكية في C++RAII في C++مراجعة - مدير المصفوفات الديناميكية5التغليف (Encapsulation)
محددات الوصول في C++محددات الوصول بشكل متعمقإخفاء المعلوماتStruct مقابل Classالأصناف المتداخلة والداخليةمراجعة - نظام سجلات الطلاب8تعدد الأشكال (Polymorphism)
تعدد الأشكال: وقت التجميع مقابل وقت التشغيلالتحميل الزائد للدوال (Function Overloading)مراجعة الدوال الافتراضية (Virtual Functions)الدوال الافتراضية البحتة (Pure Virtual Functions)الأصناف المجردة (Abstract Classes)تصميم الواجهات (Interface) في C++التحويل الديناميكي (Dynamic Casting) و RTTIملخص - حاسبة الأشكال11مفاهيم OOP المتقدمة
التركيب مقابل الوراثةالـ Mixins عبر CRTPنمط Pimplمحو النوع (Type Erasure)أصناف Enum والأنواع القويةمعالجة الاستثناءات في OOPتسلسلات الاستثناءات المخصصة14أنماط التصميم - الجزء الثاني
نمط الأمرنمط المحولنمط المزيننمط قالب الطريقةنمط الحالةنمط التركيبRAII كنمط3المنشئات والموادم
المنشئ الافتراضيالمنشئ ذو المعاملاتمنشئ النسخمنشئ النقلقوائم تهيئة المنشئالمنشئات المفوضةتعمق في الموادمقاعدة الثلاثة / الخمسة / الصفرمراجعة - فئة String6تحميل العوامل (Operator Overloading)
مقدمة في تحميل العواملتحميل العوامل الحسابيةتحميل عوامل المقارنةعوامل Streamتحميل عامل التعيينتحميل العوامل [] و ()عوامل تحويل النوعمراجعة - Matrix Class9القوالب
قوالب الدوالقوالب الأصنافتخصيص القوالبالقوالب المتغيرةأساسيات SFINAE و Type Traitsمراجعة - الحاويات العامة