PDA

View Full Version : دسترسی به اعضای تو در تو



motherboard
شنبه 08 شهریور 1393, 19:59 عصر
واقعا دوستان استقبال بی نظیری رو در رابطه با این تاپیک (http://barnamenevis.org/showthread.php?467113-%D8%A7%DB%8C%D8%A7-%DA%A9%D8%A7%D8%B1-%DA%A9%D8%B1%D8%AF%D9%86-%D8%AF%D8%B1-%DB%8C%DA%A9-%DA%AF%D8%B1%D9%88%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D9%86%DB%8C%D8%A7%D8%B2-%D8%A8%D9%87-%D8%AF%D8%A7%D8%B4%D8%AA%D9%86-%D9%85%D8%AF%D8%B1%DA%A9-%D8%B1%D8%B4%D8%AA%D9%87-%DA%A9%D8%A7%D9%85%D9%BE%DB%8C%D9%88%D8%AA%D8%B1-%D8%A7%D8%B3%D8%AA%D8%9F) کردند.:چشمک:
من یک چیزی رو تو سی پلاس پلاس متوجه نمیشم.شما پارامتر های زیر رو تابع فرض کنید(البته به جز عبارت a)
الان این کد زیر رو برام ترجمه کنید.

a->A->B->C->D->E

motherboard
شنبه 08 شهریور 1393, 21:15 عصر
یک بزرگواری بیاد جواب ما رو بده. :افسرده: دعا می کنم که سال تحصیلی جدید رو با موفقیت و با نمرات 20 پشت سر بگذاره.

مسعود اقدسی فام
یک شنبه 09 شهریور 1393, 00:01 صبح
واقعا دوستان استقبال بی نظیری رو در رابطه با این تاپیک (http://barnamenevis.org/showthread.php?467113-%D8%A7%DB%8C%D8%A7-%DA%A9%D8%A7%D8%B1-%DA%A9%D8%B1%D8%AF%D9%86-%D8%AF%D8%B1-%DB%8C%DA%A9-%DA%AF%D8%B1%D9%88%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D9%86%DB%8C%D8%A7%D8%B2-%D8%A8%D9%87-%D8%AF%D8%A7%D8%B4%D8%AA%D9%86-%D9%85%D8%AF%D8%B1%DA%A9-%D8%B1%D8%B4%D8%AA%D9%87-%DA%A9%D8%A7%D9%85%D9%BE%DB%8C%D9%88%D8%AA%D8%B1-%D8%A7%D8%B3%D8%AA%D8%9F) کردند.:چشمک:
من یک چیزی رو تو سی پلاس پلاس متوجه نمیشم.شما پارامتر های زیر رو تابع فرض کنید(البته به جز عبارت a)
الان این کد زیر رو برام ترجمه کنید.

a->A->B->C->D->E


دقیق متوجه نشدم.



a->A()->B()->C()->D()->E()


یه همچین عبارتی منظورتونه که a یه شی دلخواه هست؟

motherboard
یک شنبه 09 شهریور 1393, 00:09 صبح
بله.در واقع a یک اشاره گر به شی دلخواه هست که حالا اومده با اون فلش به اولین عضو دسترسی پیدا کرده.اما چیزی رو که نمی فهمم اینه که این فلش ها برای عضو های بعدی چه طور رفتار می کنه؟ الان a به A دسترسی پیدا کرده.اما نمیدونم برای توابع بعدی چه اتفاقی میفته و کلا می خوام بدونم a با چه روندی به اون توابع دسترسی پیدا می کنه و چون پشت سر هم اومدند نمیدونم که چه اتفاقی میفته؟

omid_kma
یک شنبه 09 شهریور 1393, 00:29 صبح
a->A()->B()->C()->D()->E()


میشه معادله


( ( ( ( ( a->A() )->B() ) ->C() ) ->D() )->E() )

بترتیب از پرانتز داخل به بیرون اجرا میشن a->A یک شی از یک کلاس بر میگردونه بعد روی این شی ما ->B رو صدا میزنیم که یک شی از یک کلاس دیگه برگشت میده و ....

این مثال رو ببین :

class A
{
public:
B* foo(){
return new B;
}
};
class B
{
public:
A* bar(){
return new A;
}
};
int main()
{
A *a=new A;
a->foo()->bar()->foo()->bar()->foo();//...
}

a-> foo یک شی از B برمیگردونه بعد روی این شی bar رو صدا میزنیم که یک شی از A برمیگردونه بعد دو باره foo و همین طور میشه تا بی نهایت این کارو ادامه داد
اون عبارت زنجیرواری هم که نوشتی به همین شکل کار می کنه .

مسعود اقدسی فام
یک شنبه 09 شهریور 1393, 00:37 صبح
بله.در واقع a یک اشاره گر به شی دلخواه هست که حالا اومده با اون فلش به اولین عضو دسترسی پیدا کرده.اما چیزی رو که نمی فهمم اینه که این فلش ها برای عضو های بعدی چه طور رفتار می کنه؟ الان a به A دسترسی پیدا کرده.اما نمیدونم برای توابع بعدی چه اتفاقی میفته و کلا می خوام بدونم a با چه روندی به اون توابع دسترسی پیدا می کنه و چون پشت سر هم اومدند نمیدونم که چه اتفاقی میفته؟

این یه کد نمونه‌ی دیگه:


#include<iostream>
class Something
{
public:
Something* A()
{
std::cout << "Here is A" << std::endl;
return this;
}
Something* B()
{
std::cout << "Here is B" << std::endl;
return this;
}
Something* C()
{
std::cout << "Here is C" << std::endl;
return this;
}
Something* D()
{
std::cout << "Here is D" << std::endl;
return this;
}
void E()
{
std::cout << "Here is E" << std::endl;

}
};
int main()
{
Something *a;
a->A()->B()->C()->D()->E();
return 0;
}


مساله اینجاست که چون توابع A تا D‌ بعدش<- اومده، پس حتما خروجی از نوع اشاره‌گر دارن. خروجی A باید یه شی باشه که تابع B‌ داشته باشه و خروجی B‌ باید به نحوی باشه که شی خروجی تابع C داشته باشه و الی آخر. E بر اساس این کد لازم نیست چیزی رو برگشت بده. چون صرفا فراخوانی شده. من اینجا همه‌ی خروحی‌ها را از کلاسی Something‌گرفتم که هر پنج تا تابع رو داره.