PDA

View Full Version : عدم درک وعدم توانایی بکارگیری شی گرایی



mostafi1391
سه شنبه 11 تیر 1392, 00:05 صبح
دوستان سلام

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

به خدا شی گرایی خیلی سخته به ویژه اگه قرار باشه خودآموز بخوای شروع کنی

ببینین من دارم شی گرایی رو در سطح C++‎&vb مطرح میکنم مثلا بحث کلاس میخونم خوبم حالیم میشه شی میفهمم ازص بری رو میفهمم اما دیگه وقتی به پلی مرفیسم میرسم یا به اینترفیس یا اویرلود. اویررید یا سربارگذاری یا توابع مجازی و ..... میمونم (تو درکشون نه ها تو دلیل استفاده ازشون و چطوری پیاده سازی)

خواهش میکنم از اساتید برنامه نویسی ایران کسی بیاد توضیحات همراه با مثالی برامون بگه شک نکنید که این مشکل .مشکل خیلیاس اما غرور اجازه بیانش نمیده امیدوارم ادمینای این سایت این پست پاک نکنن چون واسه این پست حداقل یکسال وقت گذاشتم و به جواب نرسیدم که اومدم اینجا... پیاپیش متشکرم:چشمک:

فرید باباخانی
سه شنبه 11 تیر 1392, 20:12 عصر
دوست عزیز بحث شی گرایی سخته ولی نه اونقدر که تو میگی ،سخت هست ولی نه در مفاهیم بلکه در حل تمرینات دشوار .کتاب برنامه سازی پیشرفته دکتر احمد فراهی خوبه.فوق العاده نیست ولی واقعا برای کسی که بخواد یاد بگیره به زبون ساده گفته که میتونی توی گوگل سرچ کنی یا اینکه اگه تو سایت www.aghazeh.com بگردی ایشالا پیدا میکنی.

farazjalili
سه شنبه 11 تیر 1392, 20:30 عصر
من هم مشکل این دوست عزیز رو دارم مشکل درک مفاهیم اولیه شی گرا نیست مثلا تعریف کلاس را می دانیم تعریف چند ریختی را می دانیم اما نمی توانیم آنها را در یک پروژ واقعی پیاده سازی کنیم

hessam2003
سه شنبه 11 تیر 1392, 20:37 عصر
سلام.
اینکه نمیتونید از یک تکنولوژی در پروژهاتون استفاده کنید یعنی اینکه هنوز بر اون موضوع تسلط ندارید.
شما چندتا مثال از همونایی که بلدین را انجام بدید از مثال های ساده شروع کنید.
مثلا کلاس لبنیات را طراحی کنید به روش شی گرا
شما هرجای که از شی گرا رو متوجه نشدید بگید تا من واستون با مثال کاربردی توضیح بدم تا بلکه از این سردرگمی در بیاید.
موفق باشید.

hessam2003
سه شنبه 11 تیر 1392, 20:39 عصر
راستی به MSDN در سایت microsoft هم یک سری بزنید مفهوم oop خیلی ساده توضیح داده شده است.

mostafi1391
سه شنبه 11 تیر 1392, 20:42 عصر
تشکر دوستان این کتابی که شما میگی گمونم خوندم ولی اون به درده کسی میخوره که استاد بالا سرش باشه.... از اساتید اینجا یه مردی پیدا نمیشه؟!!!!!!!!!!!!!

ام اس دی ان انگلیسه ما بی سواتیم

خب مثال اینه فرض کنیم تو سی ++ میگن آرایه ای از اشاره گرها رو اورلود کنین خوب چرا ما باید این کارو بکنیم؟

mostafi1391
چهارشنبه 12 تیر 1392, 21:03 عصر
دوستان برنامه نویس شما که خودتون این راه رفتین لا اقل تجربه های خودتون یگین

hadi0x7c7
پنج شنبه 13 تیر 1392, 09:36 صبح
یکی از کتاب های کاربردی که من توی Object oriented analysis and design دیدم کتاب Functional And Object Oriented Analysis and Design از Peretz Shoval هستش که میاد بحث های شی گرایی رو مستقل از زبان توضیح میده، اون کتاب میتونه کارگشا باشه.
نکته اینه که شما هر سیستمی که میای طراحی میکنی به صورت کلی اول Data Model اونو میسازی بعد اون رو تبدیل میکنی به Class Diagram و اون رو با هر زبان شی گرایی تبدیل میکنی به کد که حالا ممکنه از پلی مرفیزم و .... بخوای استفاده کنی.

mostafi1391
پنج شنبه 13 تیر 1392, 13:15 عصر
اتفاقا قبلنا گشتم دنبال همچین چیزی اگه داریش لطف کن:قلب: تو آمازون کتابی دیدم از wrox بچه ها میگفتن خیلی توپه ولی دریغ از لینک دانلود...

MinusOne
پنج شنبه 13 تیر 1392, 15:36 عصر
یه کتاب فارسی بود آموزش شیء گرایی در 21 روز. ولی جاوا بود فارسی هم بود. ولی ذهنیتتون اشتباهه ، اینجور که شما پشت سرهم پلی مرفیسمو اوررایدو .... رو باهم گفتین منم ترسیدم. به نظرم بهترین راه شروع کردن یک پروژه هست تا زمانی که شما با مشکل درگیر نشین حل نمیشه.

hadi0x7c7
پنج شنبه 13 تیر 1392, 20:59 عصر
این لینک میتونه کمک کنه، توی قسمت Resources برید چند تا کتاب خوب هست.
http://ce.sharif.edu/courses/91-92/1/ce484-1/index.php

mostafi1391
پنج شنبه 13 تیر 1392, 23:00 عصر
بسار متشکرم دوستان یه قراری میذاریم اگه هستین بگین یا علی....
لینکی دادی خیلی عالی بود تو ریسورس همون کتابی رو که قبلا فرموده بودی پیدا کردم:قلب:
ما تازه کارا میشینیم این مدل ایبوکا و منابع میخونیم بعدا میایم میگیم فلان چیز نفهمیدیم لطفا یه بنده خدایی بیاد با چند تا مثال حالیمون کنه اگه مردی هست بگه هستم!!!!

شما دوست عزیز همون کتاب شی گرایی در جاوا بذار ما سعی میکنیم تو ذهنمون مرتبطش بکنیم ادمینای گلو بلبل لطفا دست به این تاپیک نزنین که قراره مرجع بشه
تشکر:بوس:

elhamkarimikarimi
پنج شنبه 13 تیر 1392, 23:12 عصر
بچه ها چرا ما خودمونو پاس می دیم به کتا بها از این کتاب به این کتاب اگه مردید بیاید یاد بدید.من تا به حال هر فیل ماموزشی رو که دیدم می خواد یه پروژه رو راه اندازی کنه خودش اومده یه کلاس تعریف کرده بعد اومده از اون کلاس چند تا آبجکت ساخته و با فیلد ها و توابع کلاس کار کرده همین
اصلا من فیلم آموزشی که بتونه توی پروژه بازم می گم توی پروژه بتونه از مفاهیم بالای شی گرایی استفاده کنه رو ندیدم
فکر نکنم کسی بلد باشه.اگه بلد بودن مثل فوتوشاب که همه بلد ن هر روز یه کتاب بیرون می دن .در مورد شی گرایی هم کتاب الکترونیکی خوبی تولید می کردن .پس نتیجه می گیریم که کسی شی گرایی رو در سطح بالا بلد نیست .

youngold
پنج شنبه 13 تیر 1392, 23:36 عصر
شی گرایی با طرح اولویت ها و نیاز ها معنی داره فقط فقط فقط و فقط این با این دو
ما برای قشنگی کلاس نمینویسیم
ما فقط برای وضوح کد تابع نمینویسیم
و قطعاً هم برای مجموعه توابع بدون فیلد مشترک کلاس نمینویسیم!
و ...

