تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 6 از 6

نام تاپيک: چرا در Overloading ؟

  1. #1
    آخر فروم باز
    تاريخ عضويت
    Jul 2009
    پست ها
    6,351

    14 چرا در Overloading ؟

    سلام

    دوستان هنگام سربارگذاری عملگر ها چرا ما وقتی میخواهیم ">" را پیاده سازی کنیم،همزمان باید "<" را هم پیاده سازی کنیم؟!
    یعنی میگن بزرگ تر وقتی معنا پیدا میکنه که کوچک تر وجود داشته باشه. اما من نمیفهمم

  2. #2
    کاربر فعال تالار .Net Msba's Avatar
    تاريخ عضويت
    Dec 2006
    محل سكونت
    ! My Mind
    پست ها
    506

    پيش فرض

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


    موفق باشید.

  3. 3 کاربر از Msba بخاطر این مطلب مفید تشکر کرده اند


  4. #3
    آخر فروم باز
    تاريخ عضويت
    Jul 2009
    پست ها
    6,351

    پيش فرض

    سلام
    دوست عزیز:
    ممنون از پاسخ شما
    فهمیدم اما قانع نشدم.

  5. این کاربر از Life24 بخاطر این مطلب مفید تشکر کرده است


  6. #4
    کاربر فعال تالار .Net Msba's Avatar
    تاريخ عضويت
    Dec 2006
    محل سكونت
    ! My Mind
    پست ها
    506

    پيش فرض


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

    2-
    چون ممکن است یکی دومی را بپرسد و یکی اولی، کامپایلر نیز همین را از شما می خواهد.
    این شما را قانع نمی کند؟ اگر این امکان شما را قانع نمی کند پس بریم سراغ حرف زور [مزاح]: قانونه همینی که هست! (یه چیز تو مایه های پول زور! )
    3- این را هم در نظر بگیرید که ممکن است در جایی کامپایلر گزاره ی شما را در Assembler از آن طرف پیاده سازی کند.

    موفق باشید.

  7. این کاربر از Msba بخاطر این مطلب مفید تشکر کرده است


  8. #5
    آخر فروم باز
    تاريخ عضويت
    Jul 2009
    پست ها
    6,351

    پيش فرض

    این شما را قانع نمی کند؟ اگر این امکان شما را قانع نمی کند پس بریم سراغ حرف زور [مزاح]: قانونه همینی که هست! (یه چیز تو مایه های پول زور! )
    3- این را هم در نظر بگیرید که ممکن است در جایی کامپایلر گزاره ی شما را در Assembler از آن طرف پیاده سازی کند.

    موفق باشید.
    سلام
    راستش رو بخواهید اصلا من جریان رو نگرفتم!
    من الان یک قطعه کد رو نوشتم و == رو اورلود کردم و برای != اومدم دقیقا مثل == کد نوشتم و جای true و false رو تغیر دادم!!

    یعنی قانون هست که هر وفت + رو آورلود کردیم با - هم آورلود بشه؟
    اگر * آورلود کردیم باید / هم آورلود بشه؟
    اگر == باید != هم آورلود بشه؟
    اما یک مثالی در ماکروسافت دیدم خودش اینکار را نکرده!!
    در مثال اینجا فقط + رو نوشته و - هم ننوشته . و داره جواب میگیره
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

  9. #6
    کاربر فعال تالار .Net Msba's Avatar
    تاريخ عضويت
    Dec 2006
    محل سكونت
    ! My Mind
    پست ها
    506

    پيش فرض

    تمام عملگر ها در این شرایط قرار نمی گیرند. دقت کنید می بینید operator های منطقی نیازمند دو حالت هستند یعنی هم خودشان هم عکس شان. این هم به خاطر امکان هایی است که در بالا گفتم (ممکن است امکان های دیگری نیز باشد.) اما در عملگر های محاسباتی وقتی می گویید جمع مطمئنا باید جمع صورت بگیرد و کامپایلر نمی تواند جای آن کسر بگذارد و یا به جای ضرب از تقسیم استفاده کند چرا که در محاسبات پیچیده این رفتار ها می تواند نتیجه ی محاسبات را تغییر دهد و کامپایلر در صورت تغییر نمی تواند این موضوع را بفهمد و اصلاح انجام دهد.
    عملگر های منطقی مثلا: ==,=!, <,> و با مساوی بودن آن ها.
    محاسباتی مثلا: >>, <<, +,-,*,/

    موفق باشید.

  10. 2 کاربر از Msba بخاطر این مطلب مفید تشکر کرده اند


Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •