توضيحاتت خوبه اما خيلي از اينور به اونور مي پري، ترتيبي تو آموزشت نداري يهو رفتي كلاس درس ميدي در حلي كه قبلش كلي مطالب بايد ميگفتي
توضيحاتت خوبه اما خيلي از اينور به اونور مي پري، ترتيبي تو آموزشت نداري يهو رفتي كلاس درس ميدي در حلي كه قبلش كلي مطالب بايد ميگفتي
برعکس خیلی هم خوب پیش میره، اگر با شی گرایی شروع کنیم خیلی به نفعمون میشه چون بعدا به هر چیزی به شکل یه آبجکت نگاه میکنی و ...(معلوماتم ته کشید)نوشته شده توسط Peyman2003 [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
من نميگم بد توضيح ميدن خيلي خوبه اما يهو پريدن به جايي واسه كسي كه هيچي نميدونه كمي عجيب ميشه! منم خودم يه زماني...برعکس خیلی هم خوب پیش میره، اگر با شی گرایی شروع کنیم خیلی به نفعمون میشه چون بعدا به هر چیزی به شکل یه آبجکت نگاه میکنی و ...(معلوماتم ته کشید)
به نظرم پله ها رو بالا پايين رفتن
من اگه خدا عمري بده از 5 شنبه به ايشون كمك ميكنم و كلاس رو كاملا توضيح ميدم اگه حالم خوش بودش آخه 5 شنبه كنكور كارشناسي دارم و فكر نمي كنم قبول بشم
سلام .
ممنون از اظهارنظرهايي که کردين .
در مورد آرايه ها و اشاره گرها به طور مختصر توضيح مي دم و يکراست ميرم سراغ شيء گرايي و مطالب باقيمونده به مرور تو اون بحث ها مطرح ميشه .
آرايه :
يه آرايه رو ، ساختمان داده اي فرض کنين که تمام اعضاي اون از يک نوع هستن . ( يا همشون int ، يا همشون char و ... )
مي خوايم يه آرايه ي 5 عضوي تعريف کنيم از نوع int
اينجا متغير a داراي 5 خانه است که تو هر کدوم ميشه يه متغير از نوع int جاي داد . حالا چجوري به اين خونه ها دسترسي داشته باشيم :کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
فرض کنين آرايه مونو تعريف کرديم . مي خوايم مقاديري توي آرايه درج کنيم . اين آرايه در واقع شامل 5 متغير زير است :
به اون اعدادي که توي دو تا علامت [] قرار مي گيره انديس يا index مي گيم . انديس آرايه از صفر شروع ميشه . به خاطر همين هميشه انديس آخرين خونه ي آرايه يکي کمتر از ظرفيت آرايه است . ( فهميدين که چي شد ؟ )کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
دو تا مفهوم معمولا در مورد آرايه مطرح ميشه که خيلي مهمه :
1 - انديس n ام .
2 - n امين عضو .
فرض کنين اين آرايه رو به شکل زير مقدار دهي کرديم :
وقتي ميگيم انديس سوم آرايه a ، يعني عدد 6 .کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
وقتي ميگيم سومين عضو يعني عدد 5 .
ديدين چقدر مهم بود ؟ .
يه چيز ديگه .
a يک آرايه است . يعني حاوي آدرس اولين خونش . چون اين آرايه از نوع int هست و int هم چهار خونه حافظه مي گيره پس آدرس خونه بعدي که انديس 1 باشه ميشه آدرس خونه اول + 4 .
اين نکته خيلي جالبه ها . به غير از آرايه ها هيچ جا نميشه به صراحت گفت که آدرس دو خونه تو حافظه پشت سر هم باشه .
مقدار دهي اوليه به آرايه ها:
اگه تو تعريف آرايه که مقدار دهي کردين هيچ ، اگه نکردين تو يه جاي ديگه بايد دونه به دونه مقدار دهي کنين . مثل اون بالا کاري که من کردم .
حالا فرض کنيم تو تعريف آرايه ميخوايم مقداردهي کنيم . چندين حالت داريم که نمي دونم چند حالته . حالا بگم بعد مي شمرم .
اول اينکه اگه بخوايم تو تعريف آرايه مقدار دهي کنيم بايد ليست مقادير داخل آکلاد باز و بسته باشه .
دستور زير رو در نظر بگيرين :
مي بينين که ما يه آرايه 5 عضوي تعريف کرديم و براي چهار تا عضو مقدار اوليه مشخص کرديم . عضو آخر که مقدار نداره ، مقدار صفر مي گيره .کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا يه سوال :
اگه بخوايم به همه صفر بديم ، چيکار کنيم راحت تره ؟
.
.
.
آفرين . درسته . دستور زير رو مي نويسيم :
به عضو اول صراحتا مقدار صفر داديم ، بقيه هم که مقدار نگرفتن ، به طور پيش فرض صفر مي گيرن .کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
يه حالت هم اينه که اگه آرايه 5 عضوي تعريف کرديم ، 5 تا عدد تو ليست بنويسيم . تو اين هم که حرفي نيست . به طور صريح به همه مقدار داده ميشه .
حالت سوم اينه که ليست مقدار اوليه بيشتر از طول آرايه ( تعداد اعضاي آرايه ) باشه . در اين حالت Compile Error.
يه حالت هم اينه که :
تو اين جا مي بينين که تعداد اعضا مشخص نشده . همون طور که احتمالا حدس زدين ، تعداد اعضا ميشه 7 . چون تو ليست مقدار اوليه ، 7 عدد مشخص شده . بنابراين از [ a [ 0 داريم تا [ a [ 6 .کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
فکر کنم شد 4 حالت .
حالا آرايه هاي کاراکتري :
همون طور که قبلا اشاره شد نوع داده char فقط مي تونه يک کاراکتر يا همون حرف تو خودش داشته باشه . حالا اگه بخوايم چند کاراکتر يا همون به قول ++C ، رشته داشته باشيم مي تونيم آرايه اي از کاراکتر ها رو تعريف کنيم .
تعريفش که فرقي نمي کنه . فقط نکاتي در مورد مقدار دهي اوليه مي گم .
به دو روش مي تونيم به آرايه هاي کاراکتري مقدار اوليه بديم .
روش اول :
الان کامپايلر اين دستورو به شکل زير پردازش کرده :کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
هميشه آخرين عضو يک آرايه کاراکتري 0\ در نظر گرفته ميشه .کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
متوجه هستيد که در اينجا تعداد اعضا مشخص نبود. بنابراين تعداد اعضا برابر 11 ميشه .
يه حالت مقدار دهي هم به شکل زير است :
يعني کاراکترها رو دونه به دونه بهش ميديم و آخر سر هم حتما بايد کاراکتر 0\ رو ما مشخص کنيم . ولي در حالت اول نياز نبود . اگه بخوايم تعداد اعضاي آرايه رو خودمون مشخص کنيم ، حتما بايد يه جاي اضافي هم براي 0\ در نظر بگيريم . مثلا اگه مي خوايم sin رو داشته باشيم بايد به جاي 3 خانه ، 4 خانه در نظر بگيريم . در غير اين صورت Compile Errorکد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
نکته مهم : اگه نمي خوايم تو تعريف آرايه مقداردهي رو انجام بديم ، حتما بايد تعداد اعضا ذکر بشه . مثلا دستور زير = Compile Error .
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
آرايه هاي دو بعدي :
آرايه هاي اخير که بحث شد همه يک بعدي بودن . مفاهيم آرايه هاي دوبعدي هم تقريبا همينه .
براي تعريف آرايه دوبعدي 3 در 4 :
اين يعني 4 سطر و 5 ستون . ( چون انديس گذاري آرايه ها از صفر شروع ميشه . )کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
دستور زير رو در نظر داشته باشين :
مقدار دهي فوق به صورت زير پردازش ميشه :کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
البته آرايه هاي بيش از دو بعدي هم داريم . مفاهيم همينا هستن . معمولا از آرايه هاي سه بعدي به بعد به ندرت استفاده ميشه .کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اين هم از آرايه ها ...................
جناب آقاي (ويا به احتمال 1% خانم) sin2x=2sinxcosx :
با سلام
با تشكر مجدد از جنابعالي، مطمئنا" بسياري از اين مساعي مستفيض مي گردند كه بنده نيز در اين حلقه ام.لذا مستدعيست مراتب باي نحو كان پيگيري و سعايت بدگويان مانع از ادامه تلمذ نگردد .صحت مسير تائيد و روش خلاقانه اتان دريافت نهايه را ميسور مي نمايد.زياده جسارت است.حق يارتان
دوست كوچكتر شما
فقط تجربه خودمو میگم. اگه نویسنده اول یه فهرست از مطالبی که قرار گفته بشه درست کنه، آخر کار مرتب کردن مطالب خیلی راحت تره. بی فهرست برای هر نظم دادنی باید کلی تغییر بده. میشه حتتا پستای ناقصی نوشت و بعدا کاملشون کرد!
سلام . باز هم ممنون از دوستان عزيز بابت اظهارنظرهايي که فرمودن .
در مورد اينور و اونور پريدن : باشه ديگه تکرار نمي شه . ( همون طوري که ديدين تو بحث آرايه ها ديگه اين کارو نکردم . )
در مورد فهرست هم : چشم براي از اين به بعد فهرست مي ذارم .
ولي باز هم جمله قبليمو تکرار مي کنم :
"خواهشا از هيچ گونه اشتباه علمي و املايي چشم پوشي نکنيد و حتما تذکر دهيد ."
فهرست مطالبي که بعدا بحث ميشه :
1- نابود کننده ها يا Destructor ها
2- اشياء Const و توابع Const
3- کلاس ها و توابع Friend و مفهوم دوستي در کلاس ها
4- اشاره گر this
5- عملگر هاي new و delete
6- اعضاي static کلاس و مفهوم static بودن
7- بحثي کامل در مورد Operator Overloading يا همون سربارگذاري عملگر ها
8- ارث بري و مفاهيم مربوط به آن
9- مبحث Polymorphism و توابع Virtual
10- بحث در مورد توابع بازگشتي
11- اشاره گرها
12- کار با فايل ها
13- مباحثي در مورد ساختمان داده ها ( صف و پشته و ليست پيوندي و ... )
14- آشنايي با وپژگي هاي کلاس string و نحوه استفاده از آن
15- حل مسائل گوناگون مطرح در زبان ++C
ان شاءالله که عمري باقي باشه و بتوان به تمامي اين موارد رسيد .
موفق باشيد .............
سلام. اگه اجازه بدين اشاره گرها رو شروع کنيم .
چون بعدا نياز ميشه .
اشاره گرها يه نوع متغير هستن . اما به جاي يک مقدار ، يک آدرس متغير رو تو خودشون نگه مي دارن .
در زير من يک متغير اشاره گر که به يک مقدار صحيح ( يعني int ) اشاره مي کند ، معرفي مي کنم :
اگه بخوايم بيش از يک متغير اشاره گر رو تو يک خط معرفي کنيم بايد قبل از هر کدوم يه star ( * ) بذاريم . عملگر * تو بالا نشون ميده که متغير aPtr يک اشاره گر به int هست .کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
به غير از آدرس يک متغير ، عدد صفر تنها مقداري است که مي تواند در يک متغير اشاره گر قرار گيرد .
با عملگر & ميشه به آدرس يه متغير دسترسي داشت . مثلا در زير ما با آدرس يک متغير به اشاره گر بالايي مون مقدار ميديم :
آدرس يه متغير يه همچين عدديه : 0015F670 . لازم به ذکره که خود متغيرهاي اشاره گر داراي آدرس هستن .کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
همون طوري که ديدين ، آدرس متغير a رو تو يه اشاره گر به int قرار داديم . حالا هر تغييري که تو مقدار اين اشاره گر ميشه ، تو a هم اعمال ميشه .
فرش کنين که a = 3 باشه . ما اگه بخوايم aPtr رو چاپ کنيم يه آدرس ( آدرس متغير a ) چاپ ميشه . اگه بخوايم مقدار اون محلي که اين اشاره گر به اون جا اشاره مي کنه چاپ بشه از عملگر * به شکل زير استفاده مي کنيم :
الان عدد 3 چاپ ميشه .کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
يه مطلب مهم تو آرايه ها و اشاره گرها که يه کمي دقت مي خواد :
قبلا تو آرايه ها گفتيم که آدرس خونه هاي يک آرايه پشت سر هم هستن . فرض کنين آرايه b رو با 4 عضو داريم . يعني :
يه اشاره گر هم داريم که آدرس خونه اول اين آرايه رو داره . يعني :کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
همون طور که مي دونين اسم آرايه معادل آدرس خونه اول آرايه است . يعني دستور زير با دستور بالايي فرقي نداره :کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا ++bPtr باعث ميشه که bPtr به جاي عضو اول به عضو دوم اشاره کنه . دستور bPtr +=2 باعث ميشه که اشاره گر bPtr به عضو سوم آرايه اشاره کنه .کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
يادتونه گفتم ؟
"به غير از آرايه ها هيچ جا نميشه به صراحت گفت که آدرس دو خونه تو حافظه پشت سر هم باشه ."
اين جا هم يه چيزي ميگم :
استفاده از اين گونه محاسبات روي اشاره گري که به يک آرايه اشاره نمي کند خطاي منطقيه .
اين دو جمله کاملا به هم مربوطن .
خوب حالا تقريبا ميشه گفت به طور کامل وارد بحث کلاس ها و شيء گرايي شديم . از اين به بعد هر چقدر بگين مطلب رو کشش مي ديم . هر سوالي در اين رابطه هست بپرسين . يا من و يا اگر من هم بلد نباشم اين جا اساتيد حضور دارن که مي تونن راهنمايي کنن .
Destructor يا نابود کننده :
همون طوري که گفتيم سازنده يا Constructor تابع عضو خاصي از يه کلاسه که زماني فراخواني ميشه که يک شيء از اون کلاس ايجاد ميشه . جاي ديگه نمي تونيم به طور صريح اين تابع رو فراخواني کنيم . در مقابل Constructor ، نابود کننده يا Destructor قرار داره . Destructor هم به طور اتوماتيک احضار ميشه . خوب کي ؟
همون طوري که احتمالا حدس زدين ، زماني که يک شيء نابود ميشه .
خب شيء نابود ميشه يعني چي ؟
فرض کنين شيء رو داخل يه تابع تعريف کرديم . تابع با آکلاد باز شروع ميشه و با آکلاد بسته تموم ميشه . تموم ميشه يعني کار تابع به پايان مي رسه و اجرا خاتمه مي يابه . پس بنابراين وقتي اجراي برنامه به آکلاد بسته مي رسه يعني Scope اي که شيء تو اون تعريف شده ترک ميشه و اين به معناي نابودي شيء هست . وقتي برنامه رو Trace کنين ( يعني خط به خط اجرا کنين و تغييرات رو هر لحظه ببينين ) متوجه ميشين که وقتي اجراي برنامه به آکلاد بسته مي رسه ، Destructor احضار ميشه .
نابود کننده هم مثل سازنده هيچ چيزي برنمي گردونه . بنابراين در مورد Destructor هم از کلمه void به عنوان نوع داده برگشتي استفاده نمي کنيم . حالا نابود کننده بر خلاف سازنده هيچ آرگوماني هم نمي تونه بگيره . بنابراين ليست پارامترهاي نابود کننده هميشه خاليه . حالا چجوري به کامپايلر بفهمونيم که کدوم تابع عضو ما Destructor هست ؟
مثل سازنده بايد دقيقا اسم کلاس باشه ، فقط قبلش يه علامت tilde ( ~ ) هم مي ذاريم .
خوب من اون بالا يه جمله اي گفتم : "چجوري به کامپايلر بفهمونيم که کدوم تابع عضو ما Destructor هست ؟"
چه اصراريه به کامپايلر اينو بفهونيم ؟
بله درسته ...
چون کامپايلر سازنده و نابودکننده رو احضار ميکنه نه برنامه نويس . بنابراين بايد براش بشناسونيم .
يه فرق ديگه اي که سازنده با نابودکننده داره اينه که تو هر کلاس ميشه چند تا سازنده داشت ولي نابود کننده يدونه است .
هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)