رفتن به مطلب
محفل من
Mostafa

آموزش تابع دوست در C++

پست های پیشنهاد شده

 توابع دوست کلاس در برنامه نویسی C++ (Class Friend functions) :

قبلا یادآوری شد که اعضای یک کلاس اعم از داده ها یا توابع دارای ۳ نوع سطح دسترسی می باشند که شامل دسترسی خصوصی private و دسترسی عمومی public و دسترسی حفاظت شده protected است .

اگر داده ها و توابع عضو یک کلاس از نوع private تعریف شوند فقط داده ها و توابع درونی آن کلاس در داخل همان کلاس می توانند به آنها دسترسی داشته باشند و هیچ جزء دیگری در بیرون از کلاس حتی شی ساخته شده از همان کلاس هم اجازه و توانایی دسترسی و کار با آنها را ندارند مگر تابعی را تعریف نماییم که در اصطلاح دوست(Friend) کلاس مورد بحث باشد .

پس تابع دوست یک کلاس، تابع ویژه ای است که می تواند به تمامی اعضای کلاس حتی اعضای private نیز دسترسی داشته باشد. تفاوتی نمی کند که تابع دوست کلاس را عمومی یا خصوصی تعریف نماییم. یک تابع دوست کلاس طبق الگوی زیر تعریف می شود که باید از کلمه کلیدی friend در ابتدای آن استفاده نمود :

مخفی

    برای مشاهده مطلب باید در سایت ثبت نام کنید و سپس وارد شوید.

مثال) به اتفاق یکدیگر مثالی ابتدایی از تعریف تابع دوست کلاس و نحوه بکارگیری آن در کلاس را بررسی می نماییم :

مخفی

    برای مشاهده مطلب باید در سایت ثبت نام کنید و سپس وارد شوید.

همانگونه که در کد برنامه نویسی C++ بالا ملاحظه می فرمایید در سطر ۹ برای کلاس Accumulator، تابع دوستی بنام Reset تعریف شده که دارای پارامتری ورودی که یک شی از خود کلاس است می باشد .

در سطر ۴ متغیری private بنام m_nValue تعریف شده است که فقط در داخل کلاس خود می توان به آن دسترسی داشت و در خارج از کلاس هر نوع دسترسی به این متغیر خصوصی منجر به خطا خواهد گشت مگر اینکه از یک تابع دوست کلاس برای این منظور استفاده کنیم که صحت دسترسی را در بیرون از کلاس Accumulator و در سطر ۱۵ از کد فوق مشاهده می کنیم .

دقت کنید که برای تعریف بدنه و عملکرد یک تابع دوست کلاس دیگر نیازی به استفاده از عملگر :: به همراه نام کلاس نمی باشد در صورتیکه قبلا توضیح داده شد برای تعریف تابع عضو کلاس در بیرون از آن کلاس باید نام کلاس بهمراه عملگر :: ذکر شود .

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

مثال) در زیر به برنامه ای برای بکارگیری تابع دوست کلاس در C++ می پردازیم :

مخفی

    برای مشاهده مطلب باید در سایت ثبت نام کنید و سپس وارد شوید.

خروجی :

مخفی

    برای مشاهده مطلب باید در سایت ثبت نام کنید و سپس وارد شوید.

در برنامه C++ بالا کلاسی بنام base وجود دارد که دارای ۲ متغیر عضو private از نوع int و تابعی بنام get که دارای پارامتر ورودی نیست و دسترسی public برایش تعریف شده و یک تابع دوست کلاس بنام mean که نوع دسترسی آن مهم نیست و نوع بازگشتی float را برمیگرداند و دارای یک پارامتر ورودی است که شیئی از همان کلاس base میباشد .

بدنه تابع دوست کلاس از سطر ۱۶ تا ۱۹ در خارج از کلاس تعریف شده و براحتی و با ساخت یک شی بنام ob به متغیرهای عضو private کلاس base دسترسی دارد که میانگین دو عدد ورودی را محاسبه می نماید. در سطر ۱۸ ما از اصل تبدیل نوع (Type Casting) برای جلوگیری از بروز خطای محاسباتی در نتایج برنامه استفاده کردیم. در واقع ما با استفاده از اصل تبدیل نوع به کامپایلر اعلام می کنیم که هرچند متغیرهای اولیه از نوع int هستند اما حاصل نتیجه را به صورت float و بدون گرد کردن و با قسمت اعشارش می خواهیم .

