PDA

نسخه کامل مشاهده نسخه کامل : من هنوز مفهوم کلاس و توابع عضو رو در c++ متوجه نشدم...



Arash_XL7710i_207
22-05-2007, 07:06
چند تا کتاب هم خوندم ولي همشون يجوري مبهم توضيح دادن .
اگه کسي لطف کنه يه مثال کامپيوتري يعني در مورد برنامه نويسي براي من بزنه ممنونش ميشم.

hamidreza_buddy
22-05-2007, 17:31
خودت شروع کن به برنامه نویسی تا با مزیت های کلاس ها آشنا بشی.
برای درک کامل این مطلب باید تجریبی کار کنی.

کلاس رو به صورت یه شئ در نظر بگیر. مثلاً فرض کن یه بازی می خایم بنویسیم. یه کلاس داریم به نام MovingObject که کلاس پایه ای برای اشیاء متحرک هست. این اشیاء هر کدام مشخصه های متفاوتی دارند (که در داده های عضو data member ذخیره می شود) و همچنین اعمال متفاوتی دارند (همون توابع عضو) و یا در صورت مشترک بودن یک عمل آن را به صورت های متفاوتی انجام می دن (که بوسیلۀ کد توابع عضو انجام میشود).
مثلاً حداقل داده های زیر رو دارن: سرعت، جهت حرکت. این داده ها بهتره به صورت خصوصی (private) تعریف شن.
و عملی که به صورت مشترک انجام می دهند حرکت کردن ( Move ) هستش. چون در خارج از کلاس سرعت و ... در دسترس نیستند فقط می توان با استفاده از این متد باعث به حرکت در آمدن شئ شد. حال فرض کنید کلاس های Car و Human از این کلاس مشتق شده باشند. حال توابع جدیدی به هر یک از این کلاس ها اضافه می کنیم که کار خاصی انجام می دهند. مثلاً تابع Horn برای بوق زدن و یا Accelerate برای شتاب گرفتن ماشین و ... که ربطی به انسان ندارن. و به انسان مثلاً Walk و یا Sleep یا Read و ... .

وجود این توابع باعص می شه که بر خلاف زبان های غیر شئ گرا (مثل سی) مجبور نباشیم که همۀ داده ها رو در معرض دید عموم بگذاریم و فقط توابعی که مربوط به کلاس باشند (توابع عضو) می توانند به داده ها دسترسی داشته باشند. و ما فقط با اجرای این توابع می توانیم کار مورد نظر را انجام دهیم. و برای اینکه شئ ما بتواند کار جدیدی انجام دهد باید یک تابع عضو عمومی (public) به کلاس اضافه کنیم.

مثال:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در این کلاس هیچ راهی برای مقدار دهی داده های a b c وجود ندارد. برای این کا رمی توان از سازنده ها و یا توابع عضو استفاده کرد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

یکی از مزیت استفاده از توابع برای دسترسی به داده ها (توابعی مثل set_xxx و یا get_xxx که یا مقداردهی می کنند و یا مقداری برمی گردانند) این است که اگر فرمت ذخیرۀ داده ها تغییر کردن، دیگر لازم نیست که همۀ کد برنامه تغییر داده شود بلکه فقط تابع set یا get تغییر می کند و توابعی که از آن استفاده می کنند.

برای استفاده از کلاس بالا:

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

Arash_XL7710i_207
24-05-2007, 11:52
خیلی ممنون
زحمت کشیدی

آرام جان گل
25-05-2007, 01:04
سلام

شايد بعد از دوسال درس و برنامه نويسي اين سوال مسخره باشه ولي واقعيت همينه كه اكثر افرادي كه تازه برنامه نويسي مي كنن همين مشكل را دارن . فرق تابع و كلاس

من با اين كه مفهوم تابع و كلاس را مي دونم و طريقه استفاده هر كدوم را بلدم ولي واقعا مزيت كلاس را نسبت به تايع نمي دونم و در حقيقت حسي از تابع يا كلاس استفاده مي كنم

كاربرآرش سوال خوبي پرسيده چون اين علامت سوال سنگين و بزرگ مزيت كلاس روي سر من هم مونده

اگه قراره كه مزيت كلاس نسبت به تابع اعضاء داده اي(proprteis ) باشه همون هايي كه بعد از فضاي نامي تعريف مي شوند ....؟ كه خوب در تابع هم من مي توانم متغيير هاي محلي تعريف كنم

يعني private به جاي متغير محلي تابع و public به جاي متغيير هاي سراسر

حالا اگه قراره كه مزيت كلاس نسبت به تابع به خاطر متد هاي آن باشه كه من مي تونم توي تابع اصلي يكسري توابع محلي هم تعريف كنم يعني در يك تابع يك تابع ديگر را فراخواني كنم

پس تابع فرا خواني شده توسط تابع اول هم به جاي متد هاي كلاس

اينو مي دونم كه بالاخره دليلي هست كه اين تفاوت پديد اومده و مسئله مهم شي گرايي الكي به وجود نيومده ولي نمي تونم دليلش را تجزيه تحليل كنم

غير از مثال لطفا مسئله را بشكافيد
مرسي

khafan_bat
03-05-2009, 02:15
دقیقا من هم این مشکل رو دارم.

در واقع مشکل من نویسندگان کتب مهندسی هستش که چند تا کتاب خارجی رو مخلوط میکنند اون هم از نوع همگن بعدش خورد دانشجویان و دانش آموزان میدنند.
برای فهمیدن یه مطلب باید از چند تا مرجع استفاده کرد. ولی بعد از اینکه مطلب رو یاد میگیری اون لحظه خیلی شیرینه.....

sin2x=2sinxcosx
03-05-2009, 15:22
درسته که اساتيد ، توشيحات کامل تري دادن . ولي من هم به طور خيلي ساده مي گم :
اين يک نمونه خيلي ساده از کلاسه :

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

مشاهده مي کنيد که داخل اين کلاس ، سه تا تابع تعريف و پياده سازي شده اند که کار هر سه به نوعي مربوط به همه . داخل اين کلاس يه متغير از نوع int تعريف شده که توابع داخل اون که اصطلاحا توابع عضو ناميده ميشن و تو ساير زبان ها مثل جاوا بهش متد هم ميگن مي تونن بهش دسترسي داشته باشن . در واقع ما تعدادي داده و تابع رو داخل يک کپسول که اصطلاحا کلاس ناميده ميشه محصور کرديم . (در دنياي شيءگرايي به اين عمل encapsulation ميگن )
:public هم مشخص ميکنه که تابع ها يا داده هايي که بعد از اين کلمه کليدي تعريف ميشن حالت عمومي دارن و مشتري هاي کلاس تو تابع main شون ميتونن باهاش کار کنن . ولي متغير priv8 زير کلمه کليدي private ( مشخصه دسترسي private يا private access specifier ) تعريف شده . يعني هيچ تابعي به جز توابع عضو کلاس حاضر نمي تونن بهش دسترسي پيدا کنن .

mr.dehdar
06-05-2009, 14:06
سلام كتابc++دايتل رو به شما پيشنهاد مي كنم(كتابي ساده ومفيد)