سلام!

در جلسه قبلی با مباحث بسیار پایه ای class آشنا شدید. حال این جلسه می خواهیم یکی از مباحث پایه ای (ولی کاربردی) در class یعنی this بپردازیم.

this چیست؟ هر object ای که از یک class می سازیم، یک اشاره گر در خود دارد که آدرس آن، آدرس همان object است. اسم این اشاره گر this است. برای این که با کاربردهای این اشاره گر آشنا شوید، به پاسخ سوال سوم سری قبلی تمرین ها توجه کنید.

#include <iostream>
#include <iomanip> //baraye estefade az setprecision (dar main)

using namespace std;

class Cal{
    private:
        double a, b;
    public:
        void setNums(double, double);

        double getFirstNum();
        double getSecondNum();

        double average();
        double sum();
        double multiply();
        double division();
};

void Cal::setNums(double newA, double newB){
    a = newA;
    b = newB;
}

double Cal::getFirstNum(){
    return a;
}

double Cal::getSecondNum(){
    return b;
}

double Cal::average(){
    return sum() / 2;
}

double Cal::sum(){
    return a + b;
}

double Cal::multiply(){
    return a * b;
}

double Cal::division(){
    return a / b;
}

int main(){
    cout << fixed << setprecision(5) << endl; //ba in kar adad ha ta 5 raghame ashar cout mishavand
    Cal cal;
    cal.setNums(135.562345, 43.144235);
    cout << "Number1: " << cal.getFirstNum() << "\nNumber2: " << cal.getSecondNum() << "\nAverage: " << cal.average() << "\nSum: " << cal.sum() << "\nMultiply: " << cal.multiply() << "\nDivision: " << cal.division() << endl;
    return 0;
}

حال به نسخه ای که با this نوشته شده دقت کنید. احتمالا کاربرد این اشاره گر را متوجه می شوید.

#include <iostream>
#include <iomanip> //baraye estefade az setprecision (dar main)

using namespace std;

class Cal{
    private:
        double a, b;
    public:
        void setNums(double, double);

        double getFirstNum();
        double getSecondNum();

        double average();
        double sum();
        double multiply();
        double division();
};

void Cal::setNums(double a, double b){
    this->a = a;
    this->b = b;
}

double Cal::getFirstNum(){
    return this->a;
}

double Cal::getSecondNum(){
    return this->b;
}

double Cal::average(){
    return this->sum() / 2;
}

double Cal::sum(){
    return this->getFirstNum() + this->getSecondNum();
}

double Cal::multiply(){
    return this->getFirstNum() * this->getSecondNum();
}

double Cal::division(){
    return this->getFirstNum() / this->getSecondNum();
}

int main(){
    cout << fixed << setprecision(5) << endl; //ba in kar adad ha ta 5 raghame ashar cout mishavand
    Cal cal;
    cal.setNums(135.562345, 43.144235);
    cout << "Number1: " << cal.getFirstNum() << "\nNumber2: " << cal.getSecondNum() << "\nAverage: " << cal.average() << "\nSum: " << cal.sum() << "\nMultiply: " << cal.multiply() << "\nDivision: " << cal.division() << endl;
    return 0;
}

اینجا استفاده کردن با استفاده نکردن از this خیلی فرقی نمی کند ولی برای درک مفهوم، این مثال ساده لازم است. مثلا تابع setNums را نگاه کنید. در اینجا با استفاده از this مشخص کرده ایم که منظور از a ای که نوشته ایم همان a ای است که در class وجود دارد نه a ای که به عنوان ورودی به تابع داده شده است.

برای آشنایی بیشتر با this، می توانید تمامی تمارین سری قبلی را با this حل کنید.