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

ورود کاربران

آمار سایت

اعضا : 135
محتوا : 67
پیوندها : 6
بازدیدهای محتوا : 58443

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

 42 مهمان حاضر

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

firefox icon

Valid XHTML 1.0 Transitional Valid CSS!

کلاسها در ++C: بخش دوم نحوه تعریف کلاس

2 امتیاز

نحوهی تعریف کلاس

برای تعریف یک کلاس، از کلمهی کلیدی class استفاده میکنیم به صورت زیر:
 
class CRect{
public:
   CRect()//default constructor
   {
      top = left = right = bottom = 0;
   };
   CRect(int t, int l, int r, int b) //A better constructor
   {
      top = t;
      left = l;
      right = r;
      bottom = b;
   };  
 
   ~CRect(){};//default destructor
 
   void ShowCoord()//A member function
   {
      std::cout << "(top, left): (" << top << "," << left << ")\n";
      std::cout << "(bottom, right): (" << bottom << "," << right << ")\n";
   }
 
   int top, left, right, bottom; //Member variables
};
 

پس از کلمه کلیدی class، نام کلاس می‌آید که در مثال فوق، اسم CRect را انتخاب کردهایم. گذاشتن حرف C سنتی است که در visual c++ مرسوم است و برای انواع دادهای کلاس استفاده میشود؛ البته اختیاری است.
کلمهی کلیدی public سطح دسترسی را تعیین میکند و به معنی بیشترین سطح دسترسی به متغیرها و توابع کلاس است. بعدا در این مورد بیشتر صحبت خواهیم کرد. پس از این کلمه کلیدی، به ترتیب دو تابع سازنده ، یک تابع مخرب ، یک تابع عضو برای نمایش مختصات مستطیل و چهار متغیر برای نگهداری مختصات معرفی شدهاند. در ادامه به تعریف آنها میپردازیم.

توابع سازنده و مخرب

هر کلاس میتواند تعدادی تابع سازنده و یک تابع مخرب داشته باشد. تابع سازنده، مسئول مقداردهی متغیرهای عضو کلاس برای اشیاء جدید است. از سوی دیگر تابع مخرب، مسئول تخریب شیء ایجاد شده است. معمولا مهمترین کار تابع مخرب، آزادسازی حافظههایی است که احتمالا به شیء تخصیص پیدا کرده است. لذا اگر متغیری که حافظه مصرف کند نداشته باشیم، غالبا نیازی به پیاده سازی تابع مخرب نداریم. تابع سازنده باید همنام اسم کلاس باشد، در مثال فوق دو تابع سازنده تعریف کردهایم که یکی هیچ پارامتری نمیگیرد و دیگری مختصات چهارگانه را از کاربر میگیرد. همچنین یک تابع مخرب تعریف کردهایم که هیچ کاری انجام نمیدهد. تابع مخرب نیز همنام کلاس است با این تفاوت که یک علامت ~ قبل از آن قرار دارد.

سوالی که احتمالا برایتان پیش آمده، این است که چرا یک کلاس میتواند چندین تابع سازنده داشته باشد لیکن فقط یک تابع مخرب باید داشته باشد؟ برای روشن شدن موضوع بهتر است مثالی از دنیای واقعی بزنیم: یک لیوان شیشهای به طرق و اشکال مختلف قابل ساخت است، لیکن برای از بین بردن هر لیوانی تنها کافیست آن را به یک کودک بسپاریم! کلکش ساخته است و نیازی به مخرب دیگری نیtwست. البته خود شما هم میتوانید آن را به گوشهای پرت کنید و صدای خرد شدن آن را گوش کنید. باز هم لیوان تخریب خواهد شد. راه سوم هم این است که آن را ذوب و یا حتی تبخیر کنید (اگر مسافران فضایی باشید!). پس راههای بسیار زیادی برای تخریب وجود دارد که هر کدام از آنها به تنهایی کفایت کرده و عمر شیء مذکور را به پایان میرساند. بنابراین هیچ نیازی به داشتن چندین مخرب نداریم.

متغیرهای عضو

هر کلاس تعدادی متغیر دارد که ویژگیها و خواص آن کلاس را بیان میکنند. در مثال فوق، کلاس CRect چهار متغیر عضو دارد که بیانگر مختصات بالا، چپ، پایین و راست مستطیل هستند. در مقالات گذشته دیدیم که متغیرهای معمولی را میتوانیم در زمان تعریف مقدار دهی اولیه کنیم، لیکن متغیرهای عضو کلاس را نمی-توانیم در زمان تعریف مقداردهی اولیه کنیم؛ لذا تعریف زیر اشتباه است:
 
class CRect{
public:
   //...
   //Initialization is not possible 
   int top = 0, left = 0, right = 0, bottom = 0;//ERROR
};
 

خوب پس چاره چیست؟ بهترین راه برای مقداردهی اولیه متغیرهای عضو کلاس، استفاده از تابع سازنده است که اصولا به همین منظور به وجود آمده است. دقت کنید که اگر یکی از متغیرهای عضو کلاس، یک اشارهگر است که در تابع سازنده یا تابع دیگری از کلاس، با استفاده از عملگر new حافظهای را گرفته است، حتما باید با استفاده از عملگر delete، در تابع مخرب آزاد شود.

توابع عضو

توابعی که در کلاس تعریف میکنیم، قابلیتهای آن کلاس هستند. در مثال سادهای که مطرح کردهایم، تنها یک تابع عضو داریم که مشخصات مستطیل را چاپ میکند.

در مقالات بعدی، نحوه تولید اشیاء و استفاده از توابع و متغیرهای عضو کلاس را بیان خواهیم کرد.

  • farhad  - Help!
    با سلام
    من خواهشی از شما داشتم این بود که درباره توابع سازنده ومخرب اگه ممکن هست چند مثال با توضیحات ذکر کنید ممنون می شم با تشکر از زحمات شما
  • مدیر سایت
    توابع سازنده و مخرب چیز خاصی ندارد. سازنده تابعی همنام کلاس است که غالبا مقداردهی اولیه متغیرهای کلاس را انجام می دهد مثلا در همین مثالی که در بالا ذکر شده دو تابع سازنده دیده می شود که هر کدام به شکلی متغیرهای کلاس را مقدار اولیه می دهد، یکی از کاربر می گیرد و دیگری همه متغیرها را با صفر پر می کند.
    تابع مخرب هم تنها یکی است که باز هم همنام کلاس است و فقط یک ~ اولش دارد. غالبا آزادسازی حافظه در آن صورت می گیرد. اگر حافظه ای به متغیرهای کلاس تخصیص نداده اید، می توانید اصلا مخرب ننویسید.
  • roksan
    kasah ye chanta mesale bishtar mizadin ke kameltar beshe va qabele fahm tar beshe. :0 :( :(
  • miti
    این مثال بالایی فقط کلاس را تعریف می کنه یا کار دیگه ای هم انجام می ده؟ :?: :?:
  • مدیر سایت
    فقط کلاس را تعریف می کند!
  • miti
    می شه مثالی بزنید که علاوه بر تعریف کلاس عملی را هم انجام بده؟
  • miti
    اگه ممکنه نحوه ی استفاده ی کلاسها را هم توضیح بدید.(توضیح متنی)
  • miti  - کتابخانه
    کتبخانه های اصلی مورد نیاز برای رسم اشکال گرافیکی در C++ را همراه با مهمترین توابع آن توضیح بدید.
اظهار نظر
مشخصات شما:
نظر:
[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:
امنیت
کد آنتی اسپم نمایش داده شده در عکس را وارد کنید.