نمایش نتایج 1 تا 5 از 5

نام تاپیک: تفاوت متود استاتیک یک کلاس با سایر متد ها از نظر تخصیص حافظه

  1. #1
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    تیر 1388
    پست
    143

    Lightbulb تفاوت متود استاتیک یک کلاس با سایر متد ها از نظر تخصیص حافظه

    سلام
    علاوه بر سوال بالا می خواستم بدونم دستورات متد های غیر استاتیک به ازای هر نمونه از کلاس کپی می شند ؟

  2. #2
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    38
    پست
    1,491

    نقل قول: تفاوت متود استاتیک یک کلاس با سایر متد ها از نظر تخصیص حافظه

    در سی++ بجای متود (Method) از اصطلاح «تابع عضو (Member function)» استفاده می‌شود.

    تنها تفاوتی که تابع عضو غیر استاتیک (متود غیر استاتیک) با تابع عضو استاتیک (متد استاتیک) دارد در این است که تابع عضو غیر استاتیک بطور ضمنی یک آرگومان اضافه‌تر دارد (بدون دخالت برنامه‌نویس).


    class X
    {
    public:
    void xxx();
    static void yyy();
    };
    تابع xxx و yyy توسط کامپایلر بصورت زیر مورد استفاده قرار می‌گیرند:
    void xxx(X* this);
    void yyy();
    و در تابع xxx برنامه‌نویس توسط کلمهٔ کلیدی this به پارامتر اول دسترسی دارد که همان شیئ کلاس است. بنابراین در بدنهٔ تابع xxx (که غیر استاتیک است) می‌توان از شیئ this استفاده کرد اما در تابع yyy (که استاتیک است) نمی‌توان.

    در کل، توابع عضو غیر استاتیک و توابع عضو استاتیک و توابع غیر عضو (global) همگی به یک صورت هستند و هیچیک به لحاظ overhead (سربار اضافه) نسبت به دیگری برتری ندارند.

    علاوه بر سوال بالا می خواستم بدونم دستورات متد های غیر استاتیک به ازای هر نمونه از کلاس کپی می شند ؟
    با توجه به توضیح بالا، جواب منفی است. با توجه به مثال قبل، برنامه‌نویس توسط کلمهٔ کلیدی this در تابع xxx می‌تواند به شیئ کلاس دسترسی داشته باشد، در نتیجه آن چیزی که به ازای هر نمونه از کلاس ایجاد می‌شود، پارامتر اول با نام this است ولی تابع عضو غیر استاتیک، همواره یکی است (به این خاطر است که به لحاظ کارآیی، استفاده از توابع عضو هیچگونه اثر مخربی ندارند).

  3. #3
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    تیر 1388
    پست
    143

    نقل قول: تفاوت متود استاتیک یک کلاس با سایر متد ها از نظر تخصیص حافظه

    ممنون.
    می شه درمورد تفاوت بکار بردن یا نبردن this پشت اعضای یک کلاس میان دستورات «تابع عضو (Member function)» هم توضیح بدید .

  4. #4
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    38
    پست
    1,491

    نقل قول: تفاوت متود استاتیک یک کلاس با سایر متد ها از نظر تخصیص حافظه

    می شه درمورد تفاوت بکار بردن یا نبردن this پشت اعضای یک کلاس میان دستورات «تابع عضو (Member function)» هم توضیح بدید .
    در بدنهٔ «توابع عضو» می‌توان بطور ضمنی به اعضای کلاس دسترسی داشت. در صورت استفاده از this، بطور صریح برای کامپایلر مشخص می‌شود که دسترسی به «متغیر عضو» مد نظر بوده است نه «متغیر محلی»:


    class X
    {
    int xxx;

    public:

    int abc()
    {
    int xxx = 5;
    this->xxx = 10; //xxx value is still 5
    return xxx; //returns 5
    }
    };

  5. #5

    نقل قول: تفاوت متود استاتیک یک کلاس با سایر متد ها از نظر تخصیص حافظه

    this یک اشاره گری است که به آبجکت فعلی کلاس (در حال فراخوانی ) اشاره میکند !
    همانطور که میدانیم در ارجاع به آبجکت و اشاره گر به آبجکت ، جهت دسترسی به توابع عضو باید از
    عملگر <- استفاده شود ./
    یه مثال ساده نوشتم واسه واضحتر شدن مساله :


    #include <iostream>
    #include <conio>
    class A{
    private:
    int x;
    public:
    A(){x=0;}
    A(int a){x=a;}
    A Square();
    A Cube();
    void print(){cout<<x<<endl;}
    };
    //=============
    A A::Square(){
    A obj;
    obj.x = (this->x * this->x);
    return obj;}
    //=============
    A A::Cube(){
    A obj;
    obj.x = ((*this).x * (*this).x * (*this).x);
    return obj;}
    //=============
    int main(){
    A obj1(6);
    obj1.Square().print();//out =36;
    obj1.Cube().print();//out = 216
    getch();
    }






قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •