دستورات (new و delete) در ++C (قسمت دوم)

سلام.

اومدم با یه پست دیگه ولی با یکم تاخیر.?

خب اول کاری بگم که پیش نیاز این آموزش قسمت قبلیش هست و میتونی از لینک زیر بهش دسترسی پیدا کنی.

دستورات (new و delete) در ++C (قسمت اول)

با توجه به اینکه قسمت بالا رو خوندی و خوب تمرینش کردی و یاد گرفتی میریم سراغ ادامه داستان.

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

حالا سوال پیش میاد که آیا میتونیم اون حافظه پویا رو به مجموعه(آرایه) ای از یه نوع داده دلخواه اختصاص بدیم؟؟؟

پاسخ بله هست .

خوب حالا چطور؟؟؟

کافیه به قطعه کد زیر یه سرک بکشی تا ببینی کار از چه قراره:

کد بالا دقیقا میاد یه آرایه با طول ده تا از نوع داده عدد صحیح به ما میده و بعد میتونیم همه کار باهاش بکنیم.

قطه کد پایین هم میاد حافظه ای رو که اختصاص داده به این آرایه رو پس میگیره:

و این رو هم بگم که خوشبختانه میتونید این آرایه پویا رو در زمان تعریف مقدار دهی اولیه هم بکنید.

برای این کار باید مثل قطه کد زیر عمل کنید:

فکر نکنم تا اینجای کار چیز خیلی خفنی گفته باشم که نشه درکش کرد.

ولی برای اینکه حجت تمام بشه به دو تا مثال زیر خوب دقت کنید که دیگه این مبحث رو کامل یاد گرفته باشید:

برنامه اول:

خروجی:

برنامه دوم:

خروجی:

تا اینجای کار ما فقط روی داده های عددی کار کردیم و این رو هم بگم بهتون که ما محدود به داده های عددی نیستیم و میتونیم از داده های مشتق شده مثل کلاس ها ، ساختار ها و ... هم برای اختصاص حافظه پویا استفاده کنیم.

برای نمونه میریم سراغ نوع مشتق شده ی کلاس تا ببنیم کار از چه قراره:


خب همونطور که تو کد بالا میبینید ما یه کلاس شخص داریم که سه تا ویژگی نام کامل ، سن و جنسیت رو درون خودش داره.

برای این که ما یه نمونه ی عادی از این کلاس ایجاد کنیم کافیه به روش زیر عمل کنیم:

خب حالا سوالی که پیش میاد اینه که برای ایجاد یک نمونه ی پویا از این کلاس باید چیکار بکنیم؟؟؟

تو قطعه کد بالا ما اومدیم یک نوع پویا از کلاس شخص ایجاد کردیم و برای پس گرفتن این حافظه هم کافیه به روش زیر عمل کنیم:

  • و این رو بهتون بگم شما برای دسترسی به اعضا یک نوع مشتق شده مثل کلاس یا ساختار و ... نمیتونید از عملگر (.) استفاده کنید و باید بجای اون از عملگر (<-) استفاده کنید.


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

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

برای دسترسی به اعضا و مقدار دهی هر خونه از آرایه که خودش یه کلاس هست میتونیم به دو روش زیر عمل کنیم که هیچ تفاوتی در خروجی ندارن:

روش اول:

روش دوم:

و در آخر هم برای پس گرفتن این حافظه کافیه به همون روش های قبلی که در کد زیر هست عمل کنید:

اینم از این بخش که به پایان رسید و نیاز به مثال هم نیست چون همه چی کامل و واضحه.


یه چند تا نکته ای ریز و میمونه که یکم حرفه ای هست بحثش و صلاح نمیدونم تو این پست بگنجونمش.

اگه دوست دارید که بخش پایانی رو هم داشته باشیم تو قسمت کامنت ها بیان کنید.


منتظر لایک ها و نظراتتون هستم.

تا آموزش بعدی بدرود.