خوراک پی سی کدنویس

ورود کاربران

آمار سایت

اعضا : 380
محتوا : 74
پیوندها : 6
بازدیدهای محتوا : 217807

حاضرین در سایت

 29 مهمان حاضر

برای نمایش بهتر سایت، از مرورگر استاندارد فایرفاکس استفاده کنید! مرورگر اینترنت اکسپلورر متعلق به دهه گذشته است!

firefox icon

Valid XHTML 1.0 Transitional Valid CSS!

مطالعه موردی کلاسها: آرایه پویا

1 امتیاز
می خواهیم یک کلاس آرایهی پویا از نوع byte ایجاد کنیم که خودش مدیریت حافظه را به صورت داخلی انجام میدهد و توابعی برای تعیین مقادیر المانهای آرایه و گرفتن آنها دارد. همچنین دو تابع کمکی دیگر دارد که یکی مقادیر آرایه را با اعداد تصادفی پر کرده و دیگری مقادیر آرایه را چاپ میکند.

تعریف این کلاس در لیست زیر آمده است:

 
typedef unsigned char byte;
class SmartArray{
public:
   //Default constructor
   SmartArray(){
      init();
   };
   //Another constructor
   SmartArray(int length, bool initialize = false, byte initVal = 0)
   {
      init(length, initialize, initVal);
   };
   //A member function to initialize array
   bool init(int length = 0, bool initialize = false, byte initVal = 0){
      assert(length >= 0);
      if(length <= 0){
         this->length = 0;
         pData = NULL;
         return true;
      }
      this->length = length;
      pData = new byte[length];
      if(initialize){
         for (int i = 0; i < length; i++)
            pData[i] = initVal;
      }
      return true;
   };
   //The only destructor
   ~SmartArray()
   {
      if(pData){
         length = 0;
         delete [] pData;
         pData = NULL;
      }
   };
   //A member function to access array elements
   byte get(int i){
      assert(pData);
      assert(length > i && i > -1);
      if(!pData || length <= i || i < 0)
         return 0;
      return pData[i];
   }
   //A member function to change array elements
   bool set(int i, byte b)
   {
      assert(pData);
      assert(length > i && i > -1);
      if(!pData || length <= i || i < 0)
         return false;
      pData[i] = b;
      return true;
   }
 
   bool RandomFill()
   {
      srand(time(0));
      for(int i = 0; i < length; i++)
         pData[i] = rand() % 256;
      return true;
   }
   void print(int idx0 = 0, int idx1 = -1)
   {
      idx0 = max(0, idx0);
      idx1 = min(length-1, idx1);
      if(idx1 < 0)
         idx1 = length-1;
      printf("The array contains:\n");
      for (int i = idx0; i <= idx1; ++i)
      {
         printf("[%d]: %.3d\n", i, pData[i]);
      }
   }
private:
   byte* pData;
   int length;
};
 

این کلاس دو متغیر خصوصی دارد، یکی pData که اشارهگری از نوع byte است و آدرسی است که اطلاعات (المانهای آرایه) در آنجا ذخیره خواهد شد. متغیر دوم length است که طول آرایه را در خود نگه خواهد داشت. یک تابع init تعریف کردهایم که طول آرایه را از کاربر میگیرد و همچنین دو پارامتر به منظور مقداردهی اولیه المانهای آرایه دریافت میکند؛ یکی متغیرinitialize که از نوع bool است و مشخص میکند که آرایه باید مقداردهی اولیه بشود یا خیر و دومی متغیر initVal است که تنها در صورتی موثر است که متغیر قبلی true باشد. این متغیر ورودی، تعیین کننده مقداری است که باید در تمام المانهای آرایه به عنوان مقدار اولیه قرار گیرد. در این تابع تخصیص حافظه به کمک عملگر new انجام شده و طول آرایه در متغیر length ذخیره میشود. تابع assert که در اینجا دیده میشود تنها در هنگام کامپایل برنامه به صورت دیباگ عمل میکند و کار آن هشدار دادن به برنامه نویس است؛ به این ترتیب که اگر پارامتر آن صحیح نباشد پیغام هشداری به برنامه نویس خواهد داد. از این قابلیت در حین توسعه برنامه و در مد Debug استفاده میشود و در نسخهی نهایی که به صورت Release کامپایل خواهد شد این دستور تاثیری ندارد.
تابع get به منظور دسترسی به المانهای آرایه تعبیه شده است، چرا که متغیر pData خصوصی تعریف شده و دسترسی به آن از بیرون کلاس ممکن نیست. لذا وجود چنین تابعی لازم است. در مقابل تابع set برای تغییر مقادیر عناصر آرایه ایجاد شده است.

تابع RandomFill آرایه را با مقادیر تصادفی بین 0 و 255 پر میکند و تابع print محتویات آرایه را روی کنسول نمایش میدهد. این کلاس یک تابع مخرب هم دارد که مسئولیت آن آزادسازی حافظهی اشغال شده توسط pData است.

این برنامه قبلا در قالب مثال نهم Exam_09 در سایت قرار داده شده است. آن را دانلود کرده و نحوه استفاده آن را ببینید.

  • fardin
    avatar
    azat vaghean motshakeram.omid varam too tamame marahele zendegit movafagh bashi dooste aziz
  • مهدی  - کمک
    avatar
    سلام. خواهش میکنم برام کلاس آرایه با پیاده سازی پویاو پیوسته.ایستاو پیوسته یا پویا پیوندی بنویسین.ممنونم
  • مهدی  - کمک
    avatar
    ببخشید با c++
  • مدیر سایت
    avatar
    قبلا نوشته شده است. در همین سایت SmartArray را جستجو کنید.
  • سایه
    avatar
    سلام میشه خواهش کنم مبحث بارگذاری مجدد عملگر ها رو نیز آموزش بدین
    متشکرم
اظهار نظر
مشخصات شما:
گراواتار enabled
نظر:
[b] [i] [u] [url] [quote] [code] [img]   
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch::(:shock:
:X:side::):P:unsure::woohoo::huh::whistle:;):s:!::?::idea::arrow:
امنیت
کد آنتی اسپم نمایش داده شده در عکس را وارد کنید.