- مشکل همینجاست که میخواید ببینید پروژه های دیگه چه کردن که کار اشتباهیه ، اصلاً سعی نکنید از پروژه های بزرگی که شی گرایی داشتن تقلید کنید. شما برای حداکثر استفاده از هر ابزاری توی این دنیا باید نیاز های خودتون رو باهاش بسنجین نه نیاز دیگران رو، برید ببینید چه مشکلی در کدینگ داشتید یا چیزی که اذیتتون کنه این ها رو مطرح کنید بعد میبینید که شی گرایی راه جلو پاتون قرار میده ، نسبت به اطلاعاتتون و مشکلاتی که دارید از شی گرایی استفاده کنید مطمئن باشین چراغ راهتون خواهد بود ، این بهترین راهنمایی هست که کسی بهتون نخواهد کرد!

- و یک پیشنهاد دیگه دارم براتون ، از فیلد ها و توابع استاتیک استفاده کنید تا علل و اولویت های ساخت شی رو کشف کنید!

youngold
پنج شنبه 13 تیر 1392, 23:49 عصر
- یک مسئله دیگه در رابطه با پروژه هایی که برای یادگیری شی گرایی مرور میکنید هست که قطعاً در کارتون گره ایجاد خواهد کرد ، یک برنامه نویس کار بلد بعد از مدتی کار متمرکز، به مرحله پیش بینی توسعه میرسه که ممکنه در هر زمینه ای از جمله شی گرایی اعمال کنه ، ازین جهت ممکنه تشخیص داده باشه که برای توسعه آینده فلان قسمت رو شی گرا پیاده سازی کنه و اینجاست که شما علل ساخت شی رو در اون پروژه گم خواهید کرد

- یا میتونه برنامه نویس ناشی بوده باشه که برای هر کار ساده ای شی نوشته و حجم کد رو جای اینکه کم کنه زیاد کرده
من سورس بسیاری از پروژه های بزرگ و یا فیلم های آموزشی که مدعی آموزش شی گرایی و کدینگ حرفه ای هستند که میبینم پر از اشتباهاتی هستند که یک برنامه نویس حتی نیمه حرفه ای هم نمیپسنده ، در همین سایت هم کم نیست (کاملاً فنی دارم عرض میکنم و قصد جسارت ندارم) . مشکل دیگه هم اینجاست که هر فرد تازه کاری میخواد اطلاعات درست و غلط و نیمه کارش رو به دیگران منتقل کنه یا به قول خودش آموزش بده، پس به هر سورسی برای آموزش اطمینان نکنید

mostafi1391
جمعه 14 تیر 1392, 01:09 صبح
خیلی خوبه اینجوری بحثمون داره میره فقط به سمتی که یکی بیاد بگه چه چیزه شی گرایی خوبه چه چیزش بده(قصد جسارت به کسی رو ندارم) اینوهم میدونم که یادگیری و به کار بردن شی گرایی بعد 3 سال کد نویسی مداوم ممکنه
شمادوست گلم یانگ اولد بفرما تشریح کن که اصلا چرا بعضیا اونطوری فکر میکنن که باید برای هر چیزی کلاس بسازن

مثلا من دارم خونمون به صورت کلاس مینویسم (به فرض) شما میگی چون پیچ گوشتی در مقابل ماکروویو سادس نباید براس کلاس نوشت؟ خب اگه فردا ماکروویو خراب شد چطوری بدون متدهای پیچ گوشتی میخوای ماکروویو باز کنی؟

ضمنا خانم الهام اینجوری که شما میفرمایی نیست(اول پستی که من عرض کردم خواستم هندونه بذارم تو بغل ملت..):لبخند: چند تا از همشهریام میشناسم که حسابی شی گرایی مسلطا ولی چون خودشون سختی کشیدن جونشون در میره به کس دیگه یاد بدن...

