Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

المؤشر 'this'

جزء من قسم Object Oriented Programming في رحلة C++ على Coddy — الدرس 7 من 104.

في لغة C++، يُعد this مؤشراً إلى الكائن الحالي. استخدم this-> للوصول إلى الأعضاء، خاصة عندما تتطابق أسماء المعلمات مع أسماء الأعضاء.

بدون this، يقوم المعامل بحجب العضو

void Player::setName(std::string name) {
    name = name;  // يقوم بتعيين المعامل لنفسه! العضو لم يتغير.
}

استخدام this-> لتعيين القيم بشكل صحيح

void Player::setName(std::string name) {
    this->name = name;  // تعيين المعامل للعضو
}

استخدام this-> في الدوال (methods)

std::string Player::getStatus() {
    return this->name + " - Score: " + std::to_string(this->score);
}

يشير المؤشر this دائمًا إلى مثيل الكائن الحالي. على عكس Java و C# حيث يكون this مرجعًا، فإنه في C++ عبارة عن مؤشر، لذا تستخدم -> بدلاً من . للوصول إلى الأعضاء.

challenge icon

التحدي

متوسط

قم بتنفيذ دوال الفئة Player باستخدام this-> للتمييز بين الأعضاء والمعاملات التي لها نفس الاسم:

  • دوال التعيين (Setter methods): استخدم this-> لتعيين المعاملات للأعضاء
  • getStatus(): استخدم this-> للوصول إلى الأعضاء، وأرجع "<name> - Score: <score>, Level: <level>"

ورقة مرجعية

في لغة ++C، يُعد this مؤشراً إلى الكائن الحالي. استخدم this-> للوصول إلى الأعضاء، خاصةً عندما تتطابق أسماء المعاملات مع أسماء الأعضاء.

بدون this، يحجب المعامل العضو:

void Player::setName(std::string name) {
    name = name;  // يسند المعامل لنفسه! العضو لم يتغير.
}

استخدام this-> لإسناد القيم بشكل صحيح:

void Player::setName(std::string name) {
    this->name = name;  // يسند المعامل للعضو
}

استخدام this-> في الدوال (methods):

std::string Player::getStatus() {
    return this->name + " - Score: " + std::to_string(this->score);
}

يشير المؤشر this دائماً إلى مثيل الكائن الحالي. على عكس لغتي Java و #C حيث يكون this مرجعاً (reference)، فإنه في ++C عبارة عن مؤشر (pointer)، لذا تستخدم -> بدلاً من . للوصول إلى الأعضاء.

جرّب بنفسك

#include <iostream>
#include "Player.h"

int main() {
    std::string name;
    int score, level;
    std::getline(std::cin, name);
    std::cin >> score >> level;
    
    Player player;
    player.setName(name);
    player.setScore(score);
    player.setLevel(level);
    
    std::cout << "Name: " << player.name << std::endl;
    std::cout << "Score: " << player.score << std::endl;
    std::cout << "Level: " << player.level << std::endl;
    std::cout << player.getStatus() << std::endl;
    return 0;
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Object Oriented Programming