سلام
سوال تان از این بابت خوب است که نشان میدهد میخواهید بفهمید و این خیلی دلگرم کننده است.
برای آنکه بتوانید با یک کلاس کار کنید، در هر صورت باید یکجایی new شود.
مورد اول که واضح است و خودتان آن را new کرده اید، پس می ماند دو شکل بعدی نمونه سازی...
درواقع new همیشه وجود دارد، فقط شاید برخی موارد داخل یک تابع انجام شود.
اجازه دهید مثالی بزنم.
یک کلاس برای اعداد کسری می سازیم با دو متغییر برای اعداد صورت و مخرج.
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این کلاس را با همچین کدی میتوان new کرد:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا من میخواهم یک تابعی بنویسم که بتواند دو کسر را جمع کند، چه باید انجام دهم؟ چطور بنویسم؟ بگانم این کد مناسبی است:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خوب چطور باید استفاده کرد؟ طبیعتاً با کدی شبیه این:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خوب حالا اجازه دهید من بپرسم!
چرا x و y در کد بالا new شده اند ولی z چرا new نشده؟
new شدن z کجاست؟
چطور بفهمیم نیازی نبوده z را صراحتاً و دستی new کنیم؟
میبینید، خیلی ساده است.
برخی از توابع کارهایی برای ما انجام میدهند و لطف میکنند یک کلاس new شده و صحیح مقدار داده شده را به عنوان خروجی کارشان برای ما ارسال میکنند.
پس ما یا خودمان مستقیم کلاسی را new میکنیم یا از یک تابع میخواهیم برایمان انجام دهد.
خیلی طبیعی است که ورودی و خروجی توابع بتوانند کلاس باشند و طبیعتاً اگر خروجی یک تابع ، از نوع class (و چه struct) باشد، ما دیگر نیازی به new کردن نداریم، چون تابع دارد موجودیتی به ما پس میدهد، موجودیتی که هویتی در RAM دارد و حتماً قبلاً new شده و مقدار دهی شده که حالا تابع میتواند نتیجه کارش را در آن قالب به ما پس دهد.
نمیدانم چقدر توانستم به خواسته شما نزدیک شوم.
امیدوارم به چیزیکه میخواهید رسیده باشید؟!
موفق باشید.