مؤشر this والتغليف
استخدم مؤشر this وطبّق التغليف من خلال صلاحيات الوصول private وpublic.
مؤشر this والتغليف درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.
ما المقصود بـ this؟
داخل دالة عضو غير ساكنة، تكون this مؤشّرًا ضمنيًا إلى الكائن الحالي. استخدموها لإزالة الالتباس أو لإرجاع مراجع.
class Counter {
int n_ = 0;
public:
Counter& add(int x) {
n_ += x; // implicit this
return *this; // chain calls
}
};الوصول الضمني
عادةً لا تحتاجون إلى كتابة this->. إذ تُبحث أسماء الأعضاء تلقائيًا، ولذلك فإن this->n_ وn_ متكافئان.
متى تكون this-> مطلوبة؟
استخدموا this-> عندما يحجب وسيطٌ اسمَ عضو، أو عندما تحتاج آلية البحث في القوالب إلى مساعدة للعثور على الأعضاء الموروثة.
class Person {
std::string name_;
public:
void setName(const std::string& name) {
this->name_ = name; // or name_ = name;
}
};إرجاع *this لإتاحة التسلسل
أرجِعوا *this لدعم الواجهات السلسة.
class StringBuilder {
std::string s_;
public:
StringBuilder& append(const std::string& part) {
s_ += part;
return *this;
}
};
StringBuilder sb;
sb.append("Hello, ").append("World!");this في الدوال الثابتة
داخل دالة const، يكون نوع this هو const ClassName*. ولا يمكنكم تعديل الأعضاء من خلالها.
التغليف: الفكرة الأساسية
يعني التغليف إخفاء الحالة الداخلية وإتاحة العمليات الآمنة فقط. اجعلوا البيانات خاصة، وأتيحوا دوال عامة مقصودة.
class Stack {
std::vector<int> data_; // hidden
public:
void push(int v) { data_.push_back(v); }
int pop() { int v = data_.back(); data_.pop_back(); return v; }
bool empty() const { return data_.empty(); }
};لماذا نستخدم التغليف؟
يتيح لكم التغليف ما يلي:
- تغيير التمثيل الداخلي دون كسر الشيفرة التي تستدعيه
- فرض الثوابت في موضع واحد
- التحقق من المدخلات عند الحد الفاصل
- تحليل حالة الكائن محليًا
الواجهة العامة = عقد
الواجهة العامة وعدٌ لمَن يستدعيها. اجعلوها محدودة ومقصودة ومستقرة. واجعلوا تفاصيل التنفيذ خاصة.
دوال الحصول والتعيين
هذا نمط شائع، لكن من السهل الإفراط في استخدامه. تجنّبوا محاكاة كل عضو بدالة get/set، فهذا يلغي التغليف. أتيحوا العمليات بدلًا من الحقول.
صحة const مجددًا
ضعوا const أمام كل دالة للقراءة فقط. وبذلك يعرف مَن يستدعي الدالة أي الدوال آمنة للاستدعاء على الكائنات الثابتة، ويفرض المصرّف ذلك.
الدوال والأصناف الصديقة
تمنح الكلمة المفتاحية friend دالةً أو صنفًا آخر إمكانية الوصول إلى الأعضاء الخاصة. استخدموها باعتدال، لأنها تزيد الاقتران.
class Account {
double balance_;
friend void transfer(Account& a, Account& b, double amount);
};تحقّق سريع
ما نوع this داخل دالة معلنة بالشكل void f() const في الصنف Foo؟
مراجعة
تشير this إلى الكائن الحالي داخل الدوال غير الساكنة. استخدموها للتسلسل، مثل return *this، ولإزالة الالتباس. غلّفوا الحالة باستخدام بيانات خاصة وواجهة عامة صغيرة ومقصودة.
الأسئلة الشائعة
هل درس «مؤشر this والتغليف» مجاني؟
نعم — نص درس «مؤشر this والتغليف» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.
ماذا ستتعلم في «مؤشر this والتغليف»؟
استخدم مؤشر this وطبّق التغليف من خلال صلاحيات الوصول private وpublic. تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟
لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «مؤشر this والتغليف»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟
نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- struct مقابل class: متى تستخدم كلًّا منهما
- متغيرات الأعضاء والطرائق
- المنشئات وقوائم تهيئة الأعضاء
- مؤشر this والتغليف