youngold
جمعه 14 تیر 1392, 12:51 عصر
خیلی خوبه اینجوری بحثمون داره میره فقط به سمتی که یکی بیاد بگه چه چیزه شی گرایی خوبه چه چیزش بدهشما اگر قبل پست دادن خوب دقت میکردی (به خصوص که بحث شی گرایی رو حداقل چند بار باید بخونی) متوجه میشدی که توصیه ها کاملاً فنی و کاربردی بود نه تعریف کلیات! تا حالا فکر نمیکنید چرا شی گرایی درک نشده ؟ چون عجله میکنید


تشریح کن که اصلا چرا بعضیا اونطوری فکر میکنن که باید برای هر چیزی کلاس بسازن

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

- در ضمن شما همه حرف های بنده رو نمیخونی ظاهراً ، چون بحث پیش بینی توسعه رو هم مطرح کردم یعنی برنامه نویس با تجربه خودش میدونه اون مثلاً پیچ گوشتی رو باید کلاس بنویسه که بعداً نیاز میشه از کسانی که تازه میخوان درک کنند که همچین انتظاری رو طور صد در صدی ندارید که؟!، برنامه نویس با تجربه حواسش هست و بر فقط هم بر اساس احتمالات کار نمیکنه ، یعنی نمیگه چون یک روزی ممکنه برای یک جز کوچیکی که یک زمانی حالا شاید استفاده بشه کلاس بنویسه اما جوری مینویسه که دستش بسته نشه یا کارش زیاد نشه ، حالا نمیخوام وارد جزئیات بشم بنده فقط یک سری حرکات اشتباه رو به مثال آوردم تا دلایل درک نکردن شی گرایی روش بشن والا منابع آموزشی کم نیست! من نمیگم که شما کلاس ننویس ، دارم میگم در ابتدای کار برای درک شی گرایی فقط برای چیز هایی که تا اون لحظه نیاز داری کلاس بنویس تا درکش کنی ، مفهوم رو رسوندم یا نه؟


- برای اطلاعات فنی : برای تعمیر ماکروویو حتماً نیاز به پیچ گوشتی از جنس خودش ندارید اون مسئله ارث بری و یا اینترفیس هست که در حالت معمول کار اشتباهیه (ازین جهت که پیچ گوشتی چون چیز عمومی هست و برای هر ابزاری ممکنه استفاده بشه شاید ترجیح بدید همه دستگاه ها ازش ارث نبرند و هر جای نیاز شد دستگاه به عنوان پارامتر بهش وارد بشه) چون چرا باید مایکروویو ارث ببره آیا توی مایکروویو شما پیچ گوشتیه؟ خوب اینجا در آینده بعداً کلاس پیچ گوشتی نوشته میشه که کلاس مایکروویو رو به عنوان پارامتر ورودی دریافت کنه یا خیلی انعطاف پذیر تر یک کلاس با متد های استاتیک برای پیچ گوشتی تا فقط هر جزئی از دستگاه رو که خواستید به متد ها پیچ گوشتی پارامتر کنید و جواب بگیرید یا اصلاً همون که شما میگید یک کلاس یا اینترفیس پیچ گوشتی برای ارث بری مایکروویو مینویسید کی جلو شما رو گرفته؟

خیلی هم چیز وحشتناکی نیست (به این شکل که من گفتم) از اشتباه نترسید فوقش دو تا پروژه رو بد بنویسید و مجبور بشین دوباره بنویسین اما در عوض به جای چند سال زمان برای درک شی گرایی هزینه اش رو از اعصاب خودتون دادین!


موفق باشید

elhamkarimikarimi
شنبه 15 تیر 1392, 01:06 صبح
حالا که بحش به اینجا رسید می خواید چکار کنید.کسی هست بگه یا علی

