View Full Version : سوال: this چیست و طرز استفاده از آن چگونه است؟
zidom72
دوشنبه 24 مرداد 1390, 23:20 عصر
سلام
من در مورد this سوال دارم من کلا کاربرد اینو نمی فهمم یکی اینو تو ضیح می ده مخصوصا وفتی در یه تابعی آخرش می نویسیم return *this نمیفهمم یعنی چی
simul8or
پنج شنبه 27 مرداد 1390, 01:36 صبح
شاید تالار مناسبی رو انتخاب نکردید، به هر حال پاسخ می دهم، هر چند در نت هم توضیح داده شده.
تعریف ساده: اشاره گر به خود کلاس است.!!
توضیح:
فرض کن ما یه کلاس داریم به اسم kasr.
هر کسری یه صورت داره و یه مخرج پس دو متغییر sorat و makhraj رو به کلاس اضافه می کنیم.
همچنین یه تابع به اسم kasr& add(kasr&) این تابع یه شی از نوع kasr رو به عنوان ورودی میگیره و با شی kasr که این تایع رو فراخوانی کرده جمع می کنه. تا اینجا اینا رو داشته باش.
حالا در تابع main برنامه:
kasr a,b,c
3 شی از نوع کسر ساختیم، اگر بنویسیم:
c=a.add(b);
چه اتفاقی می افتد:
صورت و مخرج kasr b با صورت و مخرج kasr a جمع میشود و در kasr a ذخیره می شود. حالا باید تابع add ازکلاس a چه چیزی را برگرداند؟؟؟ خودش را دلیل کاملا واضح است، چون جمع در خود kasr a ذخیره شده است، اما kasr c باید مقدار دهی شود، که این مقدار چیزی جز خود مقدار kasr a نیست.
میتوانید تست کنید:
فایل MyClass.h
class kasr
{
private:
int sorat;
int makhraj;
public:
kasr(void);
~kasr(void);
kasr& add(kasr&);
};
فایل MyClass.cpp
#include<iostream>
#include "MyClass.h"
using namespace std;
kasr::kasr()
{
this->sorat=5;
this->makhraj=10;
}
kasr& kasr::add(kasr& k)
{
this->sorat+=k.sorat;
this->makhraj+=k.makhraj;
return *this;
}
kasr::~kasr()
{
}
فایل main.cpp
#include<iostream>
#include <cstdlib>
#include "MyClass.h"
using namespace std;
int main()
{
system("color 1F");
kasr a,b,c;
c=a.add(b);//put a break point here
system("pause");
return 0;
}
zidom72
پنج شنبه 27 مرداد 1390, 19:30 عصر
من الان مشکلم اینه که این برنامه رو می شه اینجوریم نوشت پس this چه ویژگی داره که گذاشتنش کاربرد return *this رو فهمیدم اما اون یکی this ها رو به نظرم اضافیه یعنی می شه استفاده نکرد چه وقت لازم از اونا استفاده کرد
#include<iostream>
#include <cstdlib>
using namespace std;
class kasr
{
private:
int sorat;
int makhraj;
public:
kasr(void);
~kasr(void);
kasr& add(kasr&);
};
kasr::kasr()
{
sorat=5;
makhraj=10;
}
kasr& kasr::add(kasr& k)
{
sorat+=k.sorat;
makhraj+=k.makhraj;
return *this;
}
kasr::~kasr()
{
}
int main()
{
system("color 1F");
kasr a,b,c;
c=a.add(b);//put a break point here
system("pause");
return 0;
}
zidom72
پنج شنبه 03 شهریور 1390, 12:59 عصر
101 مشاهده بدون پاسخ؟
simul8or
جمعه 01 دی 1391, 18:44 عصر
101 مشاهده بدون پاسخ؟
با سلام. پست بسیار قدیمی است، اما تازه مطلب را مشاهده کردم.
بحث OOP نیاز به تمرین دارد، this یک اشاره گر ساده است، هرجا نیاز به استفاده از آدرس کلاس جاری داشتید میتوانید از آن استفاده کنید.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.