دوال أعضاء 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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- متغيرات ومعاملات const
- دوال أعضاء const
- constexpr ووقت الترجمة
- consteval وconstinit