آژانس هواپیماییexchanging

سوال درباره سازند ها و مخرب ها در c++

شروع موضوع توسط hossein_asp ‏13 ژانویه 2008 در انجمن خانواده C++ , C

  1. hossein_asp

    hossein_asp کاربر تازه وارد

    تاریخ عضویت:
    ‏31 مارس 2005
    نوشته ها:
    637
    تشکر شده:
    0
    محل سکونت:
    جایی که خدا نباشد
    آقا کسی هست یه مثال ساده از سازنده و مخرب در کلاس ها در c++ به من بده؟
     
  2. NdR

    NdR Registered User

    تاریخ عضویت:
    ‏10 مارس 2004
    نوشته ها:
    86
    تشکر شده:
    0
    کد:
    #include <iostream>
    #include <string>
    
    class X {
    public:
        X() : val(0) { std::cout << "X: default constructor\n";}
    
        X(const std::string& s, int i) : str(s), val(i) { std::cout << "X: constructor\n";}
    
    private:
        std::string str;
        int val;
    };
    
    class Y {
    public:
        Y() : ptr(0) { std::cout << "Y: default constructor\n";}
    
        Y(int size) { ptr = new int[size]; std::cout << "Y: constructor\n";}
    
        ~Y() { delete[] ptr; std::cout << "Y: destructor\n";}
    
    private:
        int* ptr;
    };
    
    int main()
    {
        X x("C++", 9);
    
        Y y(5);
    }
    
     
  3. hossein_asp

    hossein_asp کاربر تازه وارد

    تاریخ عضویت:
    ‏31 مارس 2005
    نوشته ها:
    637
    تشکر شده:
    0
    محل سکونت:
    جایی که خدا نباشد
    ممنون دستت درد نکنه :)
     
  4. hossein_asp

    hossein_asp کاربر تازه وارد

    تاریخ عضویت:
    ‏31 مارس 2005
    نوشته ها:
    637
    تشکر شده:
    0
    محل سکونت:
    جایی که خدا نباشد
    امکانش هست مثلا کلاس x رو یه توضیح بدی؟

    این تغییرات من تا در c++ تحت ویندوز 5 کارکنه:

     
  5. NdR

    NdR Registered User

    تاریخ عضویت:
    ‏10 مارس 2004
    نوشته ها:
    86
    تشکر شده:
    0
    یک کلاس میتونه بر حسب نیاز تعدادی سازنده داشته باشه. سازنده ها هم اسم کلاسشون هستن.
    اینجا کلاس X دو تا سازنده داره و دو تا متغیر، سازنده اول بدون پارامتر هست که بهش میگن (default constructor)
    تو این سازنده مقادیر پیش فرض به متغیر ها داده میشه و کار ها بر اساس پیش فرض ها انجام میشه.
    سازنده دوم هم که مقادیر لازم رو میگیره و متغیر ها رو مقدار دهی می کنه.
    این متغیر ها رو می شد در بدنه تابع سازنده هم مقدار دهی کرد ولی اینجا اونها در هنگام بوجود اومدن مقدار میگیرن
    (initialization) در حالی که در بدنه تابع assignment صورت میگیره.
    این کلاس نیاز به destructor نداره. در واقع string و int مخرب خودشونو دارن.​
     
  6. NdR

    NdR Registered User

    تاریخ عضویت:
    ‏10 مارس 2004
    نوشته ها:
    86
    تشکر شده:
    0
    در مورد کلاس Y:
    یه تکنیکی هست به اسم resource acquisition is initialization یا RAII
    یعنی منابع کلاس رو در سازنده اختصاص میدی و در مخرب آزاد میکنی.
    این طوری کد کمتری نوشته میشه و احتمال اینکه برنامه نویس آزاد کردن منبعی رو فراموش کنه هم از بین میره.
     
  7. appbannerkhuniresbanner
  8. hossein_asp

    hossein_asp کاربر تازه وارد

    تاریخ عضویت:
    ‏31 مارس 2005
    نوشته ها:
    637
    تشکر شده:
    0
    محل سکونت:
    جایی که خدا نباشد
    حل شد.فکر میکنم این مثالی که خودم نوشتم معنای سازنده و مخرب رو بسیار روشن نشون میده:

    PHP:
    #include <iostream.h>
    class nini{
     public:
       
    nini();
      ~
    nini();
     
    int mult(int,int);
     private :
      
    int a;
      
    int b;
    };
    nini::nini()
    {
    cout<<"Hi! Object is Created...";
    }
    nini::~nini()
    {
    cout<<"Bye! Object is Deleted..."cin.get();
    }
    int nini::mult(int a,int b)
    {
     return 
    a*b;
    }
    int main()
    {
    nini ob;
    cout<<"\n\n "<<ob.mult(10,10)<<"\n";
    cin.get();
    return 
    0;
    }