mostafi1391
شنبه 15 تیر 1392, 20:46 عصر
حالا که بحش به اینجا رسید می خواید چکار کنید.کسی هست بگه یا علی

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

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

از همه ی مبتدیای شی گرایی خواهش میکنم سوالاتشون اینجا مطرح بکنن جواب کشیدن از حرفه ای ها با من................:لبخند:

mostafi1391
دوشنبه 24 تیر 1392, 04:24 صبح
آقایون تاپیک بالا کشیدم

خوندم خوندم تا رسیدم به overload and override


1.به نظرم فرقی بین این دو تا اصلا وجود نداره

2.یه متدی override داره به اسم must overrideble این یعنی چی؟ یعنی باید حتما اویرراید بشه؟ مگه زوره من میخوام همون این اویررایدبل خالی بمونه

3. بحث تمپلت به شی گرایی مربوط میشه یا نه؟
فعلا لطف کنین جواب این دو تا رو بدین که دارم با مجوعه سوالات میام...
ممنون

csvbcscp
دوشنبه 24 تیر 1392, 05:31 صبح
بچه ها چرا ما خودمونو پاس می دیم به کتا بها از این کتاب به این کتاب اگه مردید بیاید یاد بدید.من تا به حال هر فیل ماموزشی رو که دیدم می خواد یه پروژه رو راه اندازی کنه خودش اومده یه کلاس تعریف کرده بعد اومده از اون کلاس چند تا آبجکت ساخته و با فیلد ها و توابع کلاس کار کرده همین
اصلا من فیلم آموزشی که بتونه توی پروژه بازم می گم توی پروژه بتونه از مفاهیم بالای شی گرایی استفاده کنه رو ندیدم
فکر نکنم کسی بلد باشه.اگه بلد بودن مثل فوتوشاب که همه بلد ن هر روز یه کتاب بیرون می دن .در مورد شی گرایی هم کتاب الکترونیکی خوبی تولید می کردن .پس نتیجه می گیریم که کسی شی گرایی رو در سطح بالا بلد نیست .

