آموزش شی گرایی – قسمت هفتم

آموزش شی گرایی

در قسمت هفتم آموزش شی گرایی در ادامه مباحث چندریختی و overriding موضوعاتی چون چندریختی توسط اعضا virtual و override کردن عملگر ها را آموزش داده ایم.

آموزش شی گرایی – قسمت هفتم

  ( virtual  چند ریختی با استفاده از اعضا)Polymorphism by Virtual Members

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

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

میتوان پروپرتی را نیز بدین صورت virtual کرد

 

در virtual کردن پروپرتی ها نیز مانند متدها باید در کلاس مشتق شده پروپرتی را override کرد به همان روش گفته شده و به این نکته توجه داشته باشید که در کلاس اصلی نتیجه پروپرتی درون فیلد FirstField قرار میگیرد درحالی که اگر از پروپرتی درون کلاس مشتق شد استفاده کنیم نتیجه درون فیلد SecondField قرار میگیرد.

( کردن عملگرهاoverride)Overriding Operators

میتوان عملگر هارا نیز override کرد به عبارت دیگر ما میدانیم که نتیجه int result=2+2 میشود result=4 و یا حتی برای الحاق دو رشته نیز میتوان از عملگر + استفاده کرد این بدین معنی است که خود کامپایلر میتواند تشخیص بدهد که علامت + که بین دو عدد یا دو رشته می آید باید چ عملی انجام دهد اما نمیتواند تشخیص دهد که زمانی که این عملگر یا هر عملگر دیگری بین دو شی از کلاس بیاید باید چه عملی انجام دهد.

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

مثال زیر جمع دو عدد اعشاری میباشد که قسمت صحیح واعشار آنرا جدا جمع کرده و نمایش میدهد

  همانگونه که مشاهده میکنید دو فیلد برا قسمت اعشار و صحیح عدد ایجاد کرده ایم و یک سازنده ساده نیز قرار داده ایم حال برای ایجاد override مربوط به عملگر ابتدا سطح دسترسی سپس عبارت static چون این نمونه override حتما باید بصورت static باشد  سپس عبارت operator و سپس نوع عملگری که میخواهیم مشخص کنیم که در این مثال عملگر جمع میباشد و درون پرانتر هم دو پارامتری که میخواهیم با هم جمع کنیم که هردو نیز از نوع کلاس جاری میباشند سپس درون بدنه نیز یک شی جدید از نوع کلاس جاری ایجاد میکینم و درون پرانتز عملیاتی که میخواهیم انجام شود را قرار میدهیم که در این مثال این عملیات این است که قسمت صحیح دو عدد باهم و قسمت اعضار دو عدد نیز با هم جمع شوند و در انتها نیز نتیجه را به خروجی ارسال میکند.

حال میتوان درون main برنامه برای دیدن نتیجه بدین صورت نوشت

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

مدرس : خانم مهندس داودی نژاد

آموزش شی گرایی – قسمت ششم

آموزش شی گرایی – قسمت هشتم

درباره نویسنده

مطالب مرتبط

نظر بدهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *