0Pricing
C++ Academy · درس

دوال أعضاء const

حدّد الدوال التي للقراءة فقط

دوال أعضاء const درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.

ماهيّة دالة العضو من النوع const

تتعهد دالة العضو المعلَّمة بـ const بعدم تعديل الحالة الملحوظة للكائن. وتأتي الكلمة المفتاحية بعد قائمة المعاملات.

#include <iostream>

class Counter {
    int n = 0;
public:
    int value() const { return n; }   // read-only
    void inc() { ++n; }
};

int main() {
    Counter c;
    c.inc();
    std::cout << c.value() << "\n";
}

تستدعي الكائنات const الدوال const

لا يمكنك على كائن من النوع const استدعاء سوى دوال العضو من النوع const. أما الدوال غير الثابتة فممنوعة.

#include <iostream>

class Counter {
    int n = 0;
public:
    int value() const { return n; }
    void inc() { ++n; }
};

int main() {
    const Counter c;
    std::cout << c.value() << "\n";   // OK
    // c.inc();                        // ERROR
}

يصبح this من النوع const

يكون this داخل دالة عضو من النوع const مؤشرًا إلى const، لذلك يرفض المصرّف أي محاولة لتعديل الأعضاء.

علّم كل دالة للقراءة فقط باستخدام const

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

التحميل الزائد باستخدام const

يمكنك توفير إصدارين من الدالة، أحدهما من النوع const والآخر غير ثابت؛ ويختار المصرّف الإصدار المناسب بناءً على كون الكائن ثابتًا أم لا.

#include <iostream>
#include <vector>

class Box {
    std::vector<int> v{1, 2, 3};
public:
    int& at(int i) { return v[i]; }              // mutable access
    const int& at(int i) const { return v[i]; }  // read-only access
};

int main() {
    Box b;
    b.at(0) = 99;
    std::cout << b.at(0) << "\n";
}

الكلمة المفتاحية mutable

يمكن لأعضاء mutable التغيّر حتى داخل دالة من النوع const — وهذا مفيد لذاكرات التخزين المؤقت أو العدادات التي لا تُعدّ جزءًا من الحالة المنطقية.

#include <iostream>

class Cache {
    mutable int hits = 0;
    int data = 42;
public:
    int get() const { ++hits; return data; }   // hits is mutable
    int hitCount() const { return hits; }
};

int main() {
    Cache c;
    c.get(); c.get();
    std::cout << c.hitCount() << "\n";
}

const المنطقي مقابل const الفعلي

يحمي const الحالة المنطقية للكائن؛ وتتيح mutable تغيير تفاصيل التنفيذ، مثل ذاكرات التخزين المؤقت، من دون الإخلال بهذا التعهد.

دوال const والمراجع const

لا يمكن لدالة تستقبل const& سوى استدعاء دوال const عليه — وهذا سبب آخر لوضع علامة const على دوال الاستعلام.

#include <iostream>

class Counter {
    int n = 5;
public:
    int value() const { return n; }
};

void report(const Counter& c) {
    std::cout << c.value() << "\n";   // needs value() to be const
}

int main() { Counter c; report(c); }

إرجاع مراجع const

غالبًا ما تعيد دوال الوصول const قيمة من النوع const& لإتاحة الوصول إلى الأعضاء دون السماح بتعديلها أو نسخها.

لا تُزل const باستخدام التحويل

يؤدي استخدام const_cast لتعديل كائن ثابت فعلًا إلى سلوك غير معرّف. استخدم mutable بدلًا من ذلك للاستثناءات المشروعة.

الأصناف الصحيحة من ناحية const

يضع الصنف المصمَّم جيدًا علامة const على كل دالة لا تغيّر الحالة، بحيث يعمل بسلاسة في سياقات const في أنحاء البرنامج.

تحقق سريع

اختبر مدى فهمك لدوال العضو من النوع const.

مراجعة

تعلّمت وضع علامة const على الدوال التي تقتصر على القراءة، وأن الكائنات const لا تستدعي سوى الدوال const، وكيفية إجراء التحميل الزائد اعتمادًا على const، وكيف تتيح mutable تغيير تفاصيل التنفيذ. تجنّب const_cast، وصمّم الأصناف صحيحة من ناحية const منذ البداية.

الأسئلة الشائعة

هل درس «دوال أعضاء const» مجاني؟

نعم — نص درس «دوال أعضاء const» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.

ماذا ستتعلم في «دوال أعضاء const»؟

حدّد الدوال التي للقراءة فقط تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟

لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «دوال أعضاء const»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟

نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. متغيرات ومعاملات const
  2. دوال أعضاء const
  3. constexpr ووقت الترجمة
  4. consteval وconstinit
← العودة إلى C++ Academy