چرا خانم بیات همین امسال یک کتاب خوب درمورد شی گرایی نوشتن، اما فکر نمی کنم پاسخگوی این مشکل شما باشه
چون هدف کتاب ، حفظ سادگیه
اگه دوست داشته باشی میتونی تو سایت کتاب سبز (http://ketabesabz.com/book/14004/%DA%A9%D8%AA%D8%A7%D8%A8-%D9%85%D8%B9%D9%85%D8%A7%DB%8C-%D8%B4%DB%8C-%DA%AF%D8%B1%D8%A7%DB%8C%DB%8C-%D8%AF%D8%B1-#C) پیداش کنی

csvbcscp
دوشنبه 24 تیر 1392, 05:44 صبح
به نظر بنده شی گرایی مثل گرامر یک زبان میمونه، که باید همراه با زبان آموخته بشه
نمیشه به گرامر یک زبان بدون استفاده اون زبان مسلط شد
توصیه من به کسانی که می خوان شی گرایی رو درک کنند اینه که اول همونطور که دوستان اشاره کردند، عجله نکنند
اول مفاهیم رو با حوصله مطالعه کنند ، بعد با مثال های کوچیک شروع کنند
فراموش نکنید که تمام کتاب ها فقط می تونن اول راه رو به شما نشون بدن، هیچ کتابی شما رو حرفه ای نمی کنه، اما هیچ وقت دست از مطالعه برندار، چون تو هر نوشته ای نکته ای هست که به درکت از شی گرایی افزوده میشه
ممنون بابت سوال خوبتون

mostafi1391
شنبه 12 مرداد 1392, 01:18 صبح
:لبخند:من اومدم

ببینین تو کتاب دیتل در مورد قالبهای کلاس و قالبهای تابع خیلی توضیح میده ولی راستش هیچی حالیم نمیشه اخه مسلمون تابع , تابع دیگه میشه هرجایی ازش استفاده کرد یا کلاس کلاس دیگه میشه include ش کرد این قالب دیگه چه ضیغه ای؟ یا اصلا فرق قالبهای کلاس با کلاس های قالب و قالب های تابع و تابع های قالبی چیه

ممنون

parvizwpf
شنبه 12 مرداد 1392, 02:25 صبح
اگه منظور templete هست، اینها همان نوع دهی به کلاسهای شما هشتند . فرض کنید کلاسی دارید میخواهید بهش بگید این کلاس باید از نوع مثلا اینت استفاده کنه یا هر چی حتی ممکنه یه جایی خودتون کلاس نوعی نوشتید حالا میخواید توی کلاسی اونو بکار ببرید. در واقع میگن ما کلاسی داریم که نوع فلان رو برای کارهای داخلی کلاس استفاده میکنیم.

brightening-eyes
یک شنبه 13 مرداد 1392, 10:25 صبح
برا یادگیری شیءگرایی باید چندتا چیزو بدونید:
virtual, public, protected, private
یه سریاشونو توضیح میدم با فقط یه مثال. سوال بود در خدمتم.


class base
{
public:
virtual void function();

};

class obj: public base
{
void function()
{
cout<<"this class uses virtual functions"<<endl;
}
};

omidshaman
یک شنبه 13 مرداد 1392, 17:15 عصر
:لبخند:من اومدم

ببینین تو کتاب دیتل در مورد قالبهای کلاس و قالبهای تابع خیلی توضیح میده ولی راستش هیچی حالیم نمیشه اخه مسلمون تابع , تابع دیگه میشه هرجایی ازش استفاده کرد یا کلاس کلاس دیگه میشه include ش کرد این قالب دیگه چه ضیغه ای؟ یا اصلا فرق قالبهای کلاس با کلاس های قالب و قالب های تابع و تابع های قالبی چیه

ممنون
چرا الکی شلوغش می کنی؟:)
شما فرض کن یک فانکشن داری این قرار توع double,int,float ,... رو بگیره و مقدار برگشتیش هم با توجه به متغیر های دریافت باشه یک راهش اینه بیایم برای هر کدوم یک فانکشن بنویسیم هی کپی پست کنیم یک راه دیگه هم هست که بیایم از template استفاده کنیم
شما یک فانکشن در نظر بگیر که برای به توان رسوندن نوشتی

int power(int num,int pow)
{
int temp=num;
while(pow>1)
{
num*=temp;
pow--;
}
return num;
}
خب حالا اگر این فانکشن رو این جوری صدا بزنی درسته

int a=3,b=4;
int c= power(a,b);
ولی اگر قرار باشه این جوری باشه چی؟

float a=3.2;
float c= power(a,4);
تو این حالت کامپایلر a رو تبدیل می کنه به int یعنی بازم جواب میشه همون ۸۱ برای حل این مشکل مجبوری دوباره همین فانکشنو یک بار دیگه بنویسی که این بار float بگیره به عنوان متغیر اول و یک float هم برگردونه خب حالا راهی که توی C++‎‎‎‎‎ برای حل این مشکل هست template ه
شما میای به جای این که فانکشن رو ۳ بار بنویسی برای double ,float ,int میای یک بار با template مینویسی به این شکل

template<class T>
T power(T num,int pow)
{
T temp=num;
while(pow>1)
{
num*=temp;
pow--;
}
return num;
}
برای کلاس ها هم به همین شکل یک مثال خوب برای کلاسی که از template استفاده کرده vector ه که شما می تونی هر نوع تایپی رو توش دخیره کنی

brightening-eyes
یک شنبه 13 مرداد 1392, 20:31 عصر
یه امکان دیگه C++‎‎ تو شیءگرایی اینه که شما میتونید از تمام داده ها اعم از struct, class, int, etc استفاده کنید.
البته داده ای به اسم etc نداریم.
خوب اینجا از typename استفاده میکنیم.
یعنی به جای اینکه بزنیم:


