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

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




صفحه 3 از 10 اولاول 1234567 ... آخرآخر
نمايش نتايج 21 به 30 از 96

نام تاپيک: آموزش ++C

  1. #21
    حـــــرفـه ای sin2x=2sinxcosx's Avatar
    تاريخ عضويت
    Dec 2007
    پست ها
    2,234

    پيش فرض

    در مورد اشياء و توابع const :
    اگه بخوايم يه شيئي رو به صورت const تعريف کنيم ، بايد قبل از نام کلاس کلمه کليدي const رو بذاريم . مثلا مي خوايم از کلاس Polynomial يه شيء const به نام poly بگيريم . مي نويسيم :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    يه نکته :
    اگه بخواين از يکي از انواع داده اي اصلي ++C مثل int متغير const تعريف کنين ، بايد تو همون خط ، يعني تعريف متغير مقدار دهي اوليه کنين . در غير اين صورت Compile Error دريافت مي کنين با اين مضمون :
    const object must be initialized if not extern
    ولي براي دستور بالايي ما که يک نوع داده اصلي نيست ، بلکه يه کلاسه ،‌ ايراد نمي گيره و اجازه مي ده برنامه اجرا بشه . ولي با اين همه يه warning ميده . اون هم در يه شرط . چه شرطي ؟ الان ميگم :
    گفتيم که Constructor يه کلاس هنگامي فراخواني ميشه که شيئي از اون کلاس ايجاد بشه . خوب حالا ما مي تونيم هرکاري که دلمون مي خواد تو اون constructor انجام بديم . مثلا ما اين جا مي تونيم به داده هاي عضو کلاس مقدار اوليه بديم تا هنگامي که شيئي ايجاد مي شه همه داده هاي عضو مقدار اوليه داشته باشن . در اين صورت وقتي شيء به صورت const تعريف ميشه ، ديگه warning هم نميده . چون ديگه به محض تعريف شيء ، داده ها مقدار اوليه شونو توسط سازنده گرفتن . وقتي Constructor مون خالي باشه ، هنگام تعريف يک شيء از اون کلاس به صورت const ، پيغام هشدار يا warning دريافت مي کنيم .
    براي تعريف يه تابع عضو به صورت const هم بايد کلمه const رو بعد از پرانتز بسته ليست پارامترها قرار بديم .

    چند نکته در مورد توابع عضو const و اشياء const
    1- اشياء const نمي تونن هيچ تابع عضوي رو احضار کنن ، مگر اينکه خود تابع عضو هم const باشه .
    2- توابع عضو اعلان شده به صورت const نمي تونن داده هاي عضو يک شيء رو تغيير بدن .
    3- خود تابع عضوي که const هست نمي تونه تابع عضو غير const همون کلاس رو احضار کنه .
    4- سازنده ها و نابودکننده کلاس ها همواره شيء رو تغيير مي دن . بنابراين شيء شما چه const باشه و چه غير const ، اونا مجاز هستن عمليات خود رو روي شيء انجام بدن .
    5- نمي تونيم سازنده ها و نابود کننده يک کلاس رو به صورت const‌ تعريف کنيم .
    6- يه شيء غير const مي تونه تابع عضو const همون کلاس رو احضار کنه .

    فکر کنم ديگه تموم شد . اگه نکته اي موند بگين .

  2. 3 کاربر از sin2x=2sinxcosx بخاطر این مطلب مفید تشکر کرده اند


  3. #22
    حـــــرفـه ای sin2x=2sinxcosx's Avatar
    تاريخ عضويت
    Dec 2007
    پست ها
    2,234

    پيش فرض

    سلام . چند روزي بود نبودم ... ببخشيد از وقفه اي که پيش اومد . سعي مي کنم تا يه هفته تموم کنم و برم . چون تا چند هفته بعد ديگه نمي تونم بيام . نه اينترنت و نه P30World . اگر هم تموم نشد يا دوستان ادامه ميدن و يا بعد از يه ماه خودم .
    حالا .................

    کلاس ها و توابع friend :

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

  4. 2 کاربر از sin2x=2sinxcosx بخاطر این مطلب مفید تشکر کرده اند


  5. #23
    حـــــرفـه ای sin2x=2sinxcosx's Avatar
    تاريخ عضويت
    Dec 2007
    پست ها
    2,234

    پيش فرض

    اشاره گر this و کاربرد اون :
    گفتيم وقتي يه کلاس رو تعريف مي کنيم ، توابع عضو اين کلاس مي تونن به طور مستقيم به داده هاي عضو کلاس دسترسي داشته باشن . يعني فرض کنين ما متغير x رو به عنوان داده عضو براي کلاس A تعريف کرديم و مي خوايم تو يه تابع عضو مقدار اون رو تغيير بديم . سه راه داريم‌ :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    در حالت اول به طور ضمني از اشاره گر this براي دسترسي به داده عضو کلاس استفاده شده . در دومي و سومي هم به طور صريح . در اينجا تقريبا فرض کنين this يه شيء از کلاسه . چون this يه اشاره گر هست ، بنابراين براي دسترسي به داده هاي عضو کلاس مربوطه بايد به جاي . از <- استفاده کنيم . وقتي از * استفاده مي کنيم ، بايد از . براي دسترسي استفاده کنيم .
    استفاده از اين اشاره گر در مبحث سربارگذاري عملگر ها مفيده .

    در مورد تخصيص پوياي حافظه :
    شکل کلي دستور اين طوريه :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    اين براي گرفتن بود . براي پاک کردن هم :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    مثال :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    مثال براي تخصيص حافظه براي يک آرايه :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    تخصيص حافظه به صورت پويا يه کاربردش اينه که مثلا شما از کاربر بخواين يه عددي رو وارد کنه و شما از اون عدد به عنوان طول يک آرايه استفاده کنين . ( در حالت عادي شما نمي تونين از متغيرهاي غير ثابت براي طول آرايه استفاده کنين . )
    نکته : اگه براي يه متغير به صورت پويا حافظه گرفته باشين و اونو پاک نکنين ( توسط دستور delete ) ، اين حافظه به صورت garbage يا آشغال در حافظه مي مونه و بلااستفاده باقي مي مونه .
    البته زبان هاي پيشرفته ديگه مثل #C يه قابليتي به نام garbage collector دارن که مي تونن اين کارو به طور اتوماتيک انجام بدن ولي ++C نداره . ( البته تو نسخه Native ) .

    در مورد اعضاي static يک کلاس :
    فرض کنين يه کلاس ، يه متغير به اسم i داره . توسط constructor بهش مقدار 0 مي ديم . بنابراين با هر شيئي که از اين کلاس ايجاد ميشه ، يه کپي از متغير i براش ايجاد ميشه و بهش مقدار 0 داده ميشه . اين ويژگي يک عضو غير static کلاس هست .
    ولي يک عضو static براي کل کلاس هست . 100 تا شيء هم از يه کلاس ايجاد بشه براي همشون به عضو static داريم . فقط يکبار مقدار اوليه به متغير static داده ميشه . اگه شيئي از کلاس نداشته باشيم باز هم ميشه به مقدار يه متغير static دسترسي داشت . ( با تايپ نام کلاس و دو تا دونقطه و نام متغير static ) .
    فعلا تا اينجا بمونه ...

  6. 3 کاربر از sin2x=2sinxcosx بخاطر این مطلب مفید تشکر کرده اند


  7. #24
    حـــــرفـه ای sin2x=2sinxcosx's Avatar
    تاريخ عضويت
    Dec 2007
    پست ها
    2,234

    پيش فرض

    قبل از اينکه وارد مبحث Operator Overloading بشم ، يه مثال از کتاب ديتل در مورد کلاس ها ميارم ، خط به خط توضيح ميدم و آخر سر يه بار Trace مي کنم تا مطالب خوب جا بيفتن .

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    خوب ...
    اين قطعه کد تعريف يک کلاس رو نشون ميده . اين قطعه کد يه فايل با پسوند h. هست نه cpp. ! برنامه هاي سي پلاس پلاس تو فايل هايي با پسوند cpp. ذخيره ميشن . ولي اين يه کد قابل اجرا نيست و فقط شامل پيش نمونه توابع عضو کلاس هست . گفتيم که اگه بخوايم از اشياء cin يا cout تو برنامه مون استفاده کنيم بايد فايل iostream رو توسط دستور پيش پردازنده include تو برنامه مون بگنجانيم . اين فايل رو داخل <> قرار مي داديم . اين نشون ميده که اين فايل داخل پوشه include کامپايلر قرار داره . اين قطعه کد بالايي ما هم يه چيزي مثل iostream هست . يعني براي اينکه از اين کلاس يه شيء بگيريم ، بايد اين فايل رو include کنيم . ولي اين فايل داخل پوشه include کامپايلر نيست . بنابراين اين رو داخل "" قرار مي ديم . در اين صورت هنگام پيوند دادن برنامه ،‌ وقتي مي خواد تابع main اجرا بشه اين فايل رو در کنار فايلي که تابع main تو اون قرار داره مي گرده . همون طوري که مي بينين اسم کلاس ما ، Time هست . بعد آکلاد باز مياد و کلمه public رو مي بينين . يعني توابع زير اون حالت عمومي دارن و همه جا قابل مشاهده و فراخواني هستن . يه سازنده ، يه تابع به اسم setTime ، که سه پارامتر int مي گيره و چيزي بر نمي گردونه . تابع هاي printUniversal و printStandard که نه پارامتر دارن و نه چيزي بر مي گردونن . بعد سه تا متغير int از نوع private ، داده هاي عضو کلاس رو تشکيل مي دن .
    همون طوري که مي بينين اين فايل ما حاوي پياده سازي توابع نيستن . بنابراين نياز به يه فايل ديگه داريم تا تو اون هم پياده سازي توابع رو داسته باشيم .

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    اين همون فايل پياده سازي هاي توابع هست . تو خط اول فايل iostream رو include کرديم . در خط بعد تعريف شيء cout رو انجام داديم . بعد براي استفاده از اشياء setw و setfill ، فايل iomanip رو include کرديم . بعد خود فايل h. کلاسمون رو include کرديم . يه نکته اي که هست اينه که براي تعريف توابع عضو کلاس ، قبل از اسم توابع ، اسم کلاس رو به همراه دو تا دونقطه مياريم . پياده سازي هم مثل پياده سازي معمولي تو برنامه نويسي ساخت يافته است .

    يه فايل ديگه حاوي تابع main لازم داريم تا بتونيم از اين کلاس استفاده کنيم .

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    داخل تابع main ، يه شيء به اسم t از کلاس Time نمونه سازي کرديم . با اين دستور ، کامپايلر ميره سراغ Constructor کلاس مربوطه ، تا شيء رو بسازه .
    مي بينين که تو سازنده يا Constructor ، ما به داده هاي عضو کلاس ، مقدار صفر داديم . بنابراين داده هاي عضو شيء t هم مقادير صفر رو گيرن . چهار خط بعدي با فراخواني توابع چاپ داده هاي عضو کلاس ، اين مطلب رو تاييد مي کنن . ما يه تابع عضو ديگه به اسم setTime تو کلاسمون داشتيم که اجازه ميداد سه تا آرگومان بهش بفرستيم تا اون مقادير رو داخل داده هاي عضو قرار بده . بنابراين تو خط بعدي ما از اين تابع استفاده مي کنيم و مقادير خودمون رو بهش پاس ميديم و در تاييد اين مطلب دوباره توابع چاپ رو قراخواني مي کنيم .

    خروجي برنامه بالاخره اين ميشه :

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

  8. 2 کاربر از sin2x=2sinxcosx بخاطر این مطلب مفید تشکر کرده اند


  9. #25
    حـــــرفـه ای dogtag's Avatar
    تاريخ عضويت
    Aug 2006
    محل سكونت
    مرز غربی تهران بزرگ! ایمیل: goodboy.php@gmail.com اسپم ها: 2,200!!! :دی
    پست ها
    2,277

    پيش فرض

    سلام.
    خیلی ممنون از این تاپیک مفید.

    3 تا سوال:

    1- چرا تو Main اون Time.h رو include کردید به جای Time.cpp ؟

    2- هیچ وقت دلیل استفاده از این header ها رو تو C نفهمیدم! چرا مثل #C در جا تعریف و پیاده سازی نمی کنند؟
    بعد اینی که گذاشتید خیلی ناجوره!
    یعنی هرکی این Header رو داشته باشه، خیلی راحت فقط Class::Method رو می نویسه و تعریفش می کنه؟
    آخه 1 کم با مفهوم کپسوله سازی و کلاً شیء گرایی نمی خونه!

    3- چرا شما New نمی کنید این کلاس ها رو؟
    آخه اونجوری که مثلاً می نویسید Time t که Constructor اجرا نمیشه! (یا حداقل تو #C اینجوریه!)
    اینجوری فقط میشه یه اعضای Static دسترسی داشت! (یا حداقل تو #C اینجوریه!)

    --

    اون پست 23 هم فکر می کنم 1 کم عجله ای نوشتید و یک کم نا مفهوم شده!



    در کل من Fan این تاپیک شدم!
    از کنارش جم نخواهم خورد.
    شما هم ادامه بدید.

    با آرزوی موفقیت.
    Last edited by dogtag; 28-07-2009 at 23:20. دليل: تکرار 1 کلمه!

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


  11. #26
    حـــــرفـه ای sin2x=2sinxcosx's Avatar
    تاريخ عضويت
    Dec 2007
    پست ها
    2,234

    پيش فرض

    سلام دوست عزيز .

    1- هميشه تو ++C فايل هدر رو include مي کنيم . چون هر سه فايل Time.h و Time.cpp و main.cpp در يک فولدر قرار دارن ، با include کردن Time.h ، کامپايلر مي تونه فايل cpp مربوط به اون هدر رو پيدا کنه و Link کنه .
    2- اتفاقا اين کلاس رو به دو فايل h. و cpp. تبديل مي کنيم تا مفهوم شيء گرايي حفظ بشه . به کاربري که قصد استفاده از اين کلاس ما رو داره فقط فايل هدر داده ميشه که فقط اينو بدونه که اين کلاس ما چه توابعي دارن و چه آرگومان هايي مي گيرن . با ارائه توضيحات در فايل هدر توسط برنامه نويس کلاس ، ميشه بهتر کاربر برنامه نويس تابع main رو در جهت استفاده از کلاس راهنمايي کرد . فايل کامپايل شده فايل cpp کلاس هم به مشتري يا همون استفاده کننده از کلاس داده ميشه که بتونه به فايل h. پيوند بزنه . Source فايل cpp نبايد در دسترس مشتري قرار بگيره و اين همون مفهوم کپسوله سازي و مهندسي نرم افزار و تکنولوژي شيء گراييه که مشتري نبايد از چگونگي پياده سازي توابع اطلاع داشته باشه . فقط کافيه بدونه که چه توابعي وجود دارن و اين توابع چيکار مي کنن . ديگه لازم نيست بدونه که چه الگوريتمي براي انجام اين کار پياده سازي شده .
    در مورد اين هم که هر کس فايل هدر رو داشته باشه مي تونه فايل cpp رو از روي اون بنويسه ، بايد بگم که خوب بنويسه . چه اشکالي داره . مهم اينه که به پياده سازي مدنظر ما لطمه وارد نشه .

    3- تو ++C فقط کافيه بنويسيم Time t . در اين صورت Constructor‌ ( البته سازنده پيش فرض يا Default Constructor ) اجرا ميشه . حالا فرض کنين Constructor ما يه پارامتر داره از نوع int . بنابراين هنگام تعريف شيء ، مثلا مي نويسيم ( Time t ( 3 . در اين حالت عدد 3 رو به عنوان آرگومان به Constructor مي فرستيم .

    در مورد پست 23 هم حق کاملا با شماست . ولي قصد من اين بود که بعدا توسط مثال هايي به اين مطالب پرداخته بشه . فقط خواستم يه پيش نمونه ذهني در اين مورد ايجاد بشه .

    موفق باشيد ...

  12. 2 کاربر از sin2x=2sinxcosx بخاطر این مطلب مفید تشکر کرده اند


  13. #27
    حـــــرفـه ای dogtag's Avatar
    تاريخ عضويت
    Aug 2006
    محل سكونت
    مرز غربی تهران بزرگ! ایمیل: goodboy.php@gmail.com اسپم ها: 2,200!!! :دی
    پست ها
    2,277

    پيش فرض

    خیلی ممنون.
    نمی خوام تاپیکتون رو الکی شلوغ کنم.
    بعداً می تونید به همکار ها بگید که پستم رو حذف کنند.

    ---

    با توجه به این توضیحی که در مورد Header دادید، یاد Interface افتادم!
    شبیهش ه دیگه!
    +
    نفرمودید، میشه همزمان تعریف و پیاده سازی کرد یا نه!


    در مورد Instancing ، مگر نباید بنویسیم ;() Time t = new Time ؟
    یعنی این الان Error میده؟

    باز هم ممنون از توضیحتون.

  14. #28
    حـــــرفـه ای sin2x=2sinxcosx's Avatar
    تاريخ عضويت
    Dec 2007
    پست ها
    2,234

    پيش فرض

    خیلی ممنون.
    نمی خوام تاپیکتون رو الکی شلوغ کنم.
    بعداً می تونید به همکار ها بگید که پستم رو حذف کنند.

    ---

    با توجه به این توضیحی که در مورد Header دادید، یاد Interface افتادم!
    شبیهش ه دیگه!
    +
    نفرمودید، میشه همزمان تعریف و پیاده سازی کرد یا نه!


    در مورد Instancing ، مگر نباید بنویسیم ;() Time t = new Time ؟
    یعنی این الان Error میده؟

    باز هم ممنون از توضیحتون.
    اختيار داريد . اين تاپيک براي آموزش هست چرا بايد سوال ها حذف شوند ؟ ( البته آموزش که نه ، شما استاد ما هستيد )

    بله به اين هدرفايل مي گيم Interface و به پياده سازيش ميگيم Implementation . شبيه نيست دقيقا همونه .
    اگه منظورتون از همزمان تعريف و پياده سازي کردن اينه که فايل h. و cpp. يدونه باشن بايد بگم بله ميشه . قبلا هم گفتم . ما به اين دو فايل تبديل مي کنيم تا شيوه به کار گرفته شده در پياده سازي توابع عضو به صورت پنهان باقي بمانند .

    در مورد اون شکل Instancing هم که شما فرموديد به جاي اون بايد از دستور زير استفاده کنيم . يعني t از نوع اشاره گر به Time گرفته شود . در اين صورت ( شکل تعريف شما ) تخصيص حافظه براي t به صورت دايناميک و در هنگام اجراي برنامه گرفته مي شود که مي توانيم هر زمان که خواستيم با دستور delete آن را به حافظه بازگردانيم .

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    Last edited by sin2x=2sinxcosx; 29-07-2009 at 10:16.

  15. 2 کاربر از sin2x=2sinxcosx بخاطر این مطلب مفید تشکر کرده اند


  16. #29
    حـــــرفـه ای sin2x=2sinxcosx's Avatar
    تاريخ عضويت
    Dec 2007
    پست ها
    2,234

    پيش فرض

    يه مثال هم در مورد ترتيب فراخواني سازنده و نابود کننده توسط کامپايلر ميگم :

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    اين يه کلاسه که فقط يه Constructor داره و يه Destructor . دو تا هم داده عضو داره که يکيش از نوع int و دومي از نوع string که خود string هم يه کلاسه از کتابخانه استاندارد ++C .
    الان اگه يه نکته بگم باز دوستان ميگن اينور و اونور نپر .
    ولي ميگم .
    وقتي از شيء يه کلاسه ديگه تو کلاس خودمون استفاده مي کنيم ميگيم از خاصيت Composition يا ترکيب استفاده کرديم . که ميگيم CreateAndDestroy يه string داره . بعدا تو بحث ارث بري اين مفهوم رو بهتر مي فهمين . تو ارث بري هم ميگيم فلان يه فلان است .
    تو اين جا message يه شيء از کلاس string هست که پياده سازي کلاس string تو کتابخانه استاندارد هستش و شما کافيه فقط اونو include کنين .

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    اين هم پياده سازي اين کلاس .
    يه نکته اي بگم .
    لازم نيست تو نابود کننده اين کارايي که تو بالا انجام گرفته انجام بديم . چون اين يه مثاله و مي خوايم ترتيب فراخواني سازنده و نابود کننده معلوم بشه ، اين پيغام ها رو چاپ کرديم .

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    اين هم تابع main بود .

    تو اينجا با مفهوم static بودن هم آشنا ميشين .

    يه تابع تعريف کرديم به اسم create که نه چيزي مي گيره و نه چيزي برميگردونه .
    بعد يه شيء سراسري يا Global از کلاسمون تعريف کرديم . چون سازنده مون دو تا پارامتر داره پس موقع تعريف شيء هم دو آرگومان براش مي فرستيم . اوليش از نوع int و دوميش از نوع string . ( رشته ها داخل " " قرار مي گيرن . ) چون سازنده فراخواني ميشه ، پس دستورات موجود تو اون اجرا ميشه . پس با اجراي برنامه ، ابتدا پيغام زير چاپ ميشه :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    تابع main شروع ميشه . پيغام زير چاپ ميشه :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    باز يه شيء ايجاد مي کنيم و سازنده فراخواني ميشه و يه پيغام چاپ ميشه :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    بعد يه شيء static تعريف مي کنيم و سازنده فراخواني ميشه :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    حالا تابع create رو فراخواني مي کنيم . اجرا از تابع main منتقل ميشه به تابع create .
    با اجراي تابع create پيغام زير چاپ ميشه :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    با تعريف يک شيء داخل اين تابع سازنده فراخواني ميشه و در نتيجه پيغام زير چاپ ميشه :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    يه شيء static ديگه تعريف مي کنيم و باز پيغام چاپ ميشه :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    دوباره يه شيء ديگه و فراخواني سازنده و چاپ پيغام :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    بعد پيغام زير چاپ ميشه :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    حالا يکي از نکات مهم اينجاست . مي بينين که به پايان تابع create رسيديم . پس با تموم شدن اجراي اين تابع ، اشيايي که تو اون تعريف شده بودن بايد نابود بشن و اين به معناي فراخواني نابود کننده است . پس براي دو شيء 7 و 5 ، نابودکننده احضار ميشه . چرا براي 6 نه ؟ چون اون يه static بود .
    پيغام هاي زير چاپ ميشن :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    اجراي برنامه برميگرده به تابع main .
    دستور زير چاپ ميشه :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    يه شيء ديگه تعريف مي کنيم و سازنده فراخواني ميشه و پيغام زير چاپ ميشه :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    بعد دستور زير چاپ ميشه :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    حالا مهمترين نکته که غرض از اين مثال هم ذکر اين نکته بود .
    الان کار تابع main هم تموم شد و نوبت مي رسه به نابود شدن شيء ها يکي پس از ديگري . چه static و چه غير static . حالا کدوم يکي پس از کدوم يکي ؟ اين مهمه !
    چون شيء 4 آخرين شيئي بود که ايجاد شده بود پس اول اون نابود ميشه . چاپ پيغام زير هم اين مطلب رو تاييد مي کنه :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    بعد شيء 2 نابود مي شه :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    حالا اول اون شيء static که تو تابع create بود نابود ميشه و بعد static موجود تو تابع main‌ :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    آخر سر هم اون شيء Global نابود ميشه :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    بنابراين خروجي کامل برنامه اين ميشه :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

  17. 3 کاربر از sin2x=2sinxcosx بخاطر این مطلب مفید تشکر کرده اند


  18. #30
    حـــــرفـه ای sin2x=2sinxcosx's Avatar
    تاريخ عضويت
    Dec 2007
    پست ها
    2,234

    پيش فرض

    سلام دوستان عزيز .
    لطفا يه نظري تا اينجاي مطالب بدين تا من ادامه بدم . چون ديدگاهي که من نسبت به مطالب گفته شده دارم با ديدگاه يه فرد غير از خودم کاملا فرق مي کنه . من الان نمي دونم که از روي مطالب دارم مي پرم ؟ خيلي خلاصه مي گم ؟ خيلي کشش مي دم ؟ ... ؟
    اگه لازم باشه باز هم فعلا مثال بيارم . چون مطالب بقيه به طور جدي مربوط به تکنولوژي شيءگرايي ميشه و بحث کاملا جدي تره . مخصوصا مبحث ارث بري و polymorphism .
    ديگه اصلا تصميم ندارم سراغ ساخت يافته برم . متغير رو چجوري معرفي مي کنن . چجوري ورودي مي گيرن . با نوع داده double چيکار مي کنن . چه رنجي رو ساپورت مي کنه . اولويت Operator ها به چه صورته و ... .

Thread Information

Users Browsing this Thread

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

User Tag List

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

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