در نهایت و در تابع اصلی برنامه نیز یک شی از کلاس را ساخته و از آن استفاده می کنیم. نکته ای که عزیزان باید توجه کنند تابع clrscr است که در فایل سرآیند conio.h تعریف شده و موجب می شود که محتویات صفحه نمایش یا همان خروجی را پاک نماید و حافظه خروجی برنامه را clear کند که اسن دستور را هم در سطر ۲۳ از برنامه C++ بالا مشاهده می کنیم .

 کلاس دوست کلاس در برنامه نویسی C++ (Class Friend class) :

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

مثال) در زیر به برنامه ای برای بکارگیری کلاس دوست کلاس در C++ می پردازیم :

مخفی

    برای مشاهده مطلب باید در سایت ثبت نام کنید و سپس وارد شوید.

خروجی :

مخفی

    برای مشاهده مطلب باید در سایت ثبت نام کنید و سپس وارد شوید.

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

از تابع main شروع می کنیم پس وارد این تابع می شویم. در سطر ۳۳ از برنامه می بینیم که شیئی بنام sqr از کلاسی بنام CSquare ایجاد شده است پس در مرحله بعدی به سراغ کلاس CSquare می رویم تا بررسی کنیم که چه اعضایی دارد و این اعضا چه کار یا کارهایی را انجام می دهند .

تعریف کلاس CSquare از سطر ۱۶ شروع شده و تا سطر ۲۳ ادامه میابد که دارای یک عضو خصوصی بنام side از نوع داده int و یک تابع عضو عمومی بنام set_side و کلاس دوست کلاس CRectangle است. تابع عضو set_side یک نوع داده ای int را بعنوان پارامتر ورودی دریافت می کند و مقدار آنرا در متغیر side قرار می دهد .

به ادامه بررسی یا trace برنامه از سطر ۳۴ می پردازیم. در این سطر هم یک شی بنام rect از کلاس CRectangle ایجاد شده است، لذا به بررسی این کلاس در ادامه می پردازیم .

تعریف کلاس CRectangle از سطر ۸ از برنامه شروع شده و تا سطر ۱۴ ادامه میابد. این کلاس شامل دو متغیر عضو خصوصی بنامهای width و height از نوع داده ای int و دو تابع عضو عمومی بنامهای area و convert می باشد که وظیفه تابع اول حاصلضرب دو متغیر عضو خصوصی و وظیفه تابع دوم از سطر ۲۵ تا ۲۹ تعریف شده است که این تابع ورودی از نوع شی از کلاس CSquare را دارد .

در سطر ۳۵ از برنامه با استفاده از شی ایجاد شده از کلاس CSquare به تابع عضو set_side با پارامتری با مقدار ۴ دسترسی پیدا می کنیم لذا مقدار متغیر side به ۴ تبدیل می شود .

در سطر ۳۶ نیز با استفاده از شی ایجاد شده از کلاس CRectangle به تابع عضو convert با ورودی شی sqr دسترسی پیدا می کنیم. پس مقدار ۴ در دو متغیر width و height قرار گرفته و در ادامه و در سطر ۳۷ با دسترسی به تابع convert این دو مقدار در هم ضرب شده و حاصلضرب آن دو به عنوان خروجی بر میگردد و چاپ می شود که همان مقدار ۱۶ است .

چون در سطر ۲۲ از برنامه C++ بالا کلاس CSquare دوست کلاس CRectangle تعریف شده پس براحتی در سطرهای ۲۷ و ۲۸ به متغیرهای عضو خصوصی این کلاس دسترسی پیدا کرده و بر روی آنها کار می کند و در صورتیکه اگر دوست کلاس مورد نظر نبود این اجازه را نداشته و برنامه با خطایی روبرو میشد .

امیدوارم که مراحل بررسی یا trace یک برنامه را درک کرده و متوجه شده باشید که چگونه می شود ساختار هر برنامه ای را بادقت و بدرستی چک نمود که مهارت در این شیوه کمک شایانی به دید برنامه نویسی و نهایتا نوشتن یک برنامه صحیح در زبان برنامه نویسی C++ خواهد نمود .

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال دیدگاه یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید دیدگاهی ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در سایت ما ثبت نام کنید. عضویت خیلی ساده است !

ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید

ورود به حساب کاربری
    • 2 Posts
    • 12 Views
    • 1 Posts
    • 34 Views
    • 1 Posts
    • 40 Views
    • 1 Posts
    • 133 Views
    • 1 Posts
    • 115 Views
    • 1 Posts
    • 141 Views
    • 1 Posts
    • 138 Views

  • سفارش پروژه برنامه نویسی

×
×
  • اضافه کردن...