template <class t>

میزنیم:


template <typename t>

این یه امکان دیگه ی شیءگراییه که برا vector ازش استفاده شده
خاما protected و private دیگه چین؟
خوب اگه کلاسمون پابلیک ممبر داشته باشه یعنی اینکه تو همه ی کلاسها میشه ازشون استفاده کرد.
پس private دیگه چه نسخه ایه؟
احالا اگه پرایویت باشه یعنی شما حق نداری تو کلاسهای دیگه ازشون استفاده کنید.
البته هیچ جایی
خوب protected
یه چیز بین این دو تا
یعنی باید از یه سری تابع استفاده کنیم که بتونه به این access بشه
باید برا نوشتن این توابع از friend استفاده کنیم.
مثال:


class class1
{
protected:
char* name="empty";
public:
friend char* getname()
{
return name;
}
};

بازم سوال بودش در خدمتم.

mostafi1391
دوشنبه 14 مرداد 1392, 01:31 صبح
سپاس از همه

جاداره از همه به ویژه برایتینگ ایز که میدونم کم بینا هستن تشکر بیشتری داشته

بکنم ازتون خواهش میکنم به احترام ایشون سایز فونتتون تو این تاپیک بزرگ باشه

بحث فنی:

اولین نتیجه ای که از صحبتاتون گرفتم اینکه template فرقی با قالب نداره هریکین

اما omidshaman جان اگه قرار به استفاده از تابع در دو حالت مگه نمیشه overload کرد؟

این چیزی هم که درمورد ویکتور فرمودی بیشتر بازش کن راستش من از ویکتور

همین قد حالیم که شکل پیشرفته تر آرایه هست و به این صورت تعریف میشه

vector name

brightening-eyes
دوشنبه 14 مرداد 1392, 05:37 صبح
نه عزیز
وکتر اینجوری تعریف نمیشه
اینجوری که مینویسم تعریف میشه


vector <type> name;

نمیخواد فونت نوشته رو بزرگ کنید با magnifier میخونم.
اینجوری درست نمیتونم ببینم چشمم درد میگیره
اما برا یادگیری واقعی شیءگرایی باید واقعا صبر داشته باشید.
من خودم که میخوام با کلاس کار کنم قبلش فکر میکنم ببینم واقعا این کلاسی که مینویسم امکان شیء بودنو داره یا الکی دارم تعریفش میکنم؟
اما راجع به ماکرو ویو که شما گفتی فرضا خراب شد.
خوب یه سوال:
وقتی پیچگوشتی میتونه بره تو یه تابع جمع بشه من چرا باید یه شیء براش بنویسم؟
مثلا یه چیز مثل ماکرو ویو تابع خراب شدنشو باید از نوع virtual تعریف کنیم تا اگه خراب شد تابع پیچ گوشتی call بشه و ماکرو ویو ما واز بشه و ما بتونیم با توابع یا اشیای دیگه درستش کنیم.
همینطور میتونه تو تابع پیچگوشتی یه پارامتر از نوع کلاس بگیره که وقتی بهش ماکرو ویو رو شناسوندیم بازش کنه
برا بستنشم شما میتونید یه bool تعریف کنید که فرضا true بود بازش کنه و اگه false بود پیچ گرامی رو ببنده
سوال بودش در خدمتم.

omidshaman
دوشنبه 14 مرداد 1392, 13:07 عصر
وکتور هم با template پیاده سازی می شه

جان اگه قرار به استفاده از تابع در دو حالت مگه نمیشه overload کرد؟
شدنش میشه توضیح هم دادم ولی سخت تره باید چند بار یک کد خاصو بنویسی حالا 2 حالت رو میشه مثلا وکتور که قراره n مدل رو دخیره کنه رو چی اونم میای n بار می نویسی ؟

این یک وکتور ساده که همین جور که میبینی با template نوشه شده و اگر تست کنی هر جور متغیری که بخوای رو می تونی توش دخیره کنی
http://codepaste.net/jccgz5
البته اینی که من نوشتم شباهتی زیادی به وکتور نمیده :) برای سادگی یک قسمتاییشو حدف کردم

omidshaman
دوشنبه 14 مرداد 1392, 14:01 عصر
یه امکان دیگه C++‎‎‎‎‎‎‎‎ تو شیءگرایی اینه که شما میتونید از تمام داده ها اعم از struct, class, int, etc استفاده کنید.
البته داده ای به اسم etc نداریم.
خوب اینجا از typename استفاده میکنیم.


template<typename T > با

template <class T>
هیچ فرقی نداره
حتی مثلا جاهایی که قراره 2 تا template داخل هم باشه مجبورین از مدل دوم استفاده کنین

brightening-eyes
دوشنبه 14 مرداد 1392, 14:24 عصر
این دوتارو میدونم عزیز ولی خیلیا از typename استفاده میکنن دلیلشم اینه که آبجکت اضافه تعریف نمیشه
هیچ فرقی ندارن
اونم وقتی استفاده میشه که بخوای با یه کلاس یه کار بکنی
البته میتونید تو کلاس یه سری توابع تعریف کنید و کلی کار ازش بکشید.

omidshaman
دوشنبه 14 مرداد 1392, 14:38 عصر
این دوتارو میدونم عزیز ولی خیلیا از typename استفاده میکنن دلیلشم اینه که آبجکت اضافه تعریف نمیشه
.
منظورتو دقیق بگو الان ابجکت اضافه تعریف نمیشه یعنی چی ؟ مگه با class ابجکت اضافه تعریف میشه ؟
خب یک نفر که میاد این تاپیکو می خونه تو ذهن شما که نیست! اشتباه برداشت می کنه دیگه

brightening-eyes
دوشنبه 14 مرداد 1392, 20:31 عصر
خوب منظور من اینه که:
اگه شما با کلاس تعریف کنید مموری بیشتری گرفته میشه تا typename
البته نه زیاد.
بیشتر ازش برای استفاده از دو تا تمپلیت تو هم استفاده میشه.

omidshaman
دوشنبه 14 مرداد 1392, 21:32 عصر
خوب منظور من اینه که:
اگه شما با کلاس تعریف کنید مموری بیشتری گرفته میشه تا typename
البته نه زیاد.
بیشتر ازش برای استفاده از دو تا تمپلیت تو هم استفاده میشه.
نه همون جوری که گفتم هیچ فرقی ندارن ربطی به گرفتن مموری هم نداره از نظر مصرف مموری مقدار مصرفی دقیقا برابره !!
اکثر source code هایی هم که من دیدم class استفاده کردن

brightening-eyes
سه شنبه 15 مرداد 1392, 00:03 صبح
خوب با این حسابی که شما میگی کلاس و typename یکین.
پس میشه به جایی که بنویسیم:


class obj

بنویسیم:


typename obj

نمیشه دیگه! با هم فرق میکنن
البته من تا حالا سعی نکردم توابعمو با تمپلیت بنویسم.
واسه ی اینه که اینجوری میگم.
اون چیزیم که میگم تو کتاب C++ تو cplusplus.com بوده ولی کتاب خوبیه

omidshaman
سه شنبه 15 مرداد 1392, 00:24 صبح
typename توی template دقیقا معادله class ه
اگر شک داری میتونی این جا رو نگاه کنی
http://stackoverflow.com/questions/213121/use-class-or-typename-for-template-parameters
توی .cplusplus.com هم به این مطلب اشاره شده پاراگراف ۳ به بعد
http://www.cplusplus.com/doc/tutorial/templates/