آموزش زبان برنامه نویسی c++

187
ش وز م آ ان ب ز امه رب ب ی س ی و نC ++ مان ساز ر ب و ي" مپ کا رف ص ر* ظ ن آز ر ه ا* ظ ی، ک1 ب ر ي ف رها ب و ي" مپ کا ه ب ش ش وآحد م ي س ق ت ی م د: وب ش1 وآحد- وزودی: ن ي آ وآحد ه ف ي* ظ و ت ف ا دزب عات لا ظ آ زآ ت ف ا دآزد. دزب عات لا ظ آ آز ق ن ر ط حه ف ص د، ي کل م\اوش، ر کي\ س آ و ن ف رو ک ي م و ام ج ن ... آ ی مرد.\ ب دe ب ماوش حه ف ص د ي کل ر کي س آ2 وآحد- ی ج رو \\\\ خ: ه ف ي* ظ و ن ي آ وآح\ د، ل ب ا ق اده ف ي\ س آ \ ردن ک ع\ ات لا ظ آ ش ردآزe\ ب ده، س\ دز ازج ح\ آز ر ب و ي" مپ ک\ ا ی م د اس ب و ر ب و ي" مپ کا آز ی ل1 ب وسا ونe چ م ه حه ف ص، ش ی ما ن ر، گe ب اe ح و گ د ي ل ب ورآی ب... ن ي آ وز* ظ ن م اده ف ي س آ ی م د. ي ک حه ف ص ش ی ما ن و گ د ي ل ب حه ف ص ش ی ما ن1

Upload: lphamed

Post on 29-Jul-2015

165 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: آموزش زبان برنامه نویسی C++

++C نویسی برنامه زبان آموزش

کامپيوتر سازمان

شوند: می تقسيم واحد شش به کامپيوترها فيزيکی، ظاهر از نظر صرف   

دريافت. را اطالعات دريافت وظيفه واحد اين : ورودی واحد- 1    طريق از اطالعات داردپذيرد. می انجام... و ميکروفن و اسکنر ماوس، کليد، صفحه

کليد صفحه ماوس اسکنر

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

کند. می استفاده منظور اين

نمايش صفحه نمايش صفحه بلندگو

افشان جوهر چاپگر ليزری چاپگر

ورودی واحد از شده دريافت اطالعات موقت نگهداری وظيفه واحد اين : حافظه واحد- 3    پردازش آماده سرعت به است، نياز آنها به که هنگامی اطالعات، تا باشد، می دارا را

هنگام در تا کند می نگهداری خود در را شده پردازش اطالعات واحد، اين همچنين شوند؛

1

Page 2: آموزش زبان برنامه نویسی C++

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

RAM اوليه حافظه

و تقسيم، و ضرب تفريق، جمع، مانند محاسباتی اعمال انجام وظيفه واحد اين : منطق و محاسبه واحد- 4   باشد. می دارا را است بزرگتر يک کدام اينکه تشــخيص و عدد دو مقايسه مانند منطقی اعمال نيز

H و دارد عهده به را کامپيوتر مديريت وظيفه واحد اين : مرکزی پردازش واحد- 5    در دايما واحد حافظه، واحد خروجی، واحد ورودی، واحد قبيل از مختلف های بخش نظارت حال

می... منطق و محاسبه U. و مثال به را ورودی واحـد طريق از شـده وارد های داده باشـد پس و فرستاده منطق و محاسبه واحد به را ها داده سپس و کند می منتقل حافـظه واحـد

U را ها داده آنها، روی بر نياز مورد عمليات انجام از واز کرده منتقل حافظه واحد به مجددافرستد. می خروجی واحد به آنجا

CPU مرکزی پردازش واحد

شدن خاموش با و باشد می دارا را اطالعات دايمی نگهداری وظيفه واحد اين : ثانويه حافظه واحد- 6   وسايلی. نمی بين از آن روی بر موجود اطالعات کامپيوتر CD ، فالپی ،( Hard Disk) سخت ديسک مانند روند، DVD باشند. می ثانويه حافظه واحد جزء حافظه کارتهای و

HDD سخت ديسک

2

Page 3: آموزش زبان برنامه نویسی C++

FDD درايو فالپی فالپی ديسک

CD ROM CD درايو

نويسی برنامه های زبان انواع

بعضی. می مختلفی زبانهای به را نويسی برنامه دستورات نويسان برنامه    U دستورات نويسند برای مستقيمابه. ترجمه به نياز بعضی و باشند می فهم قابل کامپيوتر دسته سه به نويسی برنامه زبانهای کلی طور دارندشوند: می تقسيم

ماشين زبانهای- 1   اسمبلی زبانهای- 2   باال سطح زبانهای- 3   

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

+1300042774+1400593419+1200274027

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

زبان) توسط تبديل( کامپيوتر دستورات. می اسمبلر کند، می ماشين جمع يکديگر با را متغيير دو نيز زير گوينددهد. می قرار سومی متغيير در را حاصل و کرده

LOAD BASEPAYADD OVERPAYSTORE GROSSPAY

خطا بودن دشوار و نويسی برنامه روند بودن کند دليل به نيز اسمبلی زبان کامپيوتر پيشرفت و گسترش با    عاليم کلمات، از آنها ساختار در که هستند زبانهايی باال سطح زبانهای داد؛ باال سطح زبانهای به را خود جای يابی

برنامه. شده استفاده محاوره در متداول نمادهای و به نياز اجرا از قبل زبانها اين با شده نوشته های است نام به ای ويژه افزارهای نرم توسط امر اين که گردند، کامپيوتر توسط استفاده قابل تا دارند تفسير و ترجمه

کار. می انجام کامپايلر از. می انجام سهولت به آنها خطايابی و است ساده زبانها اين با کردن گيرد گيرد

3

Page 4: آموزش زبان برنامه نویسی C++

دستورات. اشاره توان می... و بيسيک ، C پاسکال، به باال سطح زبانهای معروفترين با را متغير دو نيز زير کرددهد. می قرار متغيرسوم در را حاصل و کرده جمع يکديگر

grosspay = basepay + overtimepay

ها الگوريتم

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

شود. می ناميده الگوريتم ، گيری تصميم

باشند: داشته را زير های ويژگی بايد ها الگوريتم کلی حالت در   

برساند. نظر مورد نتيجه به را ما بايد الگوريتم الف(يابد. پايان محدود زمان در ب(گيرند. قرار سرهم پشت منطقی ترتيب به بايد دستورالعملها ج(باشند. سؤالی ، امری صورت به بايد ها الگوريتم جمالت د(باشد. داشته پايان و آغاز نقطه بايد الگوريتم هر ه(

اطالعات آن در توان می که است حافظه های خانه از استفاده دارد وجود کامپيوتر در که هايی توانايی از يکی    قرار آن در را جديدی مقدار و داده تغيير را آن محتويات توان می الگوريتم اجرای از لحظه هر در و داد قرار را

دهد. می افزايش تر پيچيده مسائل حل برای را ما کارايی ويژگی اين دهيم

اتومبيل. يک شده پنچر چرخ تعويض الگوريتم : مثال

0. شروع- بگذاريد. اتومبيل زير را جک- 1کنيد. باز را شده پنچر چرخ پيچهای- 2کنيد. خارج را چرخ- 3بگذاريد. شده پنچر چرخ جای به را يدک چرخ- 4ببنديد. را پيچها- 5.5 مرحله به اند نشده سفت پيچها اگر- 6 برو بياوريد. پايين را جک- 7بگذاريد. اتومبيل عقب صندوق در را شده پنچر چرخ- 89. پايان-

از بزرگتر عدد دو مجموع که شود تعيين سپس و شود دريافت ورودی از عدد دو که بنويسيد الگوريتمی : مثالنه. يا است 20

. شروع- 0کن. يافت در ورودی از را b و a عدد دو- 12 -a+b کن. محاسبه را.6 مرحله به بلی اگر است؟ a+b>20 آيا- 3 برو خير. بنويس- 4.7 مرحله به- 5 برو بلی. بنويس- 67. پايان-

رسيد. کامپيوتر کمک به مسئله يک حل جهت مناسب حلی راه به توان می دقيق ساماندهی و ريزی برنامه با    خود هدف از نيز را نويس برنامه بسيار، مشکالت بروز ضمن الگوريتم نوشتن در دقتی بی و توجهی کم هرگونه

4

Page 5: آموزش زبان برنامه نویسی C++

حل راه سپس و داشت مسئله صورت از کاملی و صحيح درک بايد رسيدن هدف به برای لذا کرد؛ خواهد دورو. الگوريتم صورت به را نظر مورد نظر مورد نويسی برنامه زبان به را نظر مورد الگوريتم نهايت در بنويسيمبرای. تبديل کنيد: توجه زير مثالهای به الگوريتم نوشتن و مسائل حل شيوه بهتر درک کنيم

کند. حساب را 50 از کوچکتر و 7 مضرب طبيعی اعداد مجموع که بنويسيد الگوريتمی : مثال

داريم. نياز حافظه خانه دو به الگوريتم اين نوشتن برای

0. شروع- بده. قرار را صفر عدد sum حافظه خانه در- 1بده. قرار را 7 عدد index حافظه خانه در- 2کن جمع sumمقدار با را index مقدار- 3

بده. قرار sum در را حاصل و کن جمع index مقدار با را 7 مقدار- 4

بده. قرار index در را حاصل و .3 مرحله به خير است،اگر 50 بزگتراز indexآيا- 5 برو کن. چاپ را sum محتوای- 67. پايان-

کنيد: توجه زير شکل به

index آيا" شرط سرانجام اينکه تا کند، می تغيير index و sum حافظه مقادير شکل همانند فوق الگوريتم در    رسد. می پايان به الگوريتم و شد خواهد چاپ خروجی در sum محتوای لذا شود می بلی" است 50 از بزرگتر

کند. می پيدا ادامه الگوريتم فوق شکل همانند لذا باشد، می خير فوق شرط قبلی مراحل در اما

کند. چاپ را کوچکترين و کرده دريافت ورودی از را عدد 1000 که بنويسيد الگوريتمی : مثال

به را عدد اولين ليست در عدد کوچکترين کردن پيدا برای دهند، می را اعداد از ليستی شما به که کنيد فرض    قبلی عدد از جديد عدد اگر کنيد، می مقايسه آن با را بعدی عدد سپس گيريد می نظر در کوچکترين عنوان

بود. خواهد کوچکترين قبلی عدد همان نه گر و گيريد می نظر در کوچکترين عنوان به را جديد عدد بود کوچکتر بود، عدد کوچکترين عنوان به بررسی هر در که عددی پايان در دهيد؛ می ادامه ليست انتهای تا را روند اين

توجه. خواهد ما نظر مورد جواب گرفته نظر در خود ذهن در را عدد يک همواره شما روال اين در که کنيد بود می اختصاص مرحله درهر عدد کوچکترين به را حافظه خانه يک ما نظر مورد الگوريتم نوشتن برای بوديد،دهيم.

0. شروع- 1 -min کن. دريافت را2 -i =1. 3 -a کن. دريافت را

5

Page 6: آموزش زبان برنامه نویسی C++

.min = a آنگاه a<min اگر- 45 -i = i + 1. .8 مرحله به i>=1000 اگر- 6 برو .3 مرحله به- 7 برو 8 -min کن. چاپ را9. پايان-

ولی. می الگوريتم شدن حجيم و طوالنی سبب که بودند فارسی جمالت صورت به قبلی های الگوريتم شدنداين. رياضی جمالت صورت به بيشتر اخير الگوريتم نگارش شدن ساده و الگوريتم درک راحتی سبب شيوه بود

از. می آن شما. خواهيم نگارش جديد شيوه به را ها الگوريتم نيز بعد به اين شود اين از کنيد سعی نيز کردکنيد. استفاده شيوه

اضالع توانند می اعداد اين که شود تعيين و شود دريافت ورودی از عدد سه که بنويسيد الگوريتمی : مثالخير. يا باشند مثلث

0. شروع- 1 -a وb وc بگير. ورودی از را.7 به a>b+c اگر- 2 برو .7 به b>a+c اگر- 3 برو .7 به c>a+bاگر- 4 برو ". بلی" بنويس- 5.8 به- 6 برو ". خير" بنويس- 78. پايان-

در. می استفاده( عمليات جريان شمای) فلوچارت يک از الگوريتم نمايش برای عمل در حقيقت شوداست. الگوريتم نمايش استاندارد و تصويری روش فلوچارت

هستند. ای ويژه معانی دارای کدام هر که رود می کار به استانداردی نمادهای و عالئم فلوچارت رسم در

شود. می استفاده عمليات پايان و شروع برای افقی بيضی شکل از

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

دارد.

يا شرط و گردد می استفاده گيری تصميم مراحل دادن نشان برای لوزی نماد ازشود. می نوشته لوزی داخل در نظر مورد سؤال

شود. می استفاده خروجی يا ورودی دادن نشان برای االضالع متوازی از

6

Page 7: آموزش زبان برنامه نویسی C++

باشد. می زير صورت به قبل مثال در مثلث اضالع الگوريتم فلوچارت : مثال

بعدی مبحث

C++ زبان ساختاری معرفی

++C U است: شده تشکيل بخش سه از عموما

آن. ويرايش و برنامه نوشتن برای محيطی- . C++ کامپايلر- .C++ استاندارد کتابخانه-

کند. می عبور مرحله شش از اجرا مرحله به رسيدن برای C++ زبان برنامه يک

کند. می ذخيره ديسک روی بر را آن و نويسد می ويرايشگر محيط در را برنامه نويس، برنامه : اول مرحله

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

نمايد. می ذخيره ديسک روی بر را آن و کند می ترجمه ماشين زبان به را برنامه کامپايلر، : سوم مرحله

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

دهد. می قرار حافظه در را برنامه کننده بار : پنجم مرحله

کند. می اجرا را برنامه دستورات کامپيوتر مرکزی پردازش واحد : ششم مرحله

7

Page 8: آموزش زبان برنامه نویسی C++

مرحله اول

مرحله دوم

مرحله سوم

مرحله چهارم

مرحله پنجم

مرحله ششم

مشکلی برنامه که صورتی در و کند می بررسی را برنامه ايرادات پردازنده پيش شد گفته که همانطور: نکته نيز برنامه اجرای هنگام در اما کند می پيدا اجرا قابليت و شود می ترجمه ماشين زبان به نهايت در نداشتاين. بوجود صفر بر تقسيم مثال عنوان به کند بروز خطايی است ممکن پيش توسط تشخيص قابل خطا آيد

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

داده انواع و حافظه مفاهيم

می حافظه واحد کامپيوتر، واحدهای از يکی گفتيم کامپيوتر سازمان در که همانطور   باشد.

8

Page 9: آموزش زبان برنامه نویسی C++

ذخيره برای گويند، می نيز( Random Access Memory تصادفی دسترسی با حافظه ) RAM آن به که واحد ايناطالعاتی. می استفاده شود احتياج آنها به که هنگامی تا دستورالعملها و ها داده موقت قرار RAM در که شودفضايی. ديگر های داده با شدن جايگزين و شدن پاک قابل دارند و متغيرها برای نويسی برنامه در ما که استبرای. قرار RAM در کنيم می استفاده ها داده بررسی را حافظه گيری اندازه واحدهای ، مطلب بهتر درک داردکنيم: می

Bit: باشد می( 0خاموش) و( 1) روشن حالت دو دارای که است کامپيوتر در الکترونيکی عنصری بيت يک بيت است. اطالعاتی واحد کوچکترين و

Byte: بنابراين دهند، انتقال را حالت دو توانند می فقط و هستند کوچکی اطالعاتی واحدهای بيتها چون بايت اين. انتقال قابل بار هر بيشتری اطالعات تا کنند می سازماندهی بزرگتری واحدهای در را آنها واحد باشد

هر. می کامپيوتری سيستمهای در اطالعات اصلی واحد که است بايت بزرگتر تشکيل را بايت يک ، بيت 8 باشددهند. می

شود: می استفاده حافظه گيری اندازه برای زير واحدهای از

1 بايت کيلو يک KB = 1024 B = 210 B

1 بايت مگا يک MB = 1024 KB = 220 B

1 بايت گيگا يک GB = 1024 MB = 230 B

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

داده نوع متغیر نام ;int i1,i2,index;

از کدام هر در يعنی کند، می تعيين صحيح اعداد نوع از indexو i2و i1 نامهای با حافظه خانه سه فوق دستورنوع. قرار- 32768 تا 32767 بازه در صحيح عدد يک توان می فوق حافظه های خانه بايت دو به int داده داد

دارد. نياز حافظه

: نکتهزبان دستور هر ++C شود. می ختم ; بهاول حرف نيز و کرد استفاده... و اعداد حروف، از توان می فقط حافظه های خانه گذاری نام برای

به. حرف يک بايد متغير يک نام غير اسامی mark.1 و test!num و 1test نامهای مثال عنوان باشدباشند. می مجاز

کرد. استفاده فاصله کاراکتر از توان نمی متغير نام حروف بينزبان ++C استفاده متغير نام عنوان به کلمات اين از توان نمی که است کليدی کلمات تعدادی دارای

کلمات. از: عبارتند C++ زبان کليدی کرد

asm auto break case cdecl char

class const continue _cs default delete

do double _ds else enum _es

extern _export far _fastcall float for

friend goto huge if inline int

interrupt _loadds long near new operator

9

Page 10: آموزش زبان برنامه نویسی C++

pascal private protected public register

return

_saveregs _seg short signed sizeof _ss

static struct switch template this typedef

union unsigned virtual void volatile while

زبان ++C در. می قائل تفاوت بزرگ و کوچک حروف بين يعنی است حساس حروف به نسبت شود کليدی کلمه يک short مثال عنوان به شوند، می نوشته کوچک حروف با کليدی کلمات تمام زبان اينتوصيه. کليدی کلمات shoRT يا SHORT ولی باشد می با زبان اين های برنامه تمام که شود می نيستند

شوند. نوشته کوچک حروف

: از عبارتند که دارد وجود اصلی داده نوع چهار C++ زبان در

1 -char : مانند کاراکتری های داده ذخيره برای داده نوع اين 'a' ، '1 '، '.'از آن قبول قابل بازه و رود می کار به در. می 127 تا- 128 و دارند طول بايت يک که باشند می صحيح اعداد نوع از نيز  char های خانه حقيقت باشدبه. می حفظ خود در را نظر مورد کاراکتر اسکی کد باشد. می 65 عدد  A کاراکتر اسکی کد مثال عنوان کنند

2 -int: آن قبول قابل بازه و رود می کار به- 850 ، 32000 ،1300 مانند صحيح اعداد ذخيره برای داده نوع اين باشد. می 32767 تا- 32768

3 -float: و رود می کار به 1415.1234 ،- 1501.3 ، 12.5241 مانند اعشاری اعداد ذخيره برای داده نوع اين باشد. می اعشاری رقم 7 تا آن دقت

4 -double: از آن دقت و رود می کار به بزرگ اعشاری اعداد سازی ذخيره برای داده نوع اين float می بيشتر باشد.

،( عالمت ) signed مانند باکلماتی ،( بدون ) unsigned دار ( short عالمت و ) ( long کوتاه انواع ) های داده بلندنوع. ايجاد توان می جديدی نوع. قرار استفاده مورد تواند می فوق کلمه چهار هر با int کرد تواند می char گيرد

به. کار به long با تواند می double نوع و رود کار به unsigned و signed با کنيد: توجه زير جدول رود

داده نوع طول بازه داده

unsigned char 8 bits 0 to 255

char 8 bits -128 to 127

enum 16 bits -32,768 to 32,767

unsigned int 16 bits 0 to 65,535

short int 16 bits -32,768 to 32,767

int 16 bits -32,768 to 32,767

unsigned long 32 bits 0 to 4,294,967,295

long 32 bits -2,147,483,648 to 2,147,483,647

float 32 bits 3.4 * (10**-38) to 3.4 * (10**+38)

10

Page 11: آموزش زبان برنامه نویسی C++

double 64 bits 1.7 * (10**-308) to 1.7 * (10**+308)

long double 80 bits 3.4 * (10**-4932) to 1.1 * (10**+4932)

بعدی مبحث

محاسباتی و رياضی اعمال

را متغيرها توانيم می حال شديم آشنا متغيرها به حافظه دادن اختصاص شيوه و داده انواع با حافظه مبحث دربرای. کار به محاسبات در است. داده قرار ما اختيار در را عملگرهايی C++ هدف اين به نيل ببريم

)=( انتساب عملگر

a متغير به را 5 عدد که a = 5 مانند ، رود می کار به متغير يک به مقدار يک دادن اختصاص جهت تساوی عملگرجزئی. می تخصيص سمت وجزء باشد، متغير يک نام بايد همواره دارد قرار تساوی چپ سمت در که دهد: دو هر از ترکيبی يا و متغير يک عدد، يک تواند می تساوی راست مانند. b + 5 حاصل ايجا در که ، a=b+5باشد

توجه. می قرار a متغير در قرار چپ سمت مقدار در تساوی راست سمت مقدار همواره که باشيد داشته گيردبه. می کنيد. توجه زير دستورات گيرد

int a,b;a = 10;b = 4;a = b;b = 7;

قابليتهای C++بود. خواهد 7 برابر b مقدار و 4 برابر a مقدار نهايت در کنيم استفاده فوق دستورات از اگر مثال عنوان به ، کنيم خالصه دستور يک در را دستور چند توانيم می که اينست قابليتها اين از يکی دارد زيادی: دستور

a = 2 + (b = 5);

با: است برابر

b = 5;a = 2 + b;

دهند. می قرار a متغير در را 7 عدد نهايت در عبارت دو هر که

U باشد: می مجاز C++ در نيز زير عبارت از استفاده ضمنا

a = b = c = 5

دهد. می اختصاص c و b و a متغير سه به را 5 عدد فوق عبارت

محاسباتی های عملگر

از: عبارتند هستند C++ زبان در استفاده قابل که محاسباتی عملگر پنج

11

Page 12: آموزش زبان برنامه نویسی C++

تفريق     - جمع     + تقسيم     / ضرب     *

تقسيم باقيمانده     %

. عملگر باشد ناشناس شما برای است ممکن که عملگری تنها اين% عدد دو تقسيم باقيمانده عملگر استکنيم: استفاده زير دستور از اگر مثال عنوان به دهد، می ما به را صحيح

a = 11 % 3;

چون. خواهد 2 عدد حاوی a متغير باشد. می 3 بر 11 تقسيم باقيمانده 2 عدد شد

مرکب انتساب های عملگر

در و دهند می انجام هم با را کار دو عملگرها اين=% . ،=/ ،=* ،=- ،=+ از عبارتند مرکب انتسال عملگرهای می تر ساده را مطلب فهم که زير های مثال به اضافی توضيح جای به کنند، می کمک ما به نويسی کد شدن کمکنيد: توجه کند

value += increase;« با است برابر »value=value+increase;a -= 5; « با است برابر »a = a - 5;a /= b; « با است برابر »a = a / b;price*=units+1; « با است برابر »price=price*(units+1);x %= y * z; « با است برابر »x = x % (y * z);

کاهش و افزايش عملگرهای

و)++( عملگر کنند می کمک ما به نويسی کد شدن کم در که عملگرها از ديگر ای گونه عملگر افزايشمی)--( عملگر. کاهش يک)++( باشند عملگر و کند می اضافه بود متغير در که قبلی مقدار به واحد افزايشيک)--( کند. می کم بود متغير در که قبلی مقدار از واحد کاهش

++a; a++; a += 1; a = a + 1;

کنند. می اضافه متغير قبلی مقدار به واحد يک فوق دستور چهار هر

--a; a--; a -= 1; a = a - 1;

کنند. می کم متغير قبلی مقدار از واحد يک فوق دستور چهار هر

از بعد يا گيرد قرار متغير از قبل++ که ندارد فرقی کنيم استفاده تنهايی به ++a و a++ دستورات از اگراما. به واحد يک ابتدا گيرد قرار متغير از قبل++ اگر شود، استفاده ديگر عملگرهای کنار در++ از اگر متغير متغير ابتدا گيرد قرار متغير از بعد ++ اگر ولی شود، می استفاده محاسبه در سپس شده اضافه متغيرهمين. می اضافه آن به واحد يک سپس شود می استفاده محاسبه در برای روال شود

به. برقرار نيز-- عملگر کنيد: توجه زير های مثال است

b = 3;a = ++b;

b = 3;a = b++;

12

Page 13: آموزش زبان برنامه نویسی C++

می قرار a در 4 عدد سپس گيرد می را 4 مقدار b يعنی شود، می اضافه b به واحد يک ابتدا چپ سمت مثال در می اضافه b به واحد يک سپس گيرد می قرار a در 3 عدد يعنی b مقدار ابتدا راست سمت مثال در اما گيرد؛گيرد. می را 4 مقدار و شود

گيرد: می قرار m در 6 عدد مثال اين در

a = 2;b = 3;m = ++a + b--;

b و 2 مقدار a گيرد. می را 3 مقدار

بگيريد. نظر در را زير عبارت شديد آشنا محاسباتی عملگرهای انواع با که حال

y = 5 * 3 + 2 - 1 * 3 / 2;

شما چيست؟ شما نظر . 17.5 يا 15.5 يا 24 يا 30 باشد؟ تواند می عددی چه گيرد می قرار y در که مقداری کنيد؟ می حساب چگونه را y مقدار

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

در. می محاسبه اول دارند قرار پرانتز درون که عملگرهايی- 1 ابتدا باشند تودرتو پرانتزها که صورتی شوندگيرد. می قرار محاسبه و بررسی مورد پرانتز ترين داخلی

اگر. قرار اولويت در عملگرها اين پرانتز از پس باشد % و / ، * حاوی عبارتی اگر- 2 ترکيبی حاوی عبارتی دارند چپ از ترتيب به محاسبه دارند، قرار يکديگر به نسبت يکسانی تقدم در عملگرها اين چون باشد عملگرها اين ازشود. می انجام راست به

اگر. می انجام انتها در - و + اعمال- 3 در عملگر دو اين چون باشد عملگر دو اين از ترکيبی شامل عبارتی شوندشود. می انجام راست به چپ از ترتيب به محاسبه هستند، هم به نسبت يکسانی تقدم

بود. خواهد 15.5 عدد فوق عبارت حاصل شده گفته قواعد به توجه با

y = 5 * 3 + 2 - 1 * 3 / 2; ----» y = 15.5 6 1 4 5 2 3

کنيد: توجه زير های مثال به

x = (2 + 1) * 3 + 5; ----» x = 14 4 1 2 3z = 5 % 3 * (3 + 1); ----» z = 8 4 2 3 1y = p * r % q + w / x - y; 6 1 2 4 3 5

قبلی مبحث بعدی مبحث

13

Page 14: آموزش زبان برنامه نویسی C++

منطقی عبارات

به. يا درست مقدار با است عبارتی منطقی، عبارت يک عبارت يک است، 3 از بزرگتر 5 مثال عنوان نادرستدر. مقدار با اما است منطقی عبارت يک نيز است، 3 از کوچکتر 5 و درست مقدار با است منطقی نادرستبود. خواهد صفر عدد نادرست منطقی عبارات نتيجه و يک عدد درست منطقی عبارات نتيجه کامپيوتر

U گيرد. می نظر در درست منطقی عبارت يک عنوان به را صفر مخالف عدد هر کامپيوتر ضمنا

ای رابطه عملگرهای

دارای شد گفته که همانطور که کنيم می استفاده ای رابطه عملگرهای از عبارت دو يا متغير دو مقايسه برایعملگرهای. می نادرست يا درست نتيجه ،( از بزرگتر)> ،( متفاوت) =! ،( مساوی) == از عبارتند ای رابطه باشد

کنيد. توجه زير های مثال به(. از مساوی کوچکتر) =< ،( از مساوی بزرگتر) => ،( از کوچکتر) <

U و متغيرها شامل عبارتهايی از توانيم می کنيم استفاده ای رابطه عبارتهای در اعداد از فقط اينکه جای به ضمناداشت: خواهيم c=6 و b=3 و a = 2 کنيد فرض مثال عنوان به کنيم استفاده اعداد و متغيرها از ترکيبی يا

(a==5) -----> نادرست(a*b>=c) -----> درست(b+4<a*c)) -----> نادرست((b=2)==a)) -----> درست

اولی. نمی== عملگر همانند= عملگر که کنيد توجه در را راست سمت مقدار که است انتساب عملگر باشد هم با را مقدار دو نبودن يا بودن برابر که است ای رابطه عملگر ديگری و دهد می قرار چپ سمت متغير

بنابراين. می مقايسه a با را آن سپس داديم قرار b متغير در را 2 مقدار ابتدا ما ((a(==b=2)) عبارت در کندبود. درست مقايسه اين نتيجه لذا کرديم، مقايسه

منطقی عملگرهای

عملگر اين که عبارتی که است درست وقتی( NOT )! عملگر نتيجه . && و || ، ! از عبارتند منطقی عملگرهایU. درست آن عملوند که است نادرست هنگامی نتيجه و باشد نادرست کند می عمل آن روی بر ضمنا اين باشد

در. عملوند يک تنها عملگر دهد. می نتيجه عنوان به را خود عملوند نقيض عملگر اين حقيقت دارد

کنيد: توجه زير های مثال به

نادرست <---- (5 == 5)!درست <---- (4 => 6)!درست <---- 0!نادرست <---- 1!

را نتيجه يک عبارت دو از بخواهيم که گيرند می قرار استفاده مورد هنگامی( OR)|| و( AND)&& عملگرهاینتيجه. بدست دارد: زير جدول طبق عملوندشان دو بين ارتباط به بستگی عملگرها اين آوريم

عملونداول

b

عملونددوم

a

نتيجهa&&b

نتيجهa||b

درستدرستدرستدرست

14

Page 15: آموزش زبان برنامه نویسی C++

درستنادرستنادرستدرست

درستنادرستدرستنادرست

نادرستنادرستنادرستنادرست

نمائيد: توجه زير های مثال به

نادرست <----- ((6<3)&&(5==5))درست <----- ((6<3)||(5==5))نادرست <----- ((5>3)&&(3-3))درست <----- ((5>3)||(3-3))

(c=3و b=2 و a=1 کنيد فرض) است شده استفاده نيز متغير از اعداد جای به زير های مثال در

((b-2*a)&&(c==3)) -----> نادرست((b==2*a)&&(c!=4)) -----> نادرست((c==a+b)||(b<a)) -----> درست((b-c==-a)||(b-c==a)) -----> درست

شرطی عملگر

به را متفاوتی مقادير شده ارزيابی عبارت براساس و دهد می قرار ارزيابی مورد را عبارت يک عملگر اينساختار. می بر نتيجه عنوان باشد: می زير صورت به عملگر اين گرداند

شرط ? 1 نتيجه : 2 نتيجه

در خروجی عنوان به 2 نتيجه صورت اين غير در بود خواهد خروجی عنوان به 1 نتيجه باشد برقرار شرط اگربه. می گرفته نظر نماييد: توجه زير های مثال شود

7==6?4:3 ---> باشد نمی 6 مساوی 7چون باشد می 3عدد خروجی 8==6+2?4:3 ---> باشد می2+6 مساوی 8چون باشد می 4عدد خروجی6>3?a:b --->خروجی a است بزرگتر 3 از 6 چون باشد میa>b?a:b ---> باشد می بزرگتر عدد خروجی a يا b

دانستن نيز اينجا در داشت ای ويژه اهميت عملگرها، تقدم درک ديديم محاسباتی عملگرهای در که همانطور عبارتند ترتيب به شرطی و منطقی ، ای رابطه عملگرهای تقدم باشد، می برخوردار خاصی اهميت از تقدم ايناز:

1! -2< <= > >= -3== != -4&& -5|| -6?: -

باشد: می زير صورت به مقابل عبارت بررسی مراحل مثال عنوان به

15

Page 16: آموزش زبان برنامه نویسی C++

2 >= 3 && 2 == 2 || 2 != 3 1 4 2 5 3

نادرست 1درست 2درست 3نادرست----< درست&& نادرست 4درست----< درست|| نادرست 5

باشد می درست نهايی جواب

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

(((2 >= 3) && (2 == 2)) || (2 != 3))

خروجی و ورودی دستورات

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

برای و است، داده قرار ما اختيار در را cin نام به دستوری C++ زبان ، کليد صفحه از اطالعات دريافت برایتوسط. می موجود cout دستور نمايش صفحه به اطالعات ارسال نمايش با توانيد می شما دستور دو اين باشد

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

cout خروجی دستور

رود. می کار به << عالمت همراه cout دستور

cout << "This is a test";

کند. می چاپ نمايش صفحه روی بر را This is a test عبارت فوق دستور

cout << 5120;

16

Page 17: آموزش زبان برنامه نویسی C++

سازد. می ظاهر نمايش صفحه روی بر را 5120 عدد فوق دستور

cout << x;

فرستد. می نمايش صفحه به را x متغير محتويات فوق دستور

خروجی واحد به گيرند می قرار عالمت اين از بعد که اطالعاتی و شود می شناخته درج عملگر نام با<< عالمتدر. می منتقل به( x) متغير يک و( 5120) عدد يک( This is a test) ای رشته عبارت يک فوق های مثال شوندتوجه. ارسال خروجی واحد قرار)"( عالمت دو بين This is a test عبارت مثال اولين در که باشيد داشته شدند

کار به را حروف از ای رشته بخواهيم که هرگاه باشد؛ می حروف از ای رشته حاوی عبارت اين چون ، گرفتبه. گرفته اشتباه به متغيرها نام با تا دهيم قرار)"( عالمت دو بين را آنها بايد ببريم دستور مثال، عنوان نشوندزير:

cout << " Hello";

زير: دستور ولی سازد می ظاهر نمايش صفحه روی بر را Hello عبارت

cout << Hello;

کند. می چاپ نمايش صفحه روی بر را Hello نام با متغيری محتويات

زير: دستور مثال عنوان به رود، کار به جمله يک در بار يک از بيش است ممکن درج عملگر

cout << "Hello," << "I am" << "new in C++";

دهد. می نشان نمايش صفحه روی بر را Hello, I am new in C++ پيغام

در را حروف رشته و متغير از ترکيبی که دهد می را امکان اين ما به دستور يک در درج عملگر از استفاده تکرار کنيم. استفاده هم کنار

cout << "Hello, my code is" << code << "and I am" << age << "years old.";

باشد 16 عدد حاوی age متغير و 116223 عدد حاوی code متغير اينکه فرض با فوق دستور مثال عنوان بهسازد: می ظاهر نمايش صفحه در را زير عبارت

Hello, my code is 116223 and I am 16 years old.

مثال عنوان به کند، نمی منتقل بعد خط به خودکار صورت به را عبارات cout دستور که باشيد داشته توجهزير: دستورهای

cout << "This is a text.";cout << "This is another text.";

17

Page 18: آموزش زبان برنامه نویسی C++

خواهد داده نشان نمايش صفحه در زير صورت به است، شده استفاده خط دو در cout دستور از اينکه مغعلیرشد:

This is a text. This is another text.

به. می استفاده\ n عالمت از جديد خط هر به انتقال برای دهيم، نمايش خط چند در را عبارتی اينکه برای کنيمزير: دستورات مثال عنوان

cout << "First sentence.\n";cout << "Second sentence.\n Third sentence.";

شد: خواهد ديده نمايش صفحه در زير شکل به

First sentence.Second sentence.Third sentence.

: دستورات مثال عنوان به کرد استفاده جديد خط به انتقال برای endl دستور از توان می\ n عالمت بر عالوه

cout << "First sentence." << endl;cout << "Second sentence." << endl;

شوند: می ديده زير صورت به نمايش صفحه در

First sentence.Second sentence.

cin ورودی دستور

رود. می کار به>> عالمت همراه cin دستور

int age;cin >> age;

کردن وارد منتظر برنامه سپس گيرند، می نظر در age متغير برای حافظه در فضايی ابتدا فوق دستورات اطالعت دريافت به قادر هنگامی cinدهد. قرار age متغير در را شده وارد عدد تا ماند می کليد صفحه از عددی

به. فشرده کليد صفحه روی بر Enter کليد که، بود خواهد کليد صفحه از 16 عدد بخواهيم اگر مثال عنوان شوددهيم. می فشار را Enter دکمه سپس کرده تايپ را 16 عدد ابتدا گيرد قرار age متغير در

متغيری در شود می دريافت ورودی واحد از که اطالعاتی و شود، می شناخته استخراج عملگر نام با<< عالمتU. می قرار باشد، می عالمت اين از بعد که ضمنا را متغير يک از بيش cin دستور يک توسط توانيد می شما گيرند

کنيد. دهی مقدار

باشند: می يکديگر معادل زير دستورات مثال عنوان به

18

Page 19: آموزش زبان برنامه نویسی C++

cin >> a >> b;cin >> a;cin >> b;

متن يک چاپ برنامه

وخروجی ورودی ودستورات منطقی عبارات محاسباتی، اعمال داده، انواع و حافظه مفاهيم با قبلی مباحث دربا. آشنا جزئيات ساير و اجرا نحوه برنامه اين با و کرد آغاز را برنامه اولين نوشتن توان می مقدمات اين شديمداد. خواهيم قرار بررسی مورد را

//first program in C++

#include <iostream.h>

int main ( ){ cout << "Hello, This is a C++ program."; return 0;}

می آن اجرای نحوه و C++ زبان ويرايشگر در برنامه اين نوشتن شيوه به اضافی توضيح گونه هر از قبلپردازيم.

آموزشی دوره اين در که را C++ زبان کامپايلر ، داريد نياز C++ زبان کامپايلر به شما برنامه اين اجرای برای" آدرس از توانيد می را است گرفته قرار استفاده مورد

http://www.tehranedu.com/subparts/elearning/c/tcp/tcp.exe" با. دريافت لينک روی بر کليک نماييدشد. خواهد باز زير کادر فوق

19

Page 20: آموزش زبان برنامه نویسی C++

حجم. ذخيره خود کامپيوتر روی بر را tcp.exe فايل و نماييد کليک فوق کادر از save دکمه روی بر اين نماييد با ارتباط سرعت به بستگی) دقيقه 20 تا 10 بين اينترنت از فايل اين دريافت لذا ، باشد می 3.5MB فايل

زمان( اينترنت پس. می دارد ذخيره خود سخت ديسک روی بر را آن که آدرسی به فايل اين دريافت از گيرداين. اجرا را tcp فايل و نموده مراجعه ايد کرده با باشد، می C++ برنامه حاوی فشرده صورت به فايل نماييد

شد: خواهد باز زير کادر tcp فايل اجرای

باز زير کادر نصب مراحل تکميل از پس ؛ کنيد کليک unzip دکمه روی بر فوق، کادر موارد از يک هيچ تغيير بدوندهد. می را نصب عمليات تکميل پيغام و شود می

اين. خارج نصب برنامه از تا دهيد فشار را Close دکمه سپس و کنيد کليک OK دکمه روی بر   مراحل شويدکرد. خواهد نصب "c:\tcp" آدرس در را C++ برنامه

با. اجرا را tc فايل و کرده مراجعه خود کامپيوتر روی بر "c:\tcp\bin" آدرس به برنامه نصب از پس   نماييدشد. خواهيد C++ برنامه ويرايشگر محيط وارد فايل اين اجرای

20

Page 21: آموزش زبان برنامه نویسی C++

در. را مبحث اين ابتدای در شده ذکر برنامه توانيد می محيط اين در حال  را الزم دقت برنامه نوشتن بنويسيدپس. مواجه مشکل با برنامه اجرای است ممکن تايپی اشتباهات وجود صورت در چون ، ببريد کار به از شود

از را Ctrl دکمه سپس ندارد، اشتباهی شويد مطمئن تا کنيد بررسی را آن ديگر بار يک نوشتيد را برنامه که اين با(. Ctrl + F9دهيد) فشار را کليد صفحه از F9 دکمه همزمان سپس ، داريد نگه را آن و داده فشار کليد صفحه

شد. خواهد اجرا برنامه کار اينبرای. می بر C++ زبان ويرايشگر صفحه به دوباره سرعت به نمايش صفحه ديديد که همانطور   اينکه گردد

خروجی محيط به کار اين با( . Alt + F5) دهيد فشار را F5 با همراه را Alt دکمه ببينيد را خود برنامه خروجیپيغام: و رفت خواهيد برنامه

Hello, This is a C++ program.

تبريک. خواهيد سياه صفحه يک در را مرحله به موفقيت با را C++ زبان با خود برنامه اولين شما ، گوئيم می ديدسادگی. همين به گذاشتيد؛ اجرا

ذکر مرحله شش را اجرا مرحله به رسيدن روال C++ زبان ساختاری معرفی مبحث در باشيد داشته ياد به اگر   + Ctrl) کليد فشار با و گذاشتيد اجرا به شما بود، ويرايشگر در برنامه نوشتن که را اول مرحله اينجا در کرديم،

F9 )ما و است برقرار همچنان شده ذکر مرحله شش پس گرفت، انجام خودکار صورت به ششم تا دوم مراحل کنيم. درگير ششم تا دوم مراحل جزئيات با را خود نداريم نيازی نيز

+ Ctrl) دکمه سپس بنويسيم ++C زبان ويرايشگر محيط در را برنامه است کافی برنامه هر اجرای برای پس  F9 )دهيم. فشار را

، بنويسيم C++ زبان به توانيم می که است هايی برنامه ترين ساده از يکی نوشتيم اينجا در ما که ای برنامه  U که است دستوراتی شامل اينکه ضمن در. نياز آنها به C++ برنامه هر تقريبا تک به تک بررسی به اينجا دارد

پردازيم. می فوق برنامه دستورات

//first program in C++

هر. نخواهد برنامه اجرای نحوه بر تأثيری و باشد می توضيحات شامل فوق دستور از بعد که ای نوشته داشتتوضيحی. می گرفته نظر در توضيحات عنوان به گيرد قرار C++ زبان در // عالمت مورد اينجا در که شودعالوه. می C++ زبان به ما برنامه اولين اين که گويد می ما به گرفته قرار استفاده ، // عالمت بر باشد

21

Page 22: آموزش زبان برنامه نویسی C++

از. قرار /* و */ بين توان می را توضيحات يک از بيش ما توضيحات که کنيم می استفاده هنگامی جديد شيوه دادباشد. خط

/* This is a comment line. This is another comment line. */

باشد. می برنامه بهتر فهم برای توضيحاتی تنها و ندارد خروجی بر تأثيری برنامه در فوق دستورات دادن قرار

#include <iostream.h>

اين. می پردازنده پيش برای دستوراتی شوند می شروع # پوند عالمت با که خطوطی جزء دستورات باشنددر. می کامپايلر برای هايی نشانه و باشند نمی برنامه اجرايی خطوط پردازنده پيش به فوق دستور اينجا باشند

در. قرار iostream.h ای کتابخانه فايل در برنامه اين در استفاده مورد دستورات از تعدادی که گويد می دارندباشد. می( cout و cin مانند) خروجی و ورودی دستورات شامل iostream.h فايل خاص مورد اين

int main( )

تابع. می مشخص را برنامه اصلی بدنه شروع دستور اين C++ زبان که است برنامه از جايی اولين main کندفرقی. می آن اجرای به شروع ابتدا. قرار استفاده مورد کجا در را main تابع که ندارد کند انتهای يا وسط  دهيمبعد. می مراجعه تابع اين به ابتدا C++ زبان ، دهيم قرار را main تابع که کجا هر در نويسی، برنامه کدهای از کنددر. تابع يک main چون دهيم، می قرار ) ( پرانتز جفت يک main کلمه يک دارای توابع تمام C++ زبان استدر) می پرانتز جفت خواهيم صحبت... و آرگومانها و تابع ايجاد نحوه باره در مفصل طور به توابع مبحث باشندمحتويات(. گيرند. می قرار } { عالمت دو بين ديديد برنامه در که همانطور main تابع کرد

cout << "Hello, This is a C++ program.";

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

توجه. استفاده <include<iostream.h# دستور از برنامه ابتدای در بايد دستور هر از بعد که باشيد داشته کنيمباشيم. می ( ;) عالمت از استفاده به ملزم C++ زبان

return 0;

اين. می بر تابع خروجی عنوان به را صفر عدد و برسد پايان به main تابع که شود می باعث دستور اين گرداندهمانطور. می خطا پيغام هيچگونه دريافت بدون برنامه به دادن پايان برای روش ترين مرسوم در که باشدU ديد، خواهيد بعدی های برنامه می پايان به فوق دستور مشابه دستوری با C++ زبان های برنامه همه تقريبارسند.

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

عدد دو جمع برنامه

22

Page 23: آموزش زبان برنامه نویسی C++

صفحه روی بر را ای رشته و بود شده استفاده cout دستور از تنها آن در که نوشتيم را ای برنامه قبلی مبحث دربرای. می چاپ نمايش شويد، آشنا cin دستور نيز و آنها به دهی مقدار شيوه و متغيرها کاربرد نحوه با اينکه کرد

حاصل و نموده جمع را آنها سپس و کرده دريافت ورودی از را عدد دو که نويسيم می را جديدی برنامه  اينجا دردهد. می نمايش خروجی در را

// Addition program.#include <iostream.h>

// function main begins program executionint main( ){ int integer1; // first number to be input by user int integer2; // second number to be input by user int sum; // variable in which sum will be stored

cout << "Enter first integer\n"; // prompt cin >> integer1; // read an integer

cout << "Enter second integer\n"; // prompt cin >> integer2; // read an integer

sum = integer1 + integer2; //assignment result to sum

cout << "Sum is " << sum << endl; // print sum

return 0; // indicate that program ended successfully

} // end function main

در. شده تکرار قبلی برنامه دستورات از تعدادی بينيد، می نيز برنامه اين در که همانطور و بررسی به اينجا اندپردازيم: می جديد دستورات توضيح

int integer1; // first number to be input by user int integer2; // second number to be input by user int sum; // variable in which sum will be stored

دارند. را صحيح عدد نوع از sum و integer2 و integer1 متغير سه به حافظه تخصيص وظيفه فوق دستور سهدر. شده داده توضيح داده انواع و حافظه مفاهيم مبحث در داده انواع دستور سه از استفاده جای به ضمن اندکنيم: استفاده نيز زير دستور از توانستيم می فوق

int integer1, integer2, sum;

: نکته

در را الزم توضيحات و کنند تعريف خط يک در را متغير هر که دهند می ترجيح نويسان برنامه از بعضی بنويسند. آن جلوی

ولی کرد، تعريف برنامه از جايی هر در توان می را متغير U از استفاده اولين از قبل بايد کار اين حتمانوشت: زير صورت به توان می را فوق برنامه مثال عنوان به گيرد، صورت متغير

23

Page 24: آموزش زبان برنامه نویسی C++

#include <iostream.h> int main() { cout << "Enter first integer\n"; int integer1; cin >> integer1; cout << "Enter second integer\n"; int integer2; cin >> integer2; int sum; sum = integer1 + integer2; cout << "Sum is " << sum << endl; return 0; }

بگذاريد آن از قبل خالی خط يک دهيد، می انجام برنامه اجرايی دستورات بين در را متغير تعريف اگر اينکار. مشخص متغير تعريف تا کند. می کمک برنامه وضوح به باشد

دستورات از تا بگذاريد آنها از بعد خالی خط يک دهد، می انجام برنامه ابتدای در را متغيرها تعريف اگر اينکار. جدا اجرايی کند. می کمک زدايی اشکال سهولت و برنامه وضوح به نيز شوند

cout << "Enter first integer \n";

رود. می جديد سطر ابتدای به و دهد می نشان نمايش صفحه روی بر را Enter first integer رشته فوق دستور

cin >> integer1;

دهد. می قرار integer1 متغير در را شده وارد عدد Enter کليد فشردن و عدد هر کردن وارد با فوق دستور

cout << "Enter second integer \n";cin >> integer2;

بعد خط در سپس و کرده چاپ نمايش صفحه روی بر را Enter second integer عبارت ابتدا نيز فوق دستور دودهد. می قرار integer2 متغير در Enter کليد فشردن از پس را کليد صفحه از شده وارد عدد

sum = integer1 + integer2;

در)=( انتساب عملگر توسط را نتيجه و محاسبه را integer2 و integer1 متغيرهای جمع حاصل فوق دستوردهد. می قرار sum متغير

cout << "Sum is " << sum << endl;

شود. می نمايش صفحه وی بر جمع حاصل نمايش باعث فوق دستور نهايت در و

24

Page 25: آموزش زبان برنامه نویسی C++

باشد: می زير صورت به برنامه اجرای نحوه

if انتخاب ساختار

است، برقرار خاصی شرط که هنگامی دستوراتی، يا دستور بخواهيم که آيد می پيش مواردی نويسی برنامه دراين. در اجرا به برنامه توسط باران فردا اگر" مثال عنوان به شود؛ می ديده نيز روزمره زندگی در مورد آيدشرط." خواهم کوه به من نيايد، به رفتن شود انجام است قرار که عملی و است باران نيامدن نظر مورد رفتشيوه. می کوه باشد: می زير صورت به if انتخاب ساختار سازی پياده باشد

if ( نظر مورد شرط )نظر مورد دستور ;

کنيد: توجه زير مثال به

if (x == 50) cout << "x is 50";

باشد 50 برابر فوق شرط به رسيدن از قبل x متغير مقدار اگر کنيم، استفاده برنامه در فوق دستور از اگر می گرفته ناديده " ;cout << "x is 50 دستور وگرنه شد خواهد ظاهر نمايش صفحه روی بر" x is 50" عبارتکند. می اجرا را بعدی خط برنامه و شود

در. تواند می منطقی عبارت هر if دستور در استفاده مورد شرط که باشيد داشته توجه عبارات مبحث باشدکرديم. بررسی کامل طور به را آنها کاربرد شيوه و عبارات اينگونه ، منطقی

با را نظر مورد دستورات بايد شود، اجرا دستور يک از بيش شود، می برقرار شرط که هنگامی بخواهيم اگرکنيد: توجه زير مثال به کنيم، بندی دسته } { عالمت

if ( x==50 ) { cout << "x is "; cout << x; }

کند. می چاپ نمايش صفحه در را" x is 50" عبارت باشد، 50 عدد x مقدار که هنگامی فوق کد قطعه

25

Page 26: آموزش زبان برنامه نویسی C++

زير: دستورات در ولی

if ( x == 50) cout << "x is "; cout << x ;

به. می اجرا جهت هر به برنامه آخر خط درستی به برنامه است 50 برابر x کنيم فرض اگر مثال عنوان شودU اگر اما کند، می چاپ را" x is 50" عبارت شد. خواهد ظاهر نمايش صفحه روی بر 20 عدد باشد 20 برابر x مثالباشد. می مجزا دستور يک و ندارد قرار if دستورات جز cout <<x; عبارت چون

شوند. می آن مرتکب اشتباه به نويسان برنامه از بعضی که است مواردی از يکی شد داده توضيح که اخير موردکنيد. دقت دستورات بندی دسته به خود های برنامه نوشتن هنگام در پس

if/else انتخاب ساختار

برقرار صورت در و اجرا دستورات سری يک خاصی شرط بودن برقرار صورت در که داريم نياز اوقات گاهیبه. اجرا دستورات از ديگر ای دسته شرط نبودن در روم نمی کوه به من بيايد باران فردا اگر مثال عنوان گردند ما اختيار در را زير شيوه ساختاری چنين سازی پياده برای C++ زبان رفت؛ خواهم کوه به من صورت اين غيراست. داده قرار

if ( نظر مورد شرط )1دستور ;

26

Page 27: آموزش زبان برنامه نویسی C++

else2دستور ;

به. می اجرا 2دستور صورت اين غير در و گردد می اجرا 1دستور باشد برقرار شرط اگر توجه زير مثال شودکنيد:

if ( x = = 50 ) cout << "x is 50";else cout << "x is not 50";

می چاپ نمايش صفحه برروی" x is 50" عبارت باشد 50 برابر فوق شرط به رسيدن از قبل متغير مقدار اگرشود. می چاپ" x is not 50" عبارت صورت اين غير در شود

U کنيد، استفاده دستور يک از بيش از خواهيد می اگر باشيد داشته بياد به. بندی دسته } { با را آنها حتما نماييدمثال: عنوان

if ( x > 50 ) { cout << x; cout << "is greater than 50"; }else { cout << x; cout << "is less than 50"; }

باشد: می زير صورت به خروجی باشد 100 عدد حاوی x متغير اگر

100 is greater than 50

است: زير صورت به خروجی باشد 10 عدد x متغير اگر و

27

Page 28: آموزش زبان برنامه نویسی C++

10 is less than 50

برنامه. استفاده چندگانه حالتهای بررسی برای توان می تو در تو های if/else ساختارهای از همين در زير کرداست: رابطه

#include <iostream.h>int main( ){ int x; cout << "Please enter a number:"; cin >> x;

if ( x > 0 ) cout << x << "is positive."; else if ( x < 0 ) cout << x << "is negative."; else cout << "The number that you entered is 0."; return 0;}

خروجی. می اجرا مختلف عدد سه با بار سه را فوق برنامه باشند: می زير صورت به ها کنيم

Please enter a number : 1010 is positive.Please enter a number : -5-5 is negative.Please enter a number : 0The number that you entered is 0.

28

Page 29: آموزش زبان برنامه نویسی C++

ديگر يا و if/else يا if از استفاده هنگام فوق برنامه همانند شود می پيشنهاد برنامه وضوح برای : نکتهيعنی. استفاده مناسب های تورفتگی از کنترلی ساختارهای زير: صورت به را if دستور مثال عنوان به کنيد

if ( x > 0 ) cout << x << "is positive.";

: زير صورت به نه و بنويسيم

if ( x > 0 )cout << x << "is positive.";

switch انتخابی چند ساختار

در. بررسی را if/else و if ساختارهای قبلی مبحث دو در می پيدا نياز الگوريتمی به گاهی نويسی برنامه کرديم مقدار هر ازای به و شود خاص دستور يک اجرای باعث ثابتی، صحيح مقدار هر ازای به متغيری آن در که کنيم

برای. انجام مختلف اعمال می زير صورت به که را switch انتخابی چند ساختار C++ هدف اين به نيل پذيرداست: داده قرار ما اختيار در باشد

switch ( گيرد قرار بررسی مورد بايد که عبارتی ) { case 1 ثابت مقدار :1 دستورات مجموعه break; case 2 ثابت مقدار :2 دستورات مجموعه break;

. . .

29

Page 30: آموزش زبان برنامه نویسی C++

case  n ثابت مقدار : n دستورات مجموعه break; default :فرض پيش حالت دستورات مجموعه  }

کند: می عمل زير شيوه به switch ساختار

switch مقايسه مورد 1 ثابت مقدار با را آن سپس و هد می قرار ارزيابی مورد را پرانتز داخل عبارت ابتدا اگر. می قرار دستور به برنامه که هنگامی تا شد، خواهد اجرا را 1 دستورات مجموعه بودند برابر دهد

break ،دستور به برنامه که هنگامی برسد break انتخابی چند ساختار از رسيد switch اگر. می خارج شود مورد 2 ثابت مقدار با را پرانتز داخل عبارت switch ساختار نبود برابر 1 ثابت مقدار با پرانتز داخل عبارتاين. می اجرا 2 دستورات مجموعه بودن برابر صورت در دهد، می قرار مقايسه ادامه همينطور روال گردد

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

#include <iostream.h>int main( ){ int x; cout << "Please enter a number:"; cin >> x;

switch (x) { case 1: cout << "x is 1"; break; case 2: cout << "x is 2"; break; default: cout << "Unknown value"; } return 0;}

خروجی. می اجرا مختلف عدد سه با بار سه را فوق برنامه باشند: می زير صورت به ها کنيم

Please enter a number:1x is 1Please enter a number:2x is 2Please enter a number:5Unknown value

به. سازی پياده نيز if/else ساختار با توان می را switch ساختار که باشيد داشته توجه مثال عنوان کردباشد: می زير if/else ساختار معادل فوف مثال در رفته کار به switch ساختار

30

Page 31: آموزش زبان برنامه نویسی C++

if (x == 1) cout << "x is 1";else if (x == 2) cout << "x is 2"; else cout << Unknown value";

را فرض پيش حالت که شود می توصيه ولی نداريم switch ساختار در default حالت از استفاده به الزامی ماU چون ببريم کار به حالت بردن کار به با و نباشد ثابت مقادير از يک هيچ با برابر عبارت که دارد امکان معموال

بفرستيد. نمايش صفحه به رابطه اين در مناسبی پيغام توانيد می فرض پيش

switch ساختار از برنامه نکنيم استفاده دستورات از مجموعه هر از بعد break دستور اگر باشيد داشته توجه. break دستور اولين به تا گردد می اجرا بعدی دستورات مجموعه و شد نخواهد خارج اين ما به مورد برسدالبته. می را ترکيبی حالتهای ايجاد امکان بکنيد. را الزم دقت تکنيک اين بردن کار به در دهد

#include <iostream.h>int main( ){ int x; cout << "Please enter a number:"; cin >> x;

switch (x) { case 1: case 2: case 3: cout << "x is (1 or 2 or 3)"; break; default: cout << "x is not (1 or 2 or 3)"; } return 0;}

خروجی. می اجرا مختلف عدد سه با بار سه را فوق برنامه باشند: می زير صورت به ها کنيم

Please enter a number:1x is (1 or 2 or 3)Please enter a number:2x is (1 or 2 or 3)Please enter a number:5

while تکرار ساختار

به( حلقه) تکرار ساختار هنگامی تا را دستورات از قسمتی ، برنامه که دهد می را امکان اين نويس برنامه تکراربه. تکرار را است، برقرار خاصی شرط که : مثال عنوان کند

هست. من خريد ليست در ديگری مورد که وقتی تا

31

Page 32: آموزش زبان برنامه نویسی C++

کن. حذفش خريد ليست از و بخر را آن

شرط. می انجام را خريد يک روال فوق مورد می" من خريد ليست در ديگری مورد" نظر مورد دهد هستاگر. نادرست يا درست است ممکن که باشد، خريد ليست در ديگری مورد يعنی) باشد برقرار شرط باشد

عمل( انجام" از حذفش و آن خريد" باشد اين. می ليست می ادامه باشد برقرار شرط که وقتی تا عمل گيردهنگامی. ،( شده حذف خريد ليست موارد تمام يعنی) نباشد برقرار شرط که يابد پايان به تکرار ساختار باشندساختار. می اجرا تکرار، حلقه از بعد دستور اولين و رسد می باشد. می زير صورت به while تکرار گردد

while ( نظر مورد شرط ) { دستورات مجموعه }

برای. خواهند اجرا دستورات مجموعه باشد برقرار پرانتز داخل شرط که وقتی تا کاربرد شيوه بهتر درک شدبرنامه. را باشد می 1000 از بزرگتر که 2 عدد از توانی اولين خواهيم می کنيد فرض تکرار های حلقه به بيابيم

بود. خواهد زير صورت

#include <iostream.h>int main( ) { int product = 2; while (product <= 1000) product = 2 * product; cout << "The first power of 2 larger than 1000 is " <<product <<endl; return 0; }

در. دهی مقدار 2 اوليه مقدار با را product نام به متغيری ابتدا فوق برنامه در هر با while تکرار حلقه کرديم يافتن پايان با ترتيب بدين شود می برابر دو product متغير مقدار product=2*product دستور اجرای بار

بود. خواهد باشد، می 1000 از بزرگتر که 2 از توانی اولين يعنی 1024 عدد حاوی product متغير حلقه

The first power of 2 larger than 1000 is 1024

32

Page 33: آموزش زبان برنامه نویسی C++

بيش اگر ولی نشد، استفاده }{ از بود شده استفاده دستور يک از تنها چون while حلقه در فوق مثال در : نکته.}{ از استفاده به ملزم داشتيم دستور يک از بوديم

کند. محاسبه را صد تا يک اعداد مجموع تا بنويسيد ای برنامه : مثال

#include <iostream.h>int main( ) { int n=1, sum=0; while (n <= 100) { sum += n; // sum = sum + n; ++n; // n = n + 1; } cout << "1 + 2 + ... + 100 =" <<sum << endl; return 0; }

واحد يک نيز n عدد و گردد می اضافه sum متغير به n عدد بار هر و گردد می اجرا بار 100 حلقه فوق مثال در  بررسی  هنگام و  شود می 101 برابر n  متغير  مقدار  حلقه  اجرای بار يکصدمين در تا يابد می افزايش دستور يعنی حلقه از بعد دستور اولين و شود می نادرست شرط while حلقه توسط (n <=100)  شرط

گردد. می اجرا cout خروجی

1 + 2 + ... + 100 =5050

: نکتهمتغير فوق مثال در n برحسب. گرفته بکار حلقه تکرار دفعات شمارنده عنوان به شمارنده مورد شد

U ها شوند. می اوليه دهی مقدار صفر يا يک با معموالمتغير sum چنين. حاصلجمع مجموع حاوی می کار به حصلجمع يک محاسبه برای که متغيرهايی بود

U روند شوند. می اوليه دهی مقدار صفر با معموال

محاسبه را آنها ميانگين و نمايد دريافت ورودی از را مثبت عدد نامشخصی تعداد که بنويسيد ای برنامه : مثالعدد. بگيريد. نظر در اعداد ليست انتهای کردن مشخص برای را -1 نمايد

33

Page 34: آموزش زبان برنامه نویسی C++

#include <iostream.h>int main( ){ int num, counter = 0; float average, sum = 0;

cout << "Enter a number (-1 to end):"; cin >>num;

while (num != -1){ sum += num ; // sum = sum + sum; ++counter; cout << "Enter a number (-1 to end):"; cin >> num; }

if (counter != 0){ average = sum / counter; cout << "The average is " << average << endl; } else cout << "No numbers were entered." << endl;

return 0;}

بود. خواهد زير صورت به برنامه خروجی

Enter a number (-1 to end):20Enter a number (-1 to end):50Enter a number (-1 to end):65Enter a number (-1 to end):70Enter a number (-1 to end):90Enter a number (-1 to end):100Enter a number (-1 to end):1Enter a number (-1 to end):6Enter a number (-1 to end):-1The average is 50.25

به برنامه اجرای عدد اين کردن وارد با و رود می کار به کنترلی مقدار يک عنوان به -1 عدد قبل مثال برنامه درمتغير. می در نمايش به خروجی در اعداد ميانگين و رسد می پايان می دريافت ورودی از را اعداد num آيدمتغير. حاصلجمع مجموع sum متغير و باشد می دارا را شده وارد اعداد تعداد شمارش وظيفه counter کندساختار. می قرار خود در را ميانگين ،average متغير نهايت در و دهد می قرار خود در را اعداد به if کنترلی دهد cin دستور اولين در اگر يعنی ، گيرد می را صفر بر تقسيم اجرای زمان خطای بروز جلوی برنامه، در رفته کار: بود خواهد زير صورت به برنامه خروجی شود وارد -1 عدد رفته کار به

Enter a number (-1 to end): -1

do/while تکرار ساختار

در. می while تکرار ساختار مشابه do/while تکرار ساختار ابتدا در حلقه شرط while تکرار ساختار باشد بدين گيرد، می قرار بررسی مورد حلقه انتهای در شرط do/while تکرار ساختار در ولی شود می بررسیساختار. خواهند اجرا يکبار حداقل حلقه دستورات do/while تکرار ساختار در ترتيب به do/while تکرار شدباشد: می زير صورت

34

Page 35: آموزش زبان برنامه نویسی C++

do {دستورات مجموعه }while ( نظر مورد شرط );

نماييد: توجه زير برنامه به مثال عنوان به

#include <iostream.h>

int main(){ int counter = 1; do { cout << counter << " "; }while ( ++counter <= 10 ); cout << endl;

return 0;}

دقت. خواهند چاپ نمايش صفحه روی بر فاصله با 10 تا 1 اعداد برنامه اين در در counter متغير که کنيد شدگردد. می مقايسه 10 عدد با مقدارش سپس گردد می اضافه واحد يک ، حلقه شرط قسمت

1 2 3 4 5 6 7 8 9 10

را ها مردودی و ها قبولی تعداد و کرده دريافت را کالس يک نمرات ليست که بنويسيد ای برنامه مثال:ضمنا. مشخص شود. پرسيده ليست نمرات تعداد برنامه ابتدای در کند

35

Page 36: آموزش زبان برنامه نویسی C++

#include <iostream.h>int main( ){ float mark; int howmany,counter=1; int passes=0,failures=0;

cout << "How many marks : "; cin >> howmany;

do { cout << "Enter mark "<<counter<<" : "; cin>>mark; if (mark>=10) ++passes; else ++failures; }while (++counter <= howmany);

cout<<"Passed : "<<passes<<endl; cout<<"Failed : "<<failures<<endl;

return 0;}

: باشد می زير صورت به برنامه خروجی

How many marks : 10Enter mark 1 : 18Enter mark 2 : 15Enter mark 3 : 9Enter mark 4 : 17.5Enter mark 5 : 9.75Enter mark 6 : 8Enter mark 7 : 11Enter mark 8 : 13Enter mark 9 : 5Enter mark 10 : 13Passed : 6

for تکرار ساختار

از. می تکرار حلقه يک قبلی ساختار دو مانند نيز for تکرار ساختار for U تکرار ساختار سازد که هنگامی معموالساختار. می استفاده باشد می شمارنده يک براساس حلقه تکرار دفعات می زير صورت به for تکرار شودباشد:

for ( متغير تعريف; حلقه شرط; کاهش يا افزايش )تعيين و شمارنده شمارنده مقدار اوليه مقدار {دستورات مجموعه }

36

Page 37: آموزش زبان برنامه نویسی C++

1 اعداد زير برنامه دو مثال عنوان به کرد سازی پياده توان می نيز while تکرار ساختار با را for تکرار ساختارکنند: می چاپ نمايش صفحه روی بر را 5 تا

#include <iostream>

int main(){ int counter = 1;

while ( counter <= 5 ) { cout << counter << endl; ++counter; } return 0;}

در. شده نوشته while حلقه با فوق برنامه سازی پياده for حلقه با را فوق while حلقه معادل زير برنامه بودکنيم: می

#include <iostream>

int main(){

for ( int counter = 1; counter <= 5; counter++ ) cout << counter << endl;

return 0;}

آن در 1 عدد و گردد می تعريف counter کنترلی متغير شود می اجرا for دستور که هنگامی فوق برنامه درسپس. می قرار 1 عدد ، counter مقدار چون (counter<=5) گيرد می قرار بررسی مورد حلقه شرط گيرد نمايش 1 يعنی عدد اولين و گردد می اجرا cout دستور يعنی حلقه، دستور و است درست شرط پس باشد میپس. می داده شود. می اضافه واحد يک counter متغير مقدار و گردد می اجرا counter++ دستور آن از شود

U سپس اين. می اجرا cout دستور شرط بودن برقرار صورت در و بررسی حلقه شرط مجددا تا روال گردد حاوی counter که هنگامی يعنی شرط نبودن برقرار محض به و يابد می ادامه باشد برقرار شرط که وقتیرسد. می پايان به برنامه و يابد می خاتمه شود 6 عدد

1 2 3 4 5

37

Page 38: آموزش زبان برنامه نویسی C++

کنيم: بازنويسی زير صورت به را for حلقه اگر قبلی برنامه در

for(int counter=10; counter>=1; counter=counter-2)

: يعنی باشد، می معکوس صورت به 1 تا 10 زوج اعداد برنامه خروجی

10 8 6 4 2

دستور از توانستيم می counter=counter-1 دستور از استفاده جای به فوق حلقه در که باشيد داشته توجهcounter -= 2 کنيم. استفاده

کند. محاسبه را 100 تا 1 زوج اعداد مجموع که بنويسيد ای برنامه: مثال

#include <iostream.h>

int main ( ){ int sum = 0;

for (int num = 2; num <= 100; num += 2) sum += num; cout << "2 + 4 + 6 + ... + 100 =" <<sum<<endl;

return 0;}

2 + 4 + 6 + ... + 100 =2550

بنويسيم: نيز زير صورت به توانيم می ( ,) کاما عملگر کمک با را فوق برنامه در for حلقه که باشيد داشته توجه

for (int num = 2; num <= 100; sum += num, num +=2);

38

Page 39: آموزش زبان برنامه نویسی C++

U البته. نمی ايجاد مشکلی نيز خط چند به حلقه شکستن ضمنا از چون شوند، نمی توصيه اخير مورد دو کندکاهند. می برنامه خوانايی

چاپ خروجی در و محاسبه را عدد آن توان به 2 و کرده دريافت ورودی از را عددی که بنويسيد ای برنامه: مثالنمايد.

#include <iostream.h>int main( ){ unsigned long int x=1; int power;

cout << "Enter power:"; cin >>power;

for (int counter=1;counter<=power;counter++) x*=2;

cout << "2 ^ " << power << " = " << x <<endl;

return 0;}

Enter power:252 ^ 25 = 33554432

توجه بود، دستور يک شامل تنها for حلقه چون نداديم قرار } { داخل را for حلقه دستورات فوق، های مثال درباشيم. می } { از استفاده به ملزم رود کار به حلقه در دستور يک از بيش اگر که باشيد داشته

کند. ايجاد را 5X5 ضرب جدول که بنويسيد ای برنامه: مثال

#include <iostream.h>int main( ){

for (int x=1;x<=5;x++) { for (int y=1;y<=5;y++) cout <<x*y<<"\t"; cout<<endl; }

return 0;}

بود: خواهد زير صورت به برنامه خروجی

1 2 3 4 52 4 6 8 103 6 9 12 154 8 12 16 205 10 15 20 25

39

Page 40: آموزش زبان برنامه نویسی C++

اما. استفاده } { از علت همين به بود، cout و for دستور دو دارای ، x متغير شامل حلقه فوق برنامه در شد. cout دستور يک دارای تنها y متغير شامل حلقه اگر دارای cout<<x*y<<"\t;" دستور باشيد کرده دقت بود

. \t عالمت به در. می خروجی شدن مرتب و بندی جدول باعث \t بردن کار بود صفحه نمای مکان حقيقت شودU. می قرار بندی جدول محل در را نمايش ضمنا ديگری for ساختار دل در for ساختار يک فوق مثال در دهد آنها از کرات به ها نويسی برنامه در که شود می گفته تودرتو های حلقه استفاده شيوه اين به شد استفادهدر. می استفاده به خروجی نشود، استفاده cout <<endl; دستور از اگر که باشيد داشته توجه ضمن شودبود: خواهد زير مرتب نا صورت

1 2 3 4 5 2 4 6 8 103 6 9 12 15 4 8 12 16 205 10 15 20 25

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

در. به برنامه اجرای Break    (Ctrl+Break)  با همراه Ctrl کليد فشردن با مشکلی چنين بروز صورت شود کنيد. درست را اشتباه کد توانيد می و گرديد می باز C++ ويرايشگر محيط به و شود می قطع ناگهانی صورتU را برنامه سپس کنيد. اجرا مجددا

continue و break های دستور

فوری خروج باعث گردد، اجرا switch يا for و do/while و while ساختارهای در که هرگاه break دستوربه. خواهد اجرا را ساختار آن از بعد دستور اولين برنامه و شد خواهد ساختار آن از برنامه توجه زير برنامه کرد

کنيد:

#include <iostream.h>

int main(){ int n; for (n=10; n>0; n--) { cout << n << ","; if (n==3) { cout << "countdown aborted!"; break; } } return 0;}

باشد: می زير صورت به برنامه خروجی

10,9,8,7,6,5,4,3,countdown aborted!

پايان به معکوس شمارش شود، می 3 عدد n متغير که هنگامی و کرد خواهد چاپ را 4 تا 10 اعداد فوق برنامهرسد. می

در. تعريف for دستور از خارج در n يعنی حلقه شمارنده فوق برنامه در : نکته متغير اين ، حالتی چنين شد می آنجا تنها ، بود شده تعريف حلقه داخل در تنها اگر ولی گيرد قرار استفاده مورد تواند می نيز حلقه از خارج

بود. نشده تعريف حلقه خارج و کنيم استفاده آن از توانستيم

40

Page 41: آموزش زبان برنامه نویسی C++

ناديده ساختار آن بعدی دستورات گردد اجرا for يا do/while و while ساختارهای در هرگاه continue دستوردر. می اجرا تکرار حلقه بعدی بار و شود می گرفته دستور اجرای از پس do/while و while ساختار دو شود

continue  ساختار در اما گيرد، می قرار بررسی مورد حلقه شرط for کاهش يا افزايش شمارنده مقدار ابتدا توجه. می بررسی حلقه شرط سپس يابد، می دستور do/whileو while حلقه در که باشيد داشته شود

continue  به. کار به شمارنده کاهش يا افزايش از بعد همواره تا 1 اعداد مجموع زير برنامه مثال عنوان رودکند. می محاسبه را 10 جز به 20

#include <iostream.h>

int main( ){ int n=0, sum=0; while (n < 20) { ++n; // n = n + 1; if (n==10) continue; sum += n; // sum = sum + n; } cout << "1+2+ ...(except 10)...+20=" <<sum << endl;

return 0;}

باشد. می زير صورت به برنامه خروجی

1+2+ ...(except 10)...+20=200

شرط به دوباره شود می 10 برابر n اينکه محض به دهد می ادامه 10 عدد به رسيدن تا را جمع عمل برنامه يابد می افزايش واحد يک n و شده حلقه وارد است برقرار همچنان شرط چون و شود می منتقل حلقه

يابد. می ادامه اعداد جمع و

قبلی مبحث بعدی مبحث

رياضی توابع

تابع. می علوم ساير نيز و کامپيوتر علوم و رياضيات در مفاهيم مهمترين از يکی تابع مفهوم به توان می را باشد خروجی به باشد می دستگاه آن وظيفه که تغييراتی با را مجازش وروديهای که گرفت نظر در دستگاهی عنوانمعادله. می تبديل ورودی با متناظر دهيم قرار را f(x)، y جای به اگر بگيريد، نظر در را  y = 2x + 1 خط کنددر. خواهد در f(x) = 2x + 1 صورت به فوق خط معادله هر) ورودی هر که بود خواهد f تابع ما دستگاه اينجا آمد

را( عدد شکل. می اضافه آن به واحد يک سپس و کند می ضرب 2 در حقيقی می زير صورت به دستگاه کندباشد.

41

Page 42: آموزش زبان برنامه نویسی C++

  

   

  

 

: مثال عنوان به

f(0) = 2 * (0) + 1 = 1f(1) = 2 * (0) + 1 = 3f(-1) = 2 * (-1) + 1 = -1

کند. می نظير را خروجی يک تنها ورودی هر به f تابع ديديد فوق مثالهای در که همانطور

باشد. دايره مساحت ، خروجی و باشد ورودی عنوان به دايره يک شعاع که بنويسيد تابعی : مثال

کنيم: می تعريف زير صورت به را تابع پس باشد می s = 3.14*r2 دايره مساحت فرمول که دانيم می

s(r) = 3.14*r2

U توابع اينگونه باشند، داشته متفاوتی خروجی خاصی شرط اساس بر است ممکن توابع از بعضی به معموالبه. می تعريف ای ضابطه چند صورت باشد: می زير صورت به مطلق قدر تابع مثال عنوان شوند

 x    , x>= 0 اگر abs(x) = |x| = 

 -x      , x<0 اگر

abs( )=

: نمونه عنوان به

abs(1) = 1abs(-1) = 1abs(0) = 0

42

Page 43: آموزش زبان برنامه نویسی C++

عنوان به را مقدار يک از بيش است ممکن بلکه کنند، نمی دريافت ورودی عنوان به را مقدار يک همواره توابعبه. دريافت ورودی : بگيريد نظر در را زير تابع مثال عنوان کنند

f(x,y) = x + y

می بر خروجی عنوان به و کرده جمع هم با را شوند می داده آن به ورودی عنوان به که عددی دو هر فوق تابعبه. : مثال عنوان گرداند

f( , )=x+y=

f(1,2) = 1+2 = 3f(2,3) = 2+3 = 5f(1,-1) = 1+(-1) = 0

و... و متغيره سه تابع باشد، تا سه متغيرها تعداد اگر و شود می گفته متغيره دو توابع فوق تابع مانند توابعی بهبه. می گفته متغيره چند شود. می گفته نيز آرگومان تابع ورودی متغيرهای شود

عنوان به ، است داده قرار ما اختيار در را فراوانی کاربردی توابع ، رياضياتی محاسبات انجام برای C++ زبان قرار ما اختيار در اينکار برای C++ زبان که تابعی آوريد، بدست را عدد يک جذر خواهيد می که کنيد فرض مثالبه. می sqrt تابع است، داده : زير دستور مثال عنوان باشد

cout << sqrt (900);

در. خواهد چاپ را 30 عدد برای. می sqrt تابع آرگومان 900 عدد اينجا کرد در رياضی توابع از استفاده باشددستور: از استفاده به ملزم برنامه

#include <math.h>

آرگومانهای. قرار math.h ای کتابخانه فايل در رياضی توابع چون باشيم، می برنامه ابتدای در می توابع دارند: کنيد توجه زير برنامه به مثال عنوان به باشند؛ آنها از ترکيبی يا و متغيرها ثابت، اعداد شامل توانند

#include <iostream.h>#include <math.h>int main ( ){ int x = 30; double y = 5; cout << sqrt (x+2*y+9)<<endl; return 0;}

کرد. خواهد محاسبه را 49=9+5*2+30 عبارت جذر sqrt تابع چون بود خواهد 7 عدد فوق برنامه خروجی

اند. شده داده توضيح زير جدول در استفاده مورد رياضی توابع از تعدادی

43

Page 44: آموزش زبان برنامه نویسی C++

fabs(x)

کند. می حساب را x مطلق قدر تابع، اين

fabs(1.2) = 1.2fabs(-1.2) = 1.2fabs(0) = 0

fabs( )=

sqrt(x)

کند. می محاسبه را x جذر ، تابع اين

sqrt(9) = 3sqrt(2) = 1.414214

sqrt( )=

pow(x,y)

کند. می محاسبه را y توان به x ، تابع اين

pow(2, 5) = 32pow(2, 0.5) = 1.414214

pow( , )=

exp(x)

می 2.71828 تقريبی مقدار با رياضی ثابت يک eکند. می محاسبه را e عبارت مقدار ، تابع اينباشد.

exp(2) = 7.38906

exp( )=

log(x)

می e مبنای بر لگاريتم طبيعی، لگاريتم. کند می حساب را x عدد طبيعی لگاريتم ، تابع ايناين. کند. می عمل exp تابع عکس بر تابع باشد

log(2.71828) = 1log(7.389050) = 2

log( )=

log10(x)

U. می محاسبه را x عدد 10 مبنای بر لگاريتم  ، تابع اين مثال توان به 10 يعنی log10(100) کندlog10(100)=2 پس بود خواهد 2 جواب که شود 100 برابر حاصل تا برسد عددی چه

log10(10) = 1log10(1000) = 3

log10( )=

fmod(x,y)

x/yکند. می حساب را اعشاری عدد دو تقسيم باقيمانده ، تابع اين

fmod(13.657,2.333) = 1.992

fmod( , )=

ceil(x)مساوی بزرگتر صحيح عدد کوچکترين ، تابع اين x گرداند. می بر خروجی عنوان به را

44

Page 45: آموزش زبان برنامه نویسی C++

ceil(9) = 9ceil(9.2) = 9ceil(-9.8) = -9

ceil( )=

floor(x)

يعنی. می عمل رياضيات صحيح جزء تابع همانند ، تابع اين کوچکتر صحيح عدد بزرگترين کندگرداند. می بر را x مساوی

floor(7) = 7floor(7.3) = 7floor(-7.2) = -8

floor( )=

sin(x)

باشد( راديان اساس بر بايد xکند.) می حساب را x عدد sin ، تابع اين

sin(0) = 0sin(3.14/2) = 1

sin( )=

cos(x)

باشد( راديان اساس بر بايد xکند.) می محاسبه را x عدد cos ، تابع اين

cos(0) = 1cos(3.14/2) = 0

cos( )=

tan(x)

باشد( راديان اساس بر بايد xکند.) می محاسبه را x زاويه tan ، تابع اين

tan(0) = 0tan(3.14/4) = 1

tan( )=

asin(x)

توجه. می محاسبه را x عدد arcsin ، تابع اين .1 تا- 1 بين x عدد که باشيد داشته کند باشد U باشد. می راديان حسب بر ای زاويه تابع خروجی ضمنا

asin(0) = 0asin(1) = 1.570796

asin( )=

acos(x)

توجه. می محاسبه را x عدد arccos ، تابع اين .1 تا- 1 بين x عدد که باشيد داشته کند باشد U باشد. می راديان حسب بر ای زاويه تابع خروجی ضمنا

acos(1) = 0acos(0) = 1.570796

acos( )=

atan(x)تابع اين ، arctan عدد x باشد. می راديان حسب بر ای زاويه تابع خروجی کند. می محاسبه را

45

Page 46: آموزش زبان برنامه نویسی C++

atan(1) = 0.785398atan(0) = 0atan(21584.891) = 1.570795

atan( )=

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

کرد.

R D_____ = _____

3.14 180o

بر درجه اندازه حاوی R تناسب، حل با سپس و بنويسيد را نظر مورد زاويه اندازه D جای به فوق تناسب دربه. بر و باشد می راديان حسب : کنيد توجه زير های مثال عکس

R 45o

_____ = _____ ====> R=0.7853.14 180o

1.57 D_____ = _____ ====> D=90o

3.14 180o

جدول صورت به خروجی در را درجه 90 تا 1 زوج های زاويه tanو cos و sin که بنويسيد ای برنامه : مثالنمايد. چاپ اعشار رقم سه تا شده بندی

#include <iostream.h>#include <math.h>

int main( ){ float r; for (int d=2;d<=90;d+=2) { r = 3.1415 * d / 180; cout<<"sin("<<d<<")=" <<floor(sin(r)*1000 + 0.5)/1000; cout<<"\tcos("<<d<<")="

46

Page 47: آموزش زبان برنامه نویسی C++

<<floor(cos(r)*1000 + 0.5)/1000; cout<<"\ttan("<<d<<")=" <<floor(tan(r)*1000 + 0.5)/1000; cout<<endl; } return 0;}

باشد: می زير صورت به برنامه خروجی

sin(2)=0.035 cos(2)=0.999 tan(2)=0.035sin(4)=0.07 cos(4)=0.998 tan(4)=0.07sin(6)=0.105 cos(6)=0.995 tan(6)=0.105sin(8)=0.139 cos(8)=0.99 tan(8)=0.141sin(10)=0.174 cos(10)=0.985 tan(10)=0.176sin(12)=0.208 cos(12)=0.978 tan(12)=0.213sin(14)=0.242 cos(14)=0.97 tan(14)=0.249

. . . . . . . . .

sin(86)=0.998 cos(86)=0.07 tan(86)=14.292sin(88)=0.999 cos(88)=0.035 tan(88)=28.599sin(90)=1 cos(90)=0 tan(90)=21584.891

توسط و کرديم تبديل راديان به را درجه حسب بر زاويه r = 3.1415 * d / 180 فرمول توسط فوق برنامه درهمانطور. محاسبه اعشار رقم سه تا را خروجی floor(sin(r)*1000 + 0.5)/1000 فرمول می که کرديم

مثال  عنوان  به  باشد. می ديگری  تابع  خروجی  ثابت  عدد و  متغير بر عالوه تابع، ورودی بينيدsqrt(pow(2,2)) شکل اين به توابع ترکيب و بود خواهد 2 با برابر U بر و باشد می مجاز کامال

کنيد. استفاده شيوه اين از توانيد می نياز حسب

قبلی مبحث بعدی مبحث

توابع تعريف

ايم. نوشته قبلی مباحث در اکنون تا ما که باشند می هايی برنامه از بزرگتر خيلی ، کاربردی های برنامه اکثر به آنها کردن تقسيم بزرگ، های برنامه ارتقاء و نگهداری و گسترش برای راه بهترين که است داده نشان تجربه

هر. می کوچکتر قطعات و تغييرات اعمال و شوند می مديريت اصلی برنامه از راحتتر قطعات از کدام باشدقطعات. می تر ساده نيز آنها در خطايابی اگر. می توابع همان C++ زبان در ما نظر مورد باشد داشته بياد باشند

اجرای برنامه که است ای نقطه تابع اين و باشد می تابع يک نيز main که گفتيم قبلی مباحث در باشيدزبان. می آغاز آن از را دستورات ای کتابخانه فايلهای در که داده قرار ما اختيار در را زيادی آماده توابع C++ کند

در. قبل مبحث در را آنها از ای گوشه که باشند، می موجود زبان اين نياز که است ممکن نويسی برنامه ديديدU را دستوراتی مجموعه باشيم داشته اين است بهتر حالتی چنين در کنيم، استفاده برنامه جای چند در عينا

تنها که دستورات تکرار از و بزنيم صدا باز چندين برنامه در را تابع و دهيم قرار تابعی در را دستورات مجموعهکنيم. خودداری کاهند می آن خوانايی از و کنند می زياد را اصلی برنامه حجم

: شوند می تعريف زير شيوه به توابع C++ زبان در

خروجی داده نوع      تابع نام  تابع( آرگومانهای )          {متغيرها تعريف                   

47

Page 48: آموزش زبان برنامه نویسی C++

تابع دستورات                               }

برای. می پيروی متغيرها گذاری نام قواعد از تابع نام گيری کار به شيوه و توابع تعريف نحوه با شدن آشنا کندکنيد: توجه زير برنامه به آنها

#include <iostream.h>

long int power2 (int x){ long int y;

y=x*x;

return y;}

int main (){ for (int i=1;i<=10;i++) cout<<power2(i)<<" ";

return 0;}

باشد. می 10 تا 1 اعداد مربع برنامه خروجی

1 4 9 16 25 36 49 64 81 100

U نوشتيم برنامه اين در که power2(x) تابع کند. می عمل C++ ای کتابخانه توابع از pow(x,2) تابع شبيه تقريباورودی. می f(x) = x2 تابع اين رياضياتی ضابطه ) بزرگ اعداد آن خروجی و (int) صحيح اعداد تابع اين باشد

long int )هنگامی. می i آرگومان مقدار و شود می فراخوانی تابع رسد می power2(i) تابع به برنامه که باشدسپس. می قرار xمتغير در و کند می دريافت را گيرد می قرار y در x*x مقدار و گردد می تعريف y متغير دهدتوجه. می چاپ cout دستور توسط و شود می برگردانده تابع خروجی عنوان به y مقدار سرانجام و گردد

U کند، می فراخوانی بار 10 را تابع for حلقه و کند نمی ايجاد i متغير مقدار در تغييری تابع که باشيد داشته ضمنااست. نشده تعريف power2 تابع در i متغير نيز و باشند نمی استفاده قابل main تابع در yو x متغيرهای

گردند. تعريف بايد هم از جدا و باشند نمی تعريف قابل يکديگر داخل توابع که باشيد داشده توجه : نکته

خروجی عنوان به را آنها بزرگترين و کرده دريافت ورودی عنوان به را عدد سه که بنويسيد تابعی : مثالاين. ببريد. کار به ای برنامه در را تابع برگرداند

#include <iostream.h>

int maximum (int x,int y, int z){ int max=x;

if (y>max) max=y; if (z>max)

48

Page 49: آموزش زبان برنامه نویسی C++

max=z;

return max;}

int main (){ int num1,num2,num3;

cout << "Enter three numbers: "; cin >> num1 >> num2 >> num3; cout << "Max is :" << maximum(num1,num2,num3)<<endl; cout << "Max of 5,20,1 is " << maximum(5,20,1)<<endl;

return 0;}

Enter three numbers: -5 20 150Max is :150Max of 5,20,1 is 20

هنگامی. آرگومان سه دارای maximum تابع ورودی از برنامه در num3 و num2 و num1 اعداد که بود و num2 و num1 آرگومانهای اعداد maximun(num1,num2,num3) تابع فراخوانی با شوند می دريافتnum3 های متغير در ترتيب به x و y و z و شوند می مقايسه تابع توسط مقادير و گيرند می قرار U نهايتا

برگردانده تابع خروجی عنوان به ;return max دستور توسط که گيرد می قرار max متغير در عدد بزرگترينسپس. می کند. می چاپ نمايش صفحه روی بر را تابع خروجی cout دستور شود

توابع تعريف پيش

فراخوانی اين و کرديم تعريف آنها فراخوانی اولين از قبل را هايمان برنامه در استفاده مورد توابع حال به تا. main تابع در معموال لذا اگر. برنامه در تابع آخرين عنوان به را main تابع بود را main تابع که بخواهيد نوشتيم

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

کرديم. استفاده قبلی های برنامه

اين. وجود توابع ساير يا main تابع در آنها استفاده از قبل توابع همه کد نوشتن از اجتناب برای چاره راه يک داردپيش. می توابع تعريف پيش راهکار باشد: می زير صورت به تابع تعريف باشد

خروجی داده نوع تابع نام( تابع آرگومانهای نوع );

و تابع نام ، خروجی داده نوع شامل تنها و شود نمی تابع دستورات شامل تابع تعريف پيش که باشيد داشته توجه. ;) عالمت به نياز پايان در و باشد می آرگومانها نوع به( مبحث در power2 تابع تعريف پيش مثال عنوان دارد

باشد: می زير صورت به قبلی

long int power2( int );

: است زير صورت به maximum تابع تعريف پيش ويا

49

Page 50: آموزش زبان برنامه نویسی C++

int maximum( int, int, int );

: کنيم می نويسی باز تابع تعريف پيش روش با را قبلی مبحث در maximum تابع برنامه اينجا در

#include <iostream.h>

int maximum (int ,int,int);

int main (){ int num1,num2,num3;

cout << "Enter three numbers: "; cin >> num1>>num2>>num3; cout << "Max is :" << maximum(num1,num2,num3)<<endl; cout << "Max of 5,20,1 is " << maximum(5,20,1)<<endl;

return 0;}

int maximum (int x,int y, int z){ int max=x;

if (y>max) max=y; if (z>max) max=z;

return max;}

Enter three numbers: -5 20 150Max is :150Max of 5,20,1 is 20

که است امکانی اين و است شده نوشته maximum تابع از قبل main تابع بينيد، می برنامه در که همانطوراست. داده ما به maximum تابع تعريف پيش

در. فراخوانی را يکديگر تابع دو که کنيم می پيدا نياز ها، برنامه از بعضی در نکته: کننداما. می تابع تعريف پيش از استفاده به ملزم حالتی چنين توصيه يک عنوان به باشيم آن از استفاده به ملزم اگر حتی ، کنيد استفاده توابع تعريف پيش از همواره نويسی برنامه

نبوديد.

قبلی مبحث بعدی مبحث

بازگشتی توابع

در. می فراخوانی را ديگری تابع تابع، يک نوشتيم کنون تا که هايی برنامه نياز است ممکن نويسی برنامه کردبه. فراخوانی مستقيم غير يا مستقيم صورت به را خودش تابعی که کنيم پيدا بازگشتی توابع توابعی، چنين کنددنباله. می بررسی را بازگشتی توابع رياضياتی ديد از ابتدا. شود می گفته : بگيريد نظر در را زير اعداد کنيم

50

Page 51: آموزش زبان برنامه نویسی C++

2 , 5 , 11 , 23 , ...

شد خواهيد متوجه کنيد دقت کمی اگر چيست؟ شما حدس باشد؟ می عددی چه فوق اعداد دنباله پنجم جملهپس. بعالوه قبلی جمله برابر دو با است برابر فوق دنباله از جمله هر که =1+23*2 با است برابر پنجم جمله يک: کرد مشخص توان می نيز زير فرمول توسط را فوق دنباله 47

d1 = 2dn = 2*dn-1+1

آن آوردن بدست برای و است وابسته خود قبلی جمالت به جمله هر دنباله اين در ايد شده متوجه که همانطورفرمول. باشد می 2 عدد که اول جمله به سرانجام اينکه تا داريم قبلی جمالت روی بازگشت به نياز فوق برسيم: کنيم می بازنويسی زير تابعی صورت به را

d(1) = 2d(n) = 2*d(n-1)+1

حالت يکه و باشد می d(1)=2 همان  که دارد وجود  پايه حالت  يک بينيد  می  فوق تابع  در  که  همانطور کلی طور به بازگشتی توابع . d(n) = 2*d(n-1)+1 شود می فراخوانی دوباره کمتر واحد يک با تابع که بازگشتی

که. می بازگشتی بخش يک و پايه حالت چند يا يک دارای U باشند کمتر مقداری با تابع بازگشتی بخش در معموالU تابع. می فراخوانی مجددا : باشد می زير صورت به C++ زبان به فوق بازگشتی شود

long int d(long int n){ if (n == 1) return 2; else return 2*d(n-1)+1;}

دهد. نمايش را مذکور دنباله اول جمله 20 فوق تابع از استفاده با تا نويسيم می ای برنامه زير در

#include <iostream.h>

long int d(long int);int main( ){ for (int i=1;i<=20;i++) { cout<<d(i)<<"\t"; if (i%5==0) cout<<endl; }

return 0;}

long int d(long int n){ if (n == 1) return 2; else return 2*d(n-1)+1;}

2 5 11 23 47

51

Page 52: آموزش زبان برنامه نویسی C++

95 191 383 767 15353071 6143 12287 24575 49151 98303 196607 393215 786431 1572863

: کند می محاسبه زير شيوه به را پنجم جمله فوق برنامه مثال عنوان به

پی بازگشتی محاسبات پايه حالت به رسيدن محض به و دهد می ادامه پايه حالت به رسيدن تا را بازگشت تابع،شود. می نظر مورد جواب به رسيدن موجب پی در

(Towers of Hanoi) هانوی برجهای مسئله

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

با. می منتقل دوم ستون به ستون يک از را ديسکها همه ديسک يک تنها جايی به جا بار هر در که شرط اين کردندU. قرار کوچکتر ديسک روی بزرگتری ديسک نيز و شود منتقل ضمنا کمکی ستون عنوان به سومی ستون نگيرد

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

بنويسيم ای برنامه خواهيم می نشوند انتقال در کاری دوباره و اشتباه دچار اينکه برای و کاهنان کار راحتی برایکند. چاپ را ديسکها انتقال ترتيب که

می انجام زير شيوه به را ديسک n انتقال. کنيم نگاه بازگشتی ديد با بايد را مسئله ، برنامه اين نوشتن برای: دهيم

52

Page 53: آموزش زبان برنامه نویسی C++

کن. منتقل سوم ستون کمک به دوم ستون به اول ستون از را ديسک n-1 ابتدا- 1را( بزرگترين) آخر ديسک- 2 کن. منتقل سوم ستون به اول ستون از ديسک3 -n-1 کن. منتقل سوم ستون به اول ستون کمک به را دوم ستون در گرفته قرار ديسک

رسد. می اتمام به پايه حالت يعنی باشد، می n=1 که وقتی يعنی ديسک آخرين انتقال هنگام کار انجام مراحلشود. می منتقل ديگر ستون به کمکی ستون کمک بدون ديسک يک n=1 حالت در

نويسيم. می آرگومان چهار با را هانوی برجهای مسئله حل برای استفاده مورد بازگشتی تابع

ديسکها تعداد- 1مبدأ ستون- 2کمکی ستون- 3مقصد ستون- 4

: باشد می زير صورت به است گرفته قرار استفاده مورد تابع اين آن در که ای برنامه و هانوی تابع

#include <iostream.h>

int hanoi(int, char, char, char);

int main( ){ int disks;

cout<<"Moving disks form tower A to C."<<endl; cout<<"How many disks do you want to move?"; cin>>disks; cout<<hanoi(disks,'A','B','C')<<endl;

return 0;}

int hanoi(int n, char first, char help, char second) { if (n == 1) { cout << "Disk " << n << " from tower " << first << " to tower " << second << endl; } else { hanoi(n-1, first, second, help); cout << "Disk " << n << " from tower " << first << " to tower " << second << endl; hanoi(n-1, help, first, second); } return 0;}

: باشد می زير صورت به ببينيم را ديسک چهار انتقال مراحل خواهيم می اينکه فرض با برنامه خروجی

Moving disks form tower A to C.How many disks do you want to move?4Disk 1 from tower A to tower BDisk 2 from tower A to tower CDisk 1 from tower B to tower CDisk 3 from tower A to tower BDisk 1 from tower C to tower A

53

Page 54: آموزش زبان برنامه نویسی C++

Disk 2 from tower C to tower BDisk 1 from tower A to tower BDisk 4 from tower A to tower CDisk 1 from tower B to tower CDisk 2 from tower B to tower ADisk 1 from tower C to tower ADisk 3 from tower B to tower CDisk 1 from tower A to tower BDisk 2 from tower A to tower CDisk 1 from tower B to tower C0

باشد: می زير شکل صورت به هانوی تابع فراخوانی روال

بعدی مبحث

تصادفی اعداد توليد

در. می سازی شبيه کارهای در آن از استفاده کامپيوتر، اساسی کاربردهای از يکی نحوه بررسی به اينجا باشداعداد. می تصادفی اعداد توليد مثال عنوان به دارند، فراوانی کاربرد سازی شبيه مسائل در تصادفی پردازيمقبيل. اين از مسائلی و تاس پرتاب سکه، پرتاب سازی شبيه

در دارد، قرار stdlib.h ای کتابخانه فايل در که را )(rand نام با تابعی C++ زبان تصادفی اعداد توليد برایبه. گذاشته ما اختيار : زير دستور مثال عنوان است

i = rand();

اين در مساوی احتمال با را اعداد )(rand تابع. دهد می قرار i متغير در را 32767 تا 1 بين تصادفی عدد يکاست. برابر ديگر اعداد با بازه اين در عددی هر انتخاب شانس پس کند می انتخاب بازه

U به. می متفاوت ماست نياز مورد که آنچه با شود، می توليد rand تابع توسط که اعدادی بازه معموال باشد داريم. نياز تصادفی عدد شش به تاس برای و تصادفی عدد دو به سکه پرتاب سازی شبيه برای مثال عنوان

54

Page 55: آموزش زبان برنامه نویسی C++

چه. تبديل 6 تا 1 بين عددی به را 31250 عدد خواهيد می که کنيد فرض گيريد؟ می نظر در را کاری راه کنيد باقيمانده دانيد می که همانطور باشد، می صحيح باقيمانده از استفاده دارد وجود تبديل اين برای که راهیپس. می 5 تا 0 اعداد از يکی 6 بر عددی هر تقسيم صحيح بين عددی ، باقيمانده به واحد 1 کردن اضافه با باشد

به. خواهيم 6 تا 1 دکمه روی بر کليک با و کنيد وارد 32767 تا 1 بين عددی زير کادر در مثال عنوان داشت: ببينيد را محاسبه نتيجه ، خروجی محاسبه

a=

a%6+1=

می ما به 6 تا 1 بين تصادفی عددی rand()%6+1 عبارت دهيم قرار را )(rand تابع ، a متغير جای به اگر حالکنيم. استفاده زير فرمول از توانيم می [a,b] بازه در تصادفی عددی آوردن بدست برای کلی طور به دهد

rand()%(b-a+1)+a

باشد. می [20,100] بازه در صحيحی عدد زير برنامه قطعه خروجی مثال عنوان به

int a = 20 , b = 100;cout<< rand()%(b-a+1)+a;

که. می ايجاد را 6 تا 1 بين تصادفی عدد 20 زير برنامه  در تاس يک پرتاب بار 20 توان می را برنامه اين کند: گرفت نظر

#include <iostream.h>#include <stdlib.h>

int main(){ for (int i = 1; i<= 20; i++ ) { cout << rand() % 6 + 1<<"\t";

if ( i % 5 == 0 ) cout << endl; } return 0;}

: باشد می زير صورت به فوق برنامه خروجی

5 5 3 5 52 4 2 5 55 3 2 2 15 1 4 6 4

U را خروجی و کنيد اجرا را فوق برنامه ديگر بار يک خواهيد. بررسی مجددا U خروجی ديد کنيد اعداد همان دقيقاخروجی. می قبلی U اعداد همان برنامه دوباره اجرای با ولی باشد می تصادفی اعداد )(rand تابع باشد به مجددااين. می تکرار قبلی ترتيب همان کاربرد برنامه زدايی اشکال ودر باشد می تابع قابليتهای از يکی تکرار شونددارد.

55

Page 56: آموزش زبان برنامه نویسی C++

U اعداد )(rand تابع که بخواهيم اگر اين. استفاده )(srand تابع از بايد کند ايجاد تصادفی کامال از ورودی تابع کنيم تابع ورودی مقدار اساس بر )(rand تابع شدن تصادفی باعث و گيرد می عالمت بدون صحيح اعداد نوع

srand)( تابع. می در. قرار stdlib.h ای کتابخانه فايل در نيز )(srandشود از استفاده نحوه به زير برنامه داردبرد. خواهيد پی )(srand تابع

#include <iostream.h>#include <stdlib.h>

int main(){ unsigned int num;

cout<<"Enter a number: "; cin>>num;

srand(num);

for (int i = 1; i<= 20; i++ ) { cout << rand() % 6 + 1<<"\t";

if ( i % 5 == 0 ) cout << endl; } return 0;}

باشد. می زير صورت به برنامه خروجی

Enter a number: 2513 4 1 4 66 4 6 2 55 3 1 4 51 6 6 6 1Enter a number: 3501 4 3 4 12 6 2 6 24 2 5 3 54 4 5 2 3Enter a number: 2513 4 1 4 66 4 6 2 55 3 1 4 51 6 6 6 1

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

time تابع از توانيم می باشيم داشته تصادفی اعداد کاربر، توسط عددی کردن وارد به نياز بدون بخواهيم اگر بر را زمان و خواند می را کامپيوتر ساعت time تابع. کنيم استفاده دارد قرار time.h ای کتابخانه فايل در که

زير: دستور ترتيب اين به ، گرداند می بر ثانيه حسب

srand(time(0));

56

Page 57: آموزش زبان برنامه نویسی C++

اگر. ايجاد را متفاوتی اعداد برنامه اجرای بار هر در )(rand تابع که شود می باعث صورت به را فوق برنامه کندداشت. خواهيم متفاوتی تصادفی اعداد برنامه اجرای بار هر با کنيم نويسی باز زير

#include <iostream.h>#include <stdlib.h>#include <time.h>

int main(){ srand(time(0));

for (int i = 1; i<= 20; i++ ) { cout << rand() % 6 + 1<<"\t"; if ( i % 5 == 0 ) cout << endl; } return 0;}

و کند پرتاب بار 2000 را سکه که صورت بدين ، کند سازی شبيه را ای سکه پرتاب که بنويسيد ای برنامه: مثالکند. چاپ را سکه آمدن پشت يا رو دفعات

#include <iostream.h>#include <stdlib.h>#include <time.h>

int main(){ int back=0,front=0,face;

srand(time(0));

for (int i = 1; i<= 2000; i++ ) { face=rand()%2+1; switch(face) { case 1: ++back; break; case 2: ++front; break; default: cout<<"Error!"; } }

cout<<"Front: "<< front<<endl; cout<<"Back : "<< back<<endl;

return 0;}

57

Page 58: آموزش زبان برنامه نویسی C++

enum ای داده نوع

enum می ايجاد گويند، می شمارش داده نوع آن به که را نويس برنامه توسط شده تعريف ای داده نوع يک نحوه. باشد. می زير صورت به شمارش داده نوع يک ايجاد کند

enum {ثابت n 1 ثابت و 2 ثابت و... و داده نوع نام {

صورت به. دهد می قرار را n تا 0 متوالی صحيح اعداد nثابت و... و 2 ثابت ، 1 ثابت در ترتيب به دستور اينشود. می شروع صفر از دستور اين در متغيرها مقداردهی فرض پيش

enum TrueFalse {FALSE , TRUE}

حال. می تخصيص را 1 عدد TRUE ثابت به و صفر عدد ، FALSE ثابت به فوق دستور بخواهيم اگر دهد: کنيم مشخص را نظر مورد عدد بايد شود شروع صفر از غير عددی از مقداردهی

enum Days {SAT = 1, SUN, MON, TUE, WED, THU, FRI}

توصيه. می نسبت را 7 تا 1 اعداد ترتيب به هفته روزهای به فوق دستور های ثابت نام که شود می دهدU. نمی اشتباه ، برنامه متغيرهای با ثابتها اين صورت بدين ، بنويسيد بزرگ حروف با را شمارشی ضمنا شوند

enum ببريد. کار به برنامه ابتدای در را

به. می نسبت را نامی اعداد از ليستی موارد از يک هر به داده نوع اين حقيقت در مثال در نمونه عنوان دهدکرديم. گذاری نام هفته روزهای از يکی با را 7 تا 1 اعداد از يک هر هفته روزهای

باشد. می پذير امکان مختلف های صورت به ليست موارد دهی مقدار

enum Days { MON, TUE, WED, THU, FRI, SAT , SUN = 0}

کند. می دهی مقدار 6-   عدد با را MON و... و -1 عدد با را SAT و صفر عدد با را SUN فوق دستور

enum Colors {BLACK = 2, GREEN = 4, RED = 3, BLUE = 5, GRAY,WHITE = 0}

می دهی مقدار 6 عدد با GRAY و شوند می دهی مقدار شده داده نسبت عدد با موارد از يک هر فوق دستور دراست. آمده BLUE = 5 از بعد چون شود

توان می و گردد می استفاده قابل نويس برنامه توسط شده نوشته داده نوع ، ليست شدن ساخته محض به می تعريف را متغيرها ساير که ای شيوه همان به نويس برنامه توسط شده نوشته داده نوع از را متغيرهايی

به. تعريف کرديم، : مثال عنوان کرد

TrueFalse tf1,tf2;Days day1, day2 = SUN;Colors color1 = BLACK , color2 = GRAY;

به. تعريف داده، نوع ايجاد هنگام توان می را متغيرها همچنين : مثال عنوان کرد

58

Page 59: آموزش زبان برنامه نویسی C++

TrueFalse {FALSE, TRUE} tf1 ,tf2;

به. مجاز غير عمل اين عکس بر ولی باشد می مجاز صحيح عدد به enum نوع از ای داده تبديل : نکته است: مثال عنوان

enum MyEnum {ALPHA, BETA, GAMMA};int i = BETA;int j = 3+GAMMA;

دهند. می قرار j در را 5 و i در را 1 عدد دستورات اين و باشند، می مجاز فوق دستورات

enum MyEnum {ALPHA, BETA, GAMMA};MyEnum x = 2;MyEnum y = 123;

البته. می مجاز غير فوق دستورات ولی يک تنها و گيرند می ناديده را موضوع اين کامپايلرها از بعضی باشند کار به از برنامه در منطقی خطاهای وقوع از پيشگيری برای که شود می توصيه ولی دهند می اخطار پيغامکنيد. خودداری فوق کدهای مانند دستوراتی بردن

دهد. می نشان را enum داده نوع کاربرد نحوه زير برنامه

#include <iostream.h> int main(){ enum PizzaSize{SMALL,MEDIUM,LARGE,EXTRALARGE}; PizzaSize size; size=LARGE;

cout<<"The small pizza has a value of "<<SMALL; cout<<"\nThe medium pizza has a value of "<<MEDIUM; cout<<"\nThe large pizza has a value of "<<size;

return 0;}

باشد: می زير صورت به برنامه خروجی

The small pizza has a value of 0The medium pizza has a value of 1

آرگومان و خروجی بدون توابع

توابعی يا و برگردانند تابع خروجی عنوان به را چيزی ندارند نياز که کنيم می پيدا نياز توابعی به نويسی برنامه درزبان. هر ويا ندارند ورودی و آرگومان به نياز که در را void کلمه توابعی، چنين از استفاده امکان برای C++ دو

اگر. داده قرار ما اختيار تابع خروجی داده نوع جای به است کافی کنيم ايجاد خروجی بدون تابعی بخواهيم استبه. قرار را void کلمه کنيد. توجه زير تابع دهيم

void function (int num)

59

Page 60: آموزش زبان برنامه نویسی C++

{ cout << "My input is" << num << endl;}

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

در. تعريف void نوع از را main تابع بعد به اين از توانيم می شديد آشنا void با که حال ديگر صورت اين کنيم: نداريم برنامه انتهای در;return 0 دستور از استفاده به نيازی

void main(){برنامه دستورات }

می بازنويسی void نوع از استفاده با نوشتيم بازگشتی توابع مبحث در که را هانوی برج برنامه مثال عنوان بهکنيم.

#include <iostream.h>

void hanoi(int, char, char, char);

void main( ){ cout<<"Moving 4 disks form tower A to C."<<endl; hanoi(4,'A','B','C');}

void hanoi(int n, char first, char help, char second) { if (n == 1) { cout << "Disk " << n << " from tower " << first << " to tower " << second << endl; } else { hanoi(n-1, first, second, help); cout << "Disk " << n << " from tower " << first << " to tower " << second << endl; hanoi(n-1, help, first, second); }}

void تابع نوع زيرا است، شده نوشته return دستور بدون hanoi تابع بينيد می فوق برنامه در که همانطورU توانيم می را خروجی بدون توابع و است خروجی بدون تابع يعنی باشد، می فوق برنامه همانند مستقيما

يعنی. فراخوانی بنويسيم. نظر مورد آرگومانهای همراه را تابع نام است کافی کنيد

خالی را پرانتز اين اينکه يا بنويسيد را void کلمه تابع پرانتز در توانيد می آرگومان بدون توابع ايجاد برایننويسيد. چيزی آن در و گذاشته

void function1();int function2(void);

60

Page 61: آموزش زبان برنامه نویسی C++

و. می ايجاد آرگومان بدون و خروجی بدون توابع نوع از function1 تابع فوق دستور دو در function2 تابع شود بدون توابع کاربرد نحوه با آشنايی برای باشد، می صحيح عدد نوع از خروجی با و آرگومان بدون توابع نوع از

: کنيد توجه زير برنامه به آرگومان

#include <iostream.h>

int function(void);

void main( ){ int num, counter = 0; float average, sum = 0;

num=function();

while (num != -1){ sum += num ; ++counter; num=function(); }

if (counter != 0){ average = sum / counter; cout << "The average is " << average << endl; } else cout << "No numbers were entered." << endl;}

int function(void){ int x; cout << "Enter a number (-1 to end):"; cin >>x; return x;}

دارای و باشد می آرگومان بدون توابع نوع از function تابع کنيد می مشاهده فوق برنامه در که همانطوراين. می صحيح خروجی از متغيری دريافت تابع اين وظيفه و است شده فراخوانی بار دو برنامه در تابع باشد دريافت عدد )(num=function دستور باشدو می تابع خروجی عنوان به متغير آن برگرداندن و کليد صفحهU برنامه اين باشيد داشته ياد به اگر دهد می قرار num متغير در را کليد صفحه از شده از استفاده بدون قبالبرای. نوشته while تکرار ساختار مبحث در تابع برنامه با را آن شود می توصيه برنامه اين بهتر درک بوديم

از را ما  function تابع که شد خواهيد متوجه و کنيد، مقايسه while تکرار ساختار مبحث در موجود تر مفهوم و تر خالصه برنامه نيز و است کرده نياز بی دستورات از بعضی نويسی دوبارهاست. شده

بعدی مبحث

حوزه قوانين

در. می گفته متغير آن حوزه باشد، می استفاده قابل و شده تعريف متغيری آن در که برنامه از قسمتی شود بلوک يک رسد می پايان به ( }) عالمت با و شده شروع ( {) عالمت يک با که برنامه از قسمتی به C++ زبانبه. می قابل بلوک آن در فقط متغير کنيم، می تعريف بلوک يک در را متغيری که هنگامی مثال عنوان گويند

به. می ، است شده تعريف آن در که بلوکی متغير آن حوزه ولذا باشد می دسترسی : کنيد توجه زير مثال باشد

61

Page 62: آموزش زبان برنامه نویسی C++

#include <iostream.h>

void main( ){ { int x= 1; cout << x; } cout << x;}

کرد خواهيم دريافت را 'Undefined symbol 'x خطای پيغام کنيم اجرا بخواهيم و بنويسيم را فوق برنامه اگر قابل تابع خود در لذا است، شده تعريف main تابع درونی بلوک در فقط x متغير که است اين امر اين ودليل

در. نمی دسترسی پردازيم. می بلوک حوزه و فايل حوزه تابع، حوزه بررسی به مبحث اين باشد

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

#include <iostream.h>

int x=1;int f();

void main( ){ cout << x; cout << f(); cout << x;}int f(){ return 2*x;}

لذا. می فایل حوزه دارای x متغیر خروجی. می استفاده قابل f تابع و main تابع در باشد به فوق برنامه باشدباشد. می زير صورت

121

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

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

داده قرار ما اختیار در را static کلمه c++ زبان دارد، نگه نیز تابع فراخوانی بعدی دفعات برای و کرده حفظکلمه. : قرار متغیر نوع از قبل باید را static است مانند. دهیم

static int x=1;

می دهی مقدار تابع فراخوانی اولین با متغیر این و کند می تعریف صحیح عدد نوع از را x متغیر فوق دستوربه. می حفظ را خود قبلی مقدار تابع فراخوانی بعدی دفعات در و شود کنید: توجه زیر مثال کند

62

Page 63: آموزش زبان برنامه نویسی C++

#include <iostream.h>

int f();

void main( ){ cout << f(); cout << f(); cout << f();}int f(){ static int x=0; x++; return x;}

باشد: می زیر صورت به فوق برنامه خروجی

123

به و شود می اضافه واحد یک x به سپس دهد، می را 0 مقدار x محلی متغیر به f تابع فراخوانی اولین با برنامهپس. می برگردانده خروجی عنوان در. می چاپ 1عدد ابتدا شود دوباره x متغیر ، f تابع فراخوانی دوم بار گردد

خروجی عنوان به و گشته اضافه واحد یک است، 1 عدد که آن قبلی مقدار به بلکه شود، نمی مقداردهیپس. می برگردانده چاپ 3 عدد سوم بار برای f تابع فراخوانی با نهایت در و گردد می چاپ 2 عدد بار این شود

اگر. خواهد بود. خواهد 111 خروجی بنويسيم، static کلمه بدون را فوق برنامه شد

به. می تو در تو های بلوک در همنام متغیرهای کرد، بررسی حوزه قوانین در توان می که نکاتی از یکی باشدکنید: توجه زیر مثال

#include <iostream.h>

void main( ){ int x=1; cout << x; { int x= 2; cout << x; } cout << x;}

خروجی. بلوک در دیگر با و است شده تعریف main تابع در بار یک x متغیر فوق برنامه در به برنامه درونیباشد: می زیر صورت

121

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

63

Page 64: آموزش زبان برنامه نویسی C++

ضمنا. می استفاده قابل دوباره بیرونی x متغیر تغییری main تابع x متغیر مقدار که باشید داشته توجه گردد نشده ایجاد تابع x متغیر روی تاثیری آن، مقداردهی نیز و همنام متغیری از استفاده وجود با یعنی است، نکرده

چون. باشد. می بلوک آن داخل تنها درونی بلوک x متغیر حوزه است

بررسی. می شامل را مبحث این در شده ذکر موارد تمام زیر برنامه فهم در را شما برنامه خروجی و آن شودنماید. می یاری مبحث این بهتر

#include <iostream.h>

void useLocal( void ); // function prototypevoid useStaticLocal( void ); // function prototypevoid useGlobal( void ); // function prototype

int x = 1; // global variable

void main(){ int x = 5; // local variable to main

cout <<"local x in main's outer scope is "<<x<<endl;

{ // start new scope

int x = 7;

cout <<"local x in main's inner scope is "<<x<<endl;

} // end new scope

cout <<"local x in main's outer scope is "<<x<< endl;

useLocal(); //useLocal has local x useStaticLocal(); //useStaticLocal has static local x useGlobal(); //useGlobal uses global x useLocal(); //useLocal reinitializes its local x useStaticLocal();//static local x retains its prior value useGlobal(); //global x also retains its value

cout << "\nlocal x in main is " << x << endl;

} // end main

//useLocal reinitializes local variable x during each callvoid useLocal( void ){ int x = 25; //initialized each time useLocal is called

cout << endl << "local x is " << x << " on entering useLocal" << endl; ++x; cout << "local x is " << x << " on exiting useLocal" << endl;

} // end function useLocal

// useStaticLocal initializes static local variable x // only the first time the function is called; value // of x is saved between calls to this function

64

Page 65: آموزش زبان برنامه نویسی C++

void useStaticLocal( void ){// initialized first time useStaticLocal is called. static int x = 50;

cout << endl << "local static x is " << x << " on entering useStaticLocal" << endl; ++x; cout << "local static x is " << x << " on exiting useStaticLocal" << endl;

} // end function useStaticLocal

// useGlobal modifies global variable x during each callvoid useGlobal( void ){ cout << endl << "global x is " << x << " on entering useGlobal" << endl; x *= 10; cout << "global x is " << x << " on exiting useGlobal" << endl;

} // end function useGlobal

باشد: می زیر صورت به برنامه خروجی

local x in main's outer scope is 5local x in main's inner scope is 7local x in main's outer scope is 5

local x is 25 on entering useLocallocal x is 26 on exiting useLocal

local static x is 50 on entering useStaticLocallocal static x is 51 on exiting useStaticLocal

global x is 1 on entering useGlobalglobal x is 10 on exiting useGlobal

local x is 25 on entering useLocallocal x is 26 on exiting useLocal

local static x is 51 on entering useStaticLocallocal static x is 52 on exiting useStaticLocal

global x is 10 on entering useGlobalglobal x is 100 on exiting useGlobal

local x in main is 5

. useLocal ,useGlobal ,useStaticLocal های نام با تابع سه فوق برنامه در متغیر در شده تعریف x داریمدر. فایل حوزه دارای و باشد می عمومی متغیر یک عنوان به 1 مقدار با برنامه ابتدای  x متغیر ،main تابع است

لذا. شده تعریف 5 مقدار با دستور اجرای هنگام و شود می گرفته نادیده 1 مقدار با x عمومی متغیر استcout ، متغير x در. می چاپ خروجی در 5 مقدار با است. شده تعریف 7 مقدار با x متغیر درونی، بلوک شود می چاپ cout دستور توسط 7 مقدار با x تنها و شوند می گرفته نادیده main تابع محلی x و عمومی x لذا

پس. می نمایان 5 مقدار با main تابع محلی x دوباره رسد، می اتمام به 7 مقدار با x حوزه بلوک آنکه از گرددگردد.

65

Page 66: آموزش زبان برنامه نویسی C++

هنگامی. می تعریف خود در 25 مقدار با را x محلی متغیر useLocal تابع فراخوانی برنامه در تابع این که کندهر. می چاپ را x دوباره و کرده اضافه آن به واحد یک سپس کند، می چاپ را x متغیر ، تابع شود، می بار کند می بین از تابع از خروج هنگام و شود می تعریف آن در 25 مقدار با x متغیر شود، می فراخوانی تابع این که

رود.

را آن سپس و کند می مقداردهی 50 عدد با و کرده تعریف static نوع از را x متغیرمحلی useStaticLocal تابعاما. می چاپش دوباره و کند می اضافه آن به واحد یک و کرده چاپ نمی بين از x مقدار تابع از خروج هنگام کندو. نو از دوباره و باشد می موجود تابع اين برای ، محلی x متغير قبلی مقدار ، تابع مجدد فراخوانی با رود

در. نمی مقداردهی بود. خواهد 51 حاوی x شود، می فراخوانی دوباره تابع که هنگامی اينجا شود

لذا. نمی تعريف خود در را متغيری هيچ useGlobal تابع xمتغير ، کند می مراجعه  x متغير به که هنگامی کندهنگامی. می قرار استفاده مورد عمومی می چاپ عمومی x متغير مقدار شود می فراخوانی تابع اين که گيرد

سپس. هنگامی. می چاپ دوباره و شده ضرب 10 در شود فراخوانی useGlobal تابع دوم بار برای که گرددباشد. می 100 عدد حاوی عمومی x شود می

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

توابع فرض پيش آرگومانهای

برنامه ، حالتی چنين در. بزنيم صدا يکسانی آرگومانهای با دفعات به را تابعی است ممکن نويسی برنامه در فراخوانی در که هنگامی. دهد قرار فرض پيش عنوان به را مقداری ، تابع آرگومانهای برای تواند می نويس تابع به را آرگومان آن فرض پيش مقدار کامپايلر ، باشد شده حذف فرض پيش مقدار دارای آرگومان ، توابع

. فرستاد خواهد

يک از بيش با تابعی که هنگامی. باشند تابع های آرگومان ترين راستی سمت بايد فرض پيش های آرگومان همه آنگاه ، نباشد آرگومان ترين راستی سمت شده حذف آرگومان اگر ، شود می فراخوانی آرگومان

نام که جايی اولين در بايد فرض پيش های آرگومان. شوند حذف بايد نيز آرگومان آن راست سمت آرگومانهایU که) شود می آورده تابع . شوند مشخص( است تابع تعريف پيش در معموال

. باشند ديگر تابع خروجی يا و عمومی متغيرهای ، ثابت مقادير ، اعداد توانند می فرض پيش مقادير

نشان را فرض پيش مقدار با تابع فراخوانی نحوه نيز و فرض پيش های آرگومان به دهی مقدار نحوه زير برنامه. شود می محاسبه ای جعبه حجم برنامه اين در. دهد می

#include <iostream.h>

// function prototype that specifies default argumentsint boxVolume(int length=1, int width=1, int height=1);

int main(){ //no arguments--use default values for all dimensions cout <<"The default box volume is: "<<boxVolume();

//specify length; default width and height cout <<"\n\nThe volume of a box with length 10,\n" <<"width 1 and height 1 is: "<<boxVolume(10);

//specify length and width; default height cout <<"\n\nThe volume of a box with length 10,\n" <<"width 5 and height 1 is: "<<boxVolume(10,5);

//specify all arguments

66

Page 67: آموزش زبان برنامه نویسی C++

cout <<"\n\nThe volume of a box with length 10,\n" <<"width 5 and height 2 is: "<<boxVolume(10,5,2) <<endl;

return 0; // indicates successful termination

} //end main

// function boxVolume calculates the volume of a boxint boxVolume( int length, int width, int height ){ return length * width * height;} // end function boxVolume

. باشد می زير صورت به فوق برنامه خروجی

The default box volume is: 1

The volume of a box with length 10,width 1 and height 1 is: 10

The volume of a box with length 10,width 5 and height 1 is: 50

The volume of a box with length 10,width 5 and height 2 is: 100

توجه. است شده داده 1 فرض پيش مقدار تابع آرگومان سه از يک هر به boxVolume تابع تعريف پيش درU ، شوند نوشته تابع تعريف پيش در بايد فرض پيش مقادير که باشيد داشته در تابع های آرگومان نام نوشتن ضمنا می توصيه البته ، است گرفته انجام بيشتر خوانايی برای تنها اينکار فوق برنامه در و نيست الزامی تعريف پيش می را فوق برنامه در boxVolume تابع فرض پيش مثال عنوان به. کنيد استفاده شيوه اين از نيز شما که شود

: بنويسيم نيز زير صورت به توانستيم

int boxVolume (int = 1 , int = 1 , int = 1 );

مقدار سه هر لذا است نشده داده آن به آرگومانی هيچ فوق برنامه در boxVolume تابع فراخوانی اولين در فراخوانی دومين در. شود می 1 عدد جعبه حجم و گيرد می قرار استفاده مورد ها آرگومان فرض پيش

. شوند می استفاده height و width های آرگومان فرض پيش مقادير لذا ، گردد می ارسال length آرگومان height آرگومان فرض پيش مقادير لذا گردند می ارسال length و width های آرگومان فراخوانی سومين در

پيش مقدار هيچ از لذا شوند می ارسال آرگومان سه هر فراخوانی آخرين در. گيرد می قرار استفاده مورد. شود نمی استفاده فرضی

می گرفته نظر در length عنوان به آرگومان آن ، شود می فرستاده تابع به آرگومان يک که هنگامی پس به چپ سمت از ترتيب به را آنها تابع شود می فرستاده boxVolume تابع به آرگومان دو که هنگامی و شود

فرستاده آرگومان هرسه که هنگامی سرانجام و گيرد می نظر در width سپس و length آرگومان عنوان. گيرند می قرار height و width و length در چپ سمت از ترتيب به شود می

قبلی مبحث بعدی مبحث

حوزه تفکيک يگانی عملگر

67

Page 68: آموزش زبان برنامه نویسی C++

می پذير امکان برنامه در نام يک با عمومی و محلی متغيرهای تعريف ديديد حوزه قوانين مبحث در که همانطور محلی متغير با همنام عمومی متغير به دستيابی امکان برای را( ::) دامنه تفکيک يگانی عملگر C++ زبان. باشد

حوزه در عمومی متغير به دستيابی به قادر تنها عملگر اين که باشيد داشته توجه. است داده قرار ما اختيار در ،U. باشد می فايل آنکه شرط به ؛ باشد می دستيابی قابل نيز عملگر اين به نياز بدون عمومی متغير ضمنا

متغير نام همراه( ::) عملگر از استفاده. نشود برده کار به برنامه در ، عمومی متغير با همنام متغيرمحلی اما. است اختياری ، باشد نشده برده کار به ديگری متغير برای عمومی متغير نام که صورتی در ، عمومی متغير نام کنار در همواره عملگر اين از کنيد می استفاده عمومی متغير از بدانيد اينکه برای که شود می توصيه

. دهد می نشان را( ::) عملگر کاربرد نحوه زير برنامه. کنيد استفاده عمومی

#include <iostream.h>

float pi=3.14159;

void main( ){ int pi=::pi; cout << "Local pi is : " << pi << endl; cout << "Global pi is : " << ::pi << endl;}

: باشد می زير صورت به برنامه خروجی

Local pi is : 3Global pi is : 3.14159

مقدار با int نوع از pi محلی متغير تابع در و است شده تعريف float نوع از pi عمومی متغير فوق برنامه در عملگر از عمومی pi مقدار به دستيابی برای که باشيد داشته توجه. شود می دهی مقدار عمومی pi اوليه که محلی pi متغير ، cout دستور توسط ، محلی pi به دهی مقدار از پس. شد استفاده( ::) حوزه تفکيک يگانی خواهد چاپ باشد می 3.14159 حاوی که عمومی pi متغير بعدی خط در و گردد می چاپ است 3 عدد حاوی. شد

ارجاع با ، تابع به ها آرگومان ارسال

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

به را توابع تعريف مبحث در maximum تابع مثال عنوان به ، نشد فرستاده تابع به متغير خود هرگز و بود عدد يا: کنيم می فراخوانی زير صورت

int a=5, b=6, c=7, max;max = maximum(a,b,c);

تابع به 7 و 6 و 5 يعنی cو bو a در موجود مقادير فرستادن و تابع فراخوانی گيرد می صورت اينجا در که کاری. شوند نمی فرستاده متغيرها خود و. باشد می

68

Page 69: آموزش زبان برنامه نویسی C++

و 6 و 5 برابر ترتيب به zو yو x متغيرهای مقدار ، شود می فراخوانی maximum تابع که هنگامی صورت بدين . داشت نخواهد cو bو a متغيرهای روی تأثيری ، تابع در  zو yو x متغيرهای روی تغييری هرگونه و شد خواهند7

. اند گشته ارسال  تابع به آنها در موجود مقادير  بلکه اند نشده فرستاده تابع به cو bو a متغيرهای خود زيرا

به ، دهيم تغيير را خارجی متغيرهای مقادير ، تابع داخل از بخواهيد که آيد می پيش مواردی نويسی برنامه در روش از بايد هدف اين به نيل برای. دهيم تغيير تابع داخل از را a متغير مقدار maximum تابع در مثال عنوان در است کافی ، شود فرستاده ارجاع با تابعی آرگومان آنکه برای. کنيم استفاده ارجاع با ها آرگومان ارسال يک آرگومان نام از قبل تابع تعريف در نيز و بگذاريم( &) عالمت يک آرگومان نوع تعيين از بعد تابع تعريف پيش

. کنيد توجه زير برنامه به ارجاع با ها آرگومان ارسال نحوه با آشنايی برای. دهيم قرار( &) عالمت

#include <iostream.h>

void duplicate (int & , int & );

void main ( ){ int a=1 , b=2 ; cout << "a = " << a << " and b = " << b << endl; duplicate (a,b); cout << "a = " << a << " and b = " << b << endl;}

void duplicate (int &x , int &y){ x*=2; y*=2; }

. باشد می زير صورت به برنامه خروجی

a = 1 and b = 2a = 2 and b = 4

در. می ضرب دو در سپس و گردند می ارسال تابع به bو a متغيرهای فوق برنامه در مقدار برنامه اين شوند دستورهای که هنگامی لذا و شود می فرستاده متغير خود بلکه شود نمی فرستاده bو a متغيرهای

x*=2;y*=2;

می bو a  برای مستعاری نام مانند yو x حقيقت در. شود می برابر دو bو aمتغير دو مقادير گردند می اجرا. باشند

U گيرد صورت تابع در آن معادل متغير در که تغييری گونه هر شود می فرستاده ارجاع با متغيری که هنگامی عينا. گردد می اعمال نيز ارسالی متغير روی بر تغيير آن

69

Page 70: آموزش زبان برنامه نویسی C++

در تابع اين از. کند جا جابه را آنها مقادير و کرده دريافت ورودی عنوان به را متغير دو که بنويسيد تابعی : مثال. کنيد استفاده ای برنامه

#include <iostream.h>void change (int & , int &);int main ( ) { int a=1 , b=2 ; cout << "a is " << a << " and b is " << b << endl; change (a,b); cout << "a is " << a << " and b is " << b << endl; return 0; }void change (int &x , int &y) { int temp; temp = y; y = x; x = temp; }

: است زير صورت به برنامه خروجی

a is 1 and b is 2a is 2 and b is 1

. کند می جا جابه ارجاع با آرگومان ارسال شيوه با change توسط را bو a متغير دو مقادير فوق برنامه

تابع مثال عنوان به ، باشد می تابع از خروجی يک از بيش دريافت ، ارجاع با ارسال کاربردهای از ديگر يکیprevnext گرداند می بر خروجی عنوان به را آرگومان اولين از بعد و قبل صحيح مقادير زير برنامه در .

#include <iostream.h>

void prevnext (int ,int & , int &);

void main ( ){ int x = 100 , y , z ; cout << "The input of prevnext function is " << x << endl; prevnext (x,y,z) ; cout << "previous =" << y <<",Next =" << z;}

void prevnext (int input , int & prev , int & next){ prev = input - 1 ; next = input + 1 ;}

. باشد می زير صورت به فوق برنامه خروجی

70

Page 71: آموزش زبان برنامه نویسی C++

The input of prevnext function is 100previous =99,Next =101

آرگومان ولی کند می دريافت را x متغير در موجود داده مقدار input آرگومان کنيد می مشاهده که همانطور zو y روی بر  nextو prevمتغير روی تغييرات لذا. کنند می دريافت را zو y متغيرهای خود nextو prev های

. شوند می دهی مقدار تابع توسط و گيرد می انجام

تابع( چند برای نام يک از استفاده) توابع کردن گرانبار

++C ترتيب يا ها آرگومان تعداد ، ها آرگومان نوع نظر از توابع که هنگامی ، تابع چند برای را نام يک از استفاده توابع کردن گرانبار ، قابليت اين است کرده پذير امکان را باشند متفاوت هم با ها آرگومان نوع گرفتن قرار

ترتيب و تعداد ، نوع مقايسه با کامپايلر شود می فراخوانی شده گرانبار تابع يک که هنگامی. شود می ناميدهU. کند می انتخاب را درست تابع ها آرگومان که يکسان نامهای با تابع چند ايجاد برای شده گرانبار توابع از معموال

توابع اکثر مثال عنوان به. شود می استفاده دهند می انجام متفاوتی ای داده انواع روی بر را يکسانی کار انجام را يکسانی کار که توابعی کردن گرانبار. اند شده گرانبار متفاوت ای داده انواع برای C++ زبان رياضی

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

#include <iostream.h>

int square( int );double square( double );

void main(){ // calls int version int intResult = square( 7 ); // calls double version double doubleResult = square( 7.5 );

cout << "\nThe square of integer 7 is " << intResult << "\nThe square of double 7.5 is " << doubleResult << endl;

} // end main

// function square for int valuesint square( int x ) { cout <<"Called square with int argument: " << x << endl; return x * x; } // end int version of function square

// function square for double valuesdouble square( double y ) { cout <<"Called square with double argument: " << y << endl; return y * y; } // end double version of function square

71

Page 72: آموزش زبان برنامه نویسی C++

. باشد می زير صورت به برنامه خروجی

Called square with int argument: 7Called square with double argument: 7.5

The square of integer 7 is 49The square of double 7.5 is 56.25

square گرانبارشده تابع از( double) اعشاری عدد يک و (int) صحيح عدد يک مربع محاسبه برای فوق برنامهدستور: که هنگامی. کند می استفاده

int intResult = square (7) ;

: تعريف پيش با square تابع گردد می اجرا

int square (int) ;

: دستور که هنگامی و شود می فراخوانی

double doubleResult = square (7.5) ;

: تعريف پيش با square تابع گردد می اجرا

double square (double );

. شود می فراخوانی

است ممکن و. دهند انجام را يکسانی وظيفه که ندارند الزامی شده گرانبار توابع که باشيد داشته توجه: نکتهU . دهند می انجام را کار يک که کنيد گرانبار را توابعی که شود می توصيه ولی ، باشند داشته تفاوت هم با کامال

ها آرايه اعالن

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

را ها آرايه دليل، همين به شوند می مشخص انديس نام به متغيری توسط آرايه عناصر لذا. کنيم مشخص از يکی نيز آرايه نوع. کند می پيروی متغيرها گذاری نام قواعد از ، آرايه نام. گويند می نيز دار انديس متغيرهای

: است زير صورت به ها آرايه اعالن. باشد می ای داده انواع و حافظه مفاهيم مبحث در شده ذکر داده انواع

نام[ طول آرايه داده نوع آرايه آرايه ];

. کند می ايجاد int نوع از را num نام با ، 6 طول به ای آرايه زير دستور مثال عنوان به

int num [6];

72

Page 73: آموزش زبان برنامه نویسی C++

به. شوند می تفکيک هم از انديس با تنها و باشند می يکسانی نام دارای عناصر تمام که باشيد داشته توجهU ، باشد می -23560 مقدار دارای 2 انديس با عنصر مثال عنوان . شود می شروع 0 از عناصر انديس ضمنا

اينکه فرض با مثال عنوان به ، باشد می پذير امکان عناصر انديس جای به محاسباتی عبارت يک از استفادهزير: دستور ، باشد 3 حاوی b متغير و 2 حاوی a متغير

num [a+b] + = 3;

سه مجموع چاپ برای. گردد می 3 عدد حاوی عنصر اين و کرد خواهد اضافه num [5] عنصر به واحد سه: کنيد استفاده زير دستور از توانيد می آرايه اول عنصر

cout << num[0] + num[1] + num[2] << endl;

: کنيد استفاده توانيد می زير دستور از x متغير در حاصل دادن قرار و 2 بر آرايه چهارم عنصر تقسيم برای

x = num[3]/2;

. باشد می متفاوت( چهار انديس با) چهار شماره عنصر با آرايه چهارم عنصر که باشيد داشته توجه : نکته که اينست امر اين دليل ، باشد می سه انديس دارای چهار شماره عنصر ديديد فوق دستور در که همانطور عنصر ولی باشد می num[3]=-50 آرايه چهارم عنصر فوق آرايه در. شود می شروع صفر از گذاری انديس. باشد می num[4]=32500( چهار انديس با) چهار شماره

: کرد تعريف دستور يک توسط توان می نيز را آرايه چند متغيرها همانند

int b[100] , x[27] ;

x نام با آرايه برای را صحيح عدد نوع از خانه 27 و b نام با آرايه برای را صحيح عدد نوع از خانه 100 فوق دستور. گيرد می نظر در

: کنيد استفاده زير شيوه از توانيد می آرايه عناصر از يک هر به اوليه دهی مقدار برای

int n[5] = {32 , 27 , 64 , 18 , 95 }

73

Page 74: آموزش زبان برنامه نویسی C++

. کند می دهی مقدار زير صورت به را n آرايه عناصر فوق دستور

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

int n[] = { 1 , 2 , 3 , 4 , 5 }

U ، گيرد می نظر در آرايه برای حافظه خانه ، ليست عناصر تعداد به کامپايلر صورت اين در 5 فوق دستور در مثال. شود می گرفته نظر در n آرايه برای حافظه خانه

: است زير روش از استفاده دارد وجود آرايه عناصر به اوليه دهی مقدار برای که ديگری راه

int num[10] = {0}

داشته توجه. کند می صفر را آنها همه مقادير و گيرد می نظر در num آرايه برای حافظه خانه 10 فوق دستور: کنيم استفاده زير دستور از اگر که باشيد

int num[10] = {1}

. گيرند می را صفر مقدار عناصر بقيه و شود می يک آرايه اول عنصر بلکه گيرند نمی را 1 مقدار عناصر تمامی

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

const متغير داده نوع   ثابت متغير نام= متغير مقدار ;

: مثال عنوان به

const int arraySize = 10;

ثابت متغير يک مقدار که باشيد داشته توجه. دهد می انتساب ثابت arraySize متغير به را 10 عدد فوق دستور تعيين بايد نيز اش اوليه مقدار ، شدن تعريف هنگام در ثابت متغير نيز و داد تغيير توان نمی برنامه طول در را

يک" متغير" کلمه. شود می گفته نيز خواندنی فقط متغيرهای ، ثابت متغيرهای به. گردد ضد مرکب کلمه ثابت در متغيرهای اينگونه برای که است اصطالحی اين و باشد می ثابت متضاد متغير کلمه چون باشد می نقيض و

: دهد می نشان را ثابت متغير يک تعريف نحوه زير برنامه. رود می کار به نويسی برنامه زبانهای اکثر

74

Page 75: آموزش زبان برنامه نویسی C++

#include <iostream.h>

void main(){ const int x = 7;

cout << "The value of constant variable x is: " << x << endl;

}

گفتيم که همانطور. کند می چاپ آنرا cout دستور توسط و دهد می قرار x ثابت متغير در را 7 عدد فوق برنامه. کنيد توجه زير برنامه به ، باشد نمی تغيير قابل ثابت نيز و گردد تعيين بايد تعريف هنگام در ثابت متغير مقدار

#include <iostream.h>

void main(){ const int x;

x=7;}

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

Compiling C:\TCP\BIN\CONST1.CPP:Error : Constant variable 'x' must be initializedError : Cannot modify a const object

دهی مقدار for حلقه توسط آرايه عناصر و گردد می تعيين ثابتی متغير توسط آرايه طول زير برنامه در : مثال. گردد می چاپ آرايه عناصر مقدار ، ديگری for حلقه توسط سپس و شده

#include <iostream.h>

void main(){ const int arraySize = 10;

int s[ arraySize ];

for ( int i = 0; i < arraySize; i++ ) s[ i ] = 2 + 2 * i;

cout << "Element Value" << endl;

for ( int j = 0; j < arraySize; j++ ) cout << j << "\t " << s[ j ] << endl;

}

: باشد می زير صورت به فوق برنامه خروجی

75

Page 76: آموزش زبان برنامه نویسی C++

Element Value0 21 42 63 84 105 126 147 168 189 20

آنها کاربرد و ها آرايه از مثال چند

مجموع سپس داده قرار ای آرايه در و کرده دريافت ورودی را صحيح عدد 10 که بنويسيد ای برنامه : مثال. نمايد چاپ درخروجی و کرده محاسبه را آرايه عناصر

#include <iostream.h>

void main(){ const int arraySize = 10; int total = 0,i; int a[ arraySize ];

for (i = 0; i < arraySize; i++) { cout << "Enter number " << i << " : "; cin >> a[ i ]; }

for (i = 0; i < arraySize; i++ ) total += a[ i ];

cout << "Total of array element values is " << total << endl;

}

: باشد می زير صورت به برنامه خروجی

Enter number 0 : 12Enter number 1 : 3Enter number 2 : 4Enter number 3 : 654Enter number 4 : 34Enter number 5 : 2Enter number 6 : 123Enter number 7 : 794Enter number 8 : 365Enter number 9 : 23Total of array element values is 2014

76

Page 77: آموزش زبان برنامه نویسی C++

و 15و 7و 11و 9و 13و 5و 17و 1} اعداد برای افقی ای ميله نمودار ، آرايه توسط که بنويسيد ای برنامه : مثال. کند رسم { 19و 3

#include <iostream.h>

int main(){ const int arraySize = 10; int n[ arraySize ] = { 19, 3, 15, 7, 11, 9, 13, 5, 17, 1 };

cout << "Element" << " Value" << endl;

for ( int i = 0; i < arraySize; i++ ) { cout << i << "\t " << n[ i ] << "\t";

for ( int j = 0; j < n[ i ]; j++ ) cout << '*'; cout << endl; }

return 0;

}

: باشد می زير صورت به برنامه خروجی

Element Value0 19 *******************1 3 ***2 15 ***************3 7 *******4 11 ***********5 9 *********6 13 *************7 5 *****8 17 *****************9 1 *

را وجه هر آمدن دفعات تعداد ای آرايه توسط و کرده پرتاب بار 6000 را تاس يک که بنويسيد ای برنامه : مثال( بگيريد نظر در ای آرايه عنصر يک را وجه هر آمدن دفعات تعداد.) کند حساب

#include <iostream.h>#include <stdlib.h>#include <time.h>

void main(){ const int arraySize = 7; int frequency[ arraySize ] = { 0 };

srand( time( 0 ) );

for ( int roll = 1; roll <= 6000; roll++ )

77

Page 78: آموزش زبان برنامه نویسی C++

++frequency[ 1 + rand() % 6 ];

cout << "Face Frequency" << endl;

for ( int face = 1; face < arraySize; face++ ) cout << face << "\t" << frequency[face] << endl;

}

: باشد می زير صورت به برنامه خروجی

Face Frequency1 10232 9903 10084 9715 10256 983

زيرا ، کند می اضافه واحد يک را وجه هر به مربوط عنصر مقدار ، ;frequency [rand()%6 + 1]++ دستورrand()%6 + 1 از يکی به مربوط عنصر مقدار تنها تصادفی طور به بار هر پس ، کند می توليد 6 تا 1 بين عددی

. يابد می افزايش وجوه

که متغيرهايی حال به تا. باشد می حروف از ای رشته ذخيره برای آنها از استفاده ، ها آرايه های برد کار از يکی عنوان به اينجا در شدند می اعداد شامل تنها ديديد اينجا به تا که هايی آرايه يا و کرديم می دريافت ورودی از

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

باشد. می حروف از ای آرايه واقع در "hello"مانند: ای رشته عبارت يک

char string1[]="hello";

طول. می دهی مقدار hello کلمه با را string1 نام به ای آرايه فوق دستور طول با است برابر فوق آرايه کندلذا. می مشخص را رشته انتهای که پوچ کاراکتر به است مربوط که واحد يک بعالوه 5 يعنی hello کلمه کندکاراکتر. می 6 طول دارای string1 آرايه انتهای. می مشخص '0'\ توسط C++ زبان در پوچ باشد کليه گردد

شود. می مشخص کاراکتر اين با ای رشته عبارات

char string1[]={'h','e','l','l','o','\0'}

توجه. می دهی مقدار جداگانه را string1 آرايه عناصر فوق دستور دستور در آرايه عناصر که باشيد داشته کندنتيجه. تعيين '0'\ با رشته انتهای نيز و گرفتند قرار)'( داخل فوق ";char string1[]="hello دستور همانند شدباشد. می

که عنصری انديس توسط رشته، حروف از يک هر به لذا باشند، می حروف از ای آرايه ای، رشته عبارت چونبه. پيدا دسترسی توان می باشد، می حرف آن شامل string1[3] و 'h' شامل string1[0] مثال عنوان کردباشد. می '0'\ شامل string1[5] و 'l' شامل

داد. قار ای رشته ای آرايه در را کليد صفحه از شده وارد کلمه مستقيم طور به توان می نيز cin دستور توسط

78

Page 79: آموزش زبان برنامه نویسی C++

char string2[20];

باشد. می دارا را پوچ کاراکتر همراه به 19 طول با ای کلمه دريافت قابليت که ای رشته آرايه يک فوق دستور

cin >> string2;

انتهای به را پوچ کاراکتر دهدو می قرار string2 در و خوانده کليد صفحه از را حروف از ای رشته فوق دستوربه. می اضافه کاربر توسط شده وارد رشته تا کليد صفحه از را ها کاراکتر cin دستور فرض پيش طور کند

به. می يافت در خالی فضای اولين به رسيدن کاربر ;cin >> string2 دستور اجرای هنگام اگر مثال عنوان کندچون. می قرار string2 در hello کلمه تنها کند، وارد را" hello there" عبارت شامل شده وارد عبارت گيردبرنامه. فاصله کاراکتر دهد. می نشان را ای رشته های آرايه گيری کار به نحوه زير است

#include <iostream.h>

void main(){ char name[ 20 ];

cout << "Please Enter your name : "; cin >> name;

cout << "Welcome, " << name << " to this program. \n" ;

cout << "Your separated name is\n";

for ( int i = 0; name[ i ] != '\0'; i++ ) cout << name[ i ] << ' ';

}

: باشد می زير صورت به برنامه خروجی

Please Enter your name : MohammadWelcome, Mohammad to this program.Your separated name isM o h a m m a d

ضمنا. می چاپ خروجی در جدا جدا را کاربر توسط شده وارد نام حروف ، for حلقه فوق برنامه در شرط کندباشد. نرسيده رشته انتهای به حلقه که است برقرار شرط اين وقتی تا و باشد می 'name[ i ] != '\0 حلقه

دفعات برای و کرده حفظ را خود مقدار تابع، محلی متغير يک بخواهيم اگر که ديديد حوزه قوانين مبحث درنوع. استفاده static کلمه از دارد، نگه نيز تابع فراخوانی بعدی به توان می نيز ها آرايه برای را static کرديمبه. می پيروی مذکور مبحث در شده گفته قوانين همان از و برد کار کنيد. توجه آن خروجی و زير برنامه کند

#include <iostream.h>

void staticArrayInit( void );void automaticArrayInit( void );

79

Page 80: آموزش زبان برنامه نویسی C++

int main(){ cout << "First call to each function:\n"; staticArrayInit(); automaticArrayInit();

cout << "\n\nSecond call to each function:\n";

staticArrayInit(); automaticArrayInit(); cout << endl;

return 0;

}

// function to demonstrate a static local arrayvoid staticArrayInit( void ){ // initializes elements to 0 // first time function is called static int array1[ 3 ]={0};

cout << "\nValues on entering staticArrayInit:\n";

// output contents of array1 for ( int i = 0; i < 3; i++ ) cout << "array1[" << i << "] = " << array1[ i ] << " ";

cout << "\nValues on exiting staticArrayInit:\n";

// modify and output contents of array1 for ( int j = 0; j < 3; j++ ) cout << "array1[" << j << "] = " << ( array1[ j ] += 5 ) << " ";

} // end function staticArrayInit

// function to demonstrate an automatic local arrayvoid automaticArrayInit( void ){ // initializes elements each time function is called int array2[ 3 ] = { 1, 2, 3 }; cout << endl << endl; cout << "Values on entering automaticArrayInit:\n";

// output contents of array2 for ( int i = 0; i < 3; i++ ) cout << "array2[" << i << "] = " << array2[ i ] << " ";

cout << "\nValues on exiting automaticArrayInit:\n";

// modify and output contents of array2 for ( int j = 0; j < 3; j++ ) cout << "array2[" << j << "] = " << ( array2[ j ] += 5 ) << " ";

80

Page 81: آموزش زبان برنامه نویسی C++

}

: باشد می زير صورت به برنامه خروجی

First call to each function:

Values on entering staticArrayInit:array1[0] = 0 array1[1] = 0 array1[2] = 0Values on exiting staticArrayInit:array1[0] = 5 array1[1] = 5 array1[2] = 5

Values on entering automaticArrayInit:array2[0] = 1 array2[1] = 2 array2[2] = 3Values on exiting automaticArrayInit:array2[0] = 6 array2[1] = 7 array2[2] = 8

Second call to each function:

Values on entering staticArrayInit:array1[0] = 5 array1[1] = 5 array1[2] = 5Values on exiting staticArrayInit:array1[0] = 10 array1[1] = 10 array1[2] = 10

Values on entering automaticArrayInit:array2[0] = 1 array2[1] = 2 array2[2] = 3Values on exiting automaticArrayInit:array2[0] = 6 array2[1] = 7 array2[2] = 8

گيرند می را صفر مقدار staticArrayInit تابع فراخوانی بار اولين در array1 آرايه عناصر فوق برنامه در هر در array2 آرايه اما. کنند می حفظ را خود قبلی مقدار آخرين تابع، اين فراخوانی بعدی دفعات در ولی خود مقدار تابع از خروج با و شود می اوليه دهی مقدار automaticArrayInit تابع فراخوانی باردهد. می دست از را

قبلی مبحث بعدی مبحث

توابع به ها آرايه ارسال

. ببريد کار به( ][) براکت عالمت بدون را آرايه نام کافيست ، تابع يک به آرگومان عنوان به آرايه يک ارسال برای: باشد شده تعريف زير صورت به x نام با ای آرايه اگر مثال عنوان به

int x[24];

زير: صورت به را تابع کافيست modifyArray تابع به آن ارسال برای

modifyArray(x,24);

81

Page 82: آموزش زبان برنامه نویسی C++

U. کند می ارسال  modifyArray تابع به را آن طول و آرايه فوق دستور. کنيد فراخوانی که هنگامی معموال می تابع به جداگانه آرگومان يک عنوان به آرايه همراه نيز را آرايه طول ، کنند می ارسال تابعی به را ای آرايه

فرستند.

++C تابع لذا ، نمايد می ارسال تابع به ارجاع با ها آرگومان ارسال شده سازی شبيه شيوه با را ها آرايه تابع آرگومان عنوان به را تابع نام که هنگامی. دهد تغيير تواند می را ارسالی آرايه عناصر مقدار شده فراخوانی

آرايه عناصر که داند می تابع لذا شود می ارسال تابع به آرايه عنصر اولين حافظه خانه آدرس ، بريم می کار به اين ، دهد می تغيير را آرايه عناصر شده فراخوانی تابع که هنگامی بنابراين. اند گرفته قرار حافظه کجای در

. پذيرد می انجام ، است شده ارسال تابع به که اصلی آرايه عناصر روی تغييرات

تابع به عددی مقادير يا و متغيرها ارسال همانند جداگانه صورت به را آرايه عناصر که باشيد داشته توجه : نکته در. داشت نخواهد آرايه عنصر روی بر تأثيری ، ارسالی آرگومان روی بر تغيير صورت اين در. کرد ارسال. باشد می مقدار با ارسال همان ، شيوه اين حقيقت

، آن آرگومانهای ليست در تابع تعريف هنگام ، باشد ورودی عنوان به آرايه يک دريافت به قادر تابعی اينکه برای: نوشت توان می زير صورت به را modifyArray تابع تعريف مثال عنوان به. گردد مشخص بايد مطلب اين

void modifyArray (int b[] ,int array size)

توسط صحيح اعداد از ای آرايه آدرس دريافت به قادر modifyArray تابع که کند می مشخص فوق دستورU. باشد می arraySize آرگومان توسط آرايه عناصر تعداد و b آرگومان نيست الزم را آرايه عناصر تعداد ضمنا

که باشيد داشته توجه. گيرد می ناديده را آن کامپايلر ، پذيرد صورت نيز کار اين اگر ، بنويسيد( ][) ها براکت بين: بنويسيد زير صورت به را فوق تابع تعريف پيش

void modifyArray (int [] , int);

را تابع به آرايه کل ارسال و تابع به آرايه عنصر يک ارسال تفاوت و تابع به را آرايه يک ارسال نحوه زير برنامه. دهد می نشان

#include <iostream.h>

void modifyArray( int [], int );void modifyElement( int );

void main(){ const int arraySize = 5; int a[ arraySize ] = { 0, 1, 2, 3, 4 };

cout<<"Effects of passing entire array by reference:" <<"\n\nThe values of the original array are:\n";

// output original array for ( int i = 0; i < arraySize; i++ ) cout << "\t"<< a[ i ];

cout << endl;

// pass array a to modifyArray by reference modifyArray( a, arraySize );

cout << "The values of the modified array are:\n";

82

Page 83: آموزش زبان برنامه نویسی C++

// output modified array for ( int j = 0; j < arraySize; j++ ) cout << "\t" << a[ j ];

// output value of a[ 3 ] cout<<"\n\n\n" <<"Effects of passing array element by value:" <<"\n\nThe value of a[3] is " << a[ 3 ] << '\n';

// pass array element a[ 3 ] by value modifyElement( a[ 3 ] );

// output value of a[ 3 ] cout << "The value of a[3] is " << a[ 3 ] << endl;

}

// in function modifyArray, "b" points to // the original array "a" in memoryvoid modifyArray( int b[], int sizeOfArray ){ // multiply each array element by 2 for ( int k = 0; k < sizeOfArray; k++ ) b[ k ] *= 2;}

// in function modifyElement, "e" is a local copy of// array element a[ 3 ] passed from mainvoid modifyElement( int e ){ // multiply parameter by 2 cout << "Value in modifyElement is " << ( e *= 2 ) << endl;}

: باشد می زير صورت به فوق برنامه خروجی

Effects of passing entire array by reference:

The values of the original array are: 0 1 2 3 4The values of the modified array are: 0 2 4 6 8

Effects of passing array element by value:

The value of a[3] is 6Value in modifyElement is 12The value of a[3] is 6

. کند می برابر دو است شده فرستاده آن به که را a آرايه عناصر مقدار modifyArray تابع ، فوق برنامه در در تأثيری ولی کند می چاپ خروجی در و کرده برابر دو را دريافتی آرگومان مقدار modifyElement تابع

. کند نمی ايجاد آن مقدار در تغييری و نداشته آرايه عنصر اصلی نسخه

83

Page 84: آموزش زبان برنامه نویسی C++

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

#include <iostream.h>

void tryToModifyArray( const int [] );

void main(){ int a[] = { 10, 20, 30 };

tryToModifyArray( a );

cout << a[0] <<' '<< a[1] <<' '<< a[2] <<'\n';

}

// In function tryToModifyArray, "b" cannot be used// to modify the original array "a" in main.void tryToModifyArray( const int b[] ){ b[ 0 ] /= 2; // error b[ 1 ] /= 2; // error b[ 2 ] /= 2; // error}

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

Error in line 19: Cannot modify a const objectError in line 20: Cannot modify a const object

ها آرايه کردن مرتب

عنوان به. باشد می کامپيوتر وظايف مهمترين از يکی ، نزولی يا صعودی صورت به چه اطالعات کردن مرتب کردن مرتب ، کنکور در کنندگان شرکت رتبه تعيين ، معدل اساس بر مدرسه يک آموزان دانش رتبه تعيين مثال

ليست ، کردن مرتب شيوه با آشنايی برای. برد نام توان می را تلفن صاحب نام اساس بر ها تلفن شماره: بگيريد نظر در را زير اعداد

2 , 5 , 4 , 3 , 6 , 1

: دهيم می قرار ای آرايه در را آنها بزرگ به کوچک از فوق اعداد ليست کردن مرتب برای

int a[] = { 2 , 5 , 4 , 3 , 6 , 1};

کردن مرتب نام به روشی از کار اين انجام برای. کنيم مرتب صعودی صورت به را a آرايه است کافی حال می حرکت باال سمت به آب در حبابی همانند کوچکتر مقادير اينکه دليل به تکنيک اين. کنيم می استفاده حبابی هر در و کنيم حرکت آرايه روی بايد بار چندين آرايه کردن مرتب برای. شود می گفته حبابی کردن مرتب ، کنند

84

Page 85: آموزش زبان برنامه نویسی C++

باشند داشته قرار نزولی صورت به که صورتی در و ، شوند می مقايسه هم با دو به دو عناصر حرکت بار. مانند می باقی ترتيب همان به صورت اين غير در و گردد می جا جابه مقاديرشان

. کند می مرتب بزرگ به کوچک از ، حبابی کردن مرتب شيوه به را شده ذکر اعداد ليست زير برنامه

#include <iostream.h>

void showArray(const int [] , int);

void main(){ const int arraySize = 6; int a[ arraySize ] = { 2, 5, 4, 3, 6 ,1}; int hold;

cout << "Data items in original order\n";

showArray(a,arraySize);

for ( int i = 0; i < arraySize - 1 ; i++ ) for ( int j = 0; j < arraySize - 1; j++ ) if ( a[ j ] > a[ j + 1 ] ) { hold = a[ j ]; a[ j ] = a[ j + 1 ]; a[ j + 1 ] = hold; }

cout << "\nData items in ascending order\n";

showArray(a,arraySize);

}

void showArray( const int array[] ,int arraySize){ for (int c=0; c<arraySize ;c++) cout << array[c] << " "; cout << endl;}

: باشد می زير صورت به فوق برنامه خروجی

Data items in original order2 5 4 3 6 1

Data items in ascending order1 2 3 4 5 6

حلقه دستورات اجرای اولين در. دارد عهده به را آرايه عناصر نمايش وظيفه showArray تابع فوق برنامه در مقايسه هم با زير صورت به آرايه عناصر j شمارنده با ، داخلی حلقه اجرای دور اولين در. باشد می i = 0 ، ها

. شوند می

85

Page 86: آموزش زبان برنامه نویسی C++

سپس. خواهد فوق صورت به اعداد ترتيب آرايه، عناصر روی حرکت دور اولين از پس و گردد می i = 1 شد. شود می زير صورت به عناصر ترتيب مقايسه بار هر انتهای در و گرفته انجام مقايسه بعدی دفعات

. شوند می مرتب صعودی صورت به عناصر آرايه روی حرکت رسيدن انتها به با سرانجام که

ها آرايه در جستجو

نظر در را تلفنی دفتر مثال عنوان به. باشد می کامپيوتری های برنامه وظايف مهمترين از يکی جستجو عمل در. کالس دانشجويان ليست در دانشجو يک نام جستجوی يا و گرديم می آن در فردی نام دنبال به که بگيريد

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

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

#include <iostream.h>

int linearSearch(const int [], int, int );

void main(){ const int arraySize = 7;

86

Page 87: آموزش زبان برنامه نویسی C++

int a[ arraySize ]={2,6,4,3,12,10,5}; int searchKey;

cout << "Enter integer search key: "; cin >> searchKey;

int element=linearSearch(a, searchKey, arraySize);

if ( element != -1 ) cout << "Found value in element " << element << endl; else cout << "Value not found" << endl;

}

int linearSearch( const int array[], int key, int sizeOfArray ){ for ( int j = 0; j < sizeOfArray; j++ )

if ( array[ j ] == key ) return j;

return -1;}

: باشد می زير صورت به فوق برنامه خروجی

Enter integer search key: 12Found value in element 4

: باشد می زير صورت به آرايه در 12 عدد جستجوی نحوه

. باشد می زير صورت به برنامه خروجی. کنيم می اجرا آرايه در 20 عدد جستجوی برای را برنامه ديگر بار

Enter integer search key: 20Value not found

: باشد می زير صورت به آرايه در 20 عدد جستجوی نحوه

87

Page 88: آموزش زبان برنامه نویسی C++

می برخوردار بااليی سرعت از و باشد می استفاده قابل شده مرتب های آرايه در دويی دو جستجوی روش آرايه ميانی عنصر الگوريتم. شوند می حذف آرايه عناصر از نيمی ، مقايسه بار هر در ، الگوريتم اين در. باشد

انديس و رسيده پايان به جستجو ، بودند برابر اگر. کند می مقايسه جستجو، مورد عنصر با را آن و يابد می را عنصر اگر. گيرد می انجام عناصر از نيمی روی جستجو عمل صورت اين غير در ، شود می برگردانده عنصر صورت اين غير در ، پذيرد می صورت آرايه اول نيمه روی جستجو ، باشد ميانی عنصر از کوچکتر جستجو مورد اصلی آرايه روی جستجو الگوريتم طبق آرايه زير روی جديد جستجوی اين. شود می جستجو آرايه دوم نيمه برابر اگر ، گردد می مقايسه جستجو مورد عنصر با و شود می يافته آرايه زير ميانی عنصر يعنی شود می انجامU آرايه زير نباشند تا جستجو عمل. گردند می کوچکتر ها آرايه زير جستجو بار هر در و شود می نصف مجددايعنی) مورد عنصر يافتن نيافتن يا و( ها آرايه زير از يکی ميانی عنصر با جستجو مورد عنصر بودن برابر نظر . يابد می ادامه( عنصر يک تنها شامل ای آرايه زير عنصر با جستجو مورد عنصر نبودن برابر) نظر مورد عنصر. باشد می مرتب آرايه در دويی دو جستجوی از ای نمونه زير برنامه

#include <iostream.h>

int binarySearch( const int [], int, int);

void main(){ const int arraySize = 15; int a[ arraySize ]={0,2,4,6,8,10,12,14, 16,18,20,22,24,26,28}; int key;

cout << "Enter a number between 0 and 28: "; cin >> key;

int result = binarySearch( a, arraySize, key);

if ( result != -1 ) cout << '\n' << key << " found in array element " << result << endl; else cout << '\n' << key << " not found" << endl;}

int binarySearch( const int b[], int arraySize , int searchKey ){ int middle,low=0,high=arraySize - 1;

88

Page 89: آموزش زبان برنامه نویسی C++

while ( low <= high ) { middle = ( low + high ) / 2; if ( searchKey < b[ middle ] ) high = middle - 1; else if ( searchKey > b[ middle ] ) low = middle + 1; else return middle; }

return -1;}

: باشد می زير صورت به فوق برنامه خروجی

Enter a number between 0 and 28: 8

8 found in array element 4

: باشد می زير صورت به آرايه در 8 عدد جستجوی نحوه

: باشد می زير صورت به برنامه خروجی. کنيم می اجرا 25 عدد جستجوی برای را برنامه ديگر بار

Enter a number between 0 and 28: 25

25 not found

: باشد می زير صورت به آرايه در 25 عدد جستجوی نحوه

89

Page 90: آموزش زبان برنامه نویسی C++

قبلی مبحث بعدی مبحث

بعدی چند های آرايه

بعدی چند يا انديسه چند آرايه يک صورت بدين. باشند داشته انديس يک از بيش توانند می C++ در ها آرايه حاوی جدولی توان می آن توسط که باشد می بعدی دو آرايه ، بعدی چند آرايه ترين کاربردی. داشت خواهيم: کنيد توجه زير دستور به. کرد سازی شبيه را مختلف مقادير

int a[3][4];

: کند می ايجاد زير صورت به را 4 در 3 بعدی دو آرايه يک فوق دستور

. است دسترسی قابل ، باشد می ستون شماره j و سطر شماره i آن در که ،a[i][j] صورت به آرايه عنصر هر

: کنيد عمل زير دستور مانند توانيد می آرايه عناصر به اوليه دهی مقدار برای

int b[2][2] = {{1,2},{3,4}};

: کند می دهی مقدار زير صورت به را b آرايه فوق دستور

12

34

: است شده آورده 3 در 2 بعدی دو آرايه به اوليه دهی مقدار از نمونه چند زير برنامه در

90

Page 91: آموزش زبان برنامه نویسی C++

#include <iostream.h>

void printArray( int [][ 3 ] );

void main(){ int array1[ 2 ][ 3 ] = { { 1, 2, 3 }, { 4, 5, 6 } }; int array2[ 2 ][ 3 ] = { 1, 2, 3, 4, 5 }; int array3[ 2 ][ 3 ] = { { 1, 2 }, { 4 } };

cout << "Values in array1 by row are:" << endl; printArray( array1 );

cout << "Values in array2 by row are:" << endl; printArray( array2 );

cout << "Values in array3 by row are:" << endl; printArray( array3 );

}

void printArray( int a[][ 3 ] ){ for ( int i = 0; i < 2; i++ ) { for ( int j = 0; j < 3; j++ ) cout << a[ i ][ j ] << ' '; cout << endl; }

}

: باشد می زير صورت به برنامه خروجی

Values in array1 by row are:1 2 34 5 6Values in array2 by row are:1 2 34 5 0Values in array3 by row are:1 2 04 0 0

داشته توجه. باشد می دارا نمايش صفحه روی بر را آرايه عناصر چاپ وظيفه PrintArray تابع فوق برنامه در بعدی يک های آرايه در باشيد داشته بياد اگر. گرفت انجام int a[][3]صورت به تابع به آرايه ارسال که باشيد به نيازی اما ، شود ذکر بايد ديگر بعدهای عناصر تعداد بعد يک از بيش های آرايه اما نبود آرايه طول ذکر به نيازی. باشد نمی اول بعد طول ذکر

بر را آن سپس و کنيم می دهی مقدار ، ضرب جدول مقادير با را 10 در 10 بعدی 2 آرايه زير برنامه در : مثال. کنيم می چاپ نمايش صفحه روی

#include <iostream.h>void main( )

91

Page 92: آموزش زبان برنامه نویسی C++

{

int a[10][10],i,j;

for (i=0;i<10;i++) for (j=0;j<10;j++) a[i][j]=(i+1)*(j+1);

for (i=0;i<10;i++){ for (j=0;j<10;j++) cout <<a[i][j]<<"\t"; cout<<endl; }}

: باشد می زير صورت به فوق برنامه خروجی

1 2 3 4 5 6 7 8 9 10

2 4 6 8 10 12 14 16 18 20

3 6 9 12 15 18 21 24 27 30

4 8 12 16 20 24 28 32 36 40

5 10 15 20 25 30 35 40 45 50

6 12 18 24 30 36 42 48 54 60

7 14 21 28 35 42 49 56 63 70

8 16 24 32 40 48 56 64 72 80

9 18 27 36 45 54 63 72 81 90

گر اشاره تعريف

U متغيرها. کنند می نگهداری خود در را حافظه های خانه آدرس گر، اشاره متغيرهای را مشخصی مقدار معموال ، مقدار يک به مستقيم طور به متغير يک نام. دارند خود در را متغير يک آدرس گرها اشاره ولی دارند خود در

: کنيد توجه زير شکل به. کند می مراجعه مقدار يک به مستقيم غير طور به گر اشاره يک اما کند می مراجعه

count کند می مراجعه 7 مقدار به مستقيم طور به .

92

Page 93: آموزش زبان برنامه نویسی C++

countPtr کند می مراجعه باشد می 7 حاوی که متغيری به مستقيم غير طور به .

متغير زير دستور مثال عنوان به. شوند تعريف بايد استفاده از قبل ، ديگری متغير هر مانند نيز گرها اشارهcount نوع از را int متغير و countPtr نوع از متغيری به گری اشاره را int کند می تعريف .

int count , *countPtr ;

. کنيم می استفاده آن نام از قبل* ستاره عالمت از ، گر اشاره نوع از متغيری هر تعريف برای

: کنيد توجه زير دستور به

double *xPtr , *yPtr ;

. شوند می تعريف double نوع از متغيرهايی به گرهايی اشاره yPtr و xPtr ، فوق دستور در

تر فهم قابل برنامه اينکه برای ولی باشد نمی الزامی گر اشاره متغيرهای نام انتهای در Ptr از استفاده نکته:. کنيد استفاده گر اشاره نام انتهای در Ptr از شود می توصيه باشد

گر اشاره عملگرهای

. گرداند می بر را خود عملوند حافظه خانه آدرس که است عملگری( &) آدرس عملگر

int y=5;int *yPtr;yPtr = &y;

نوع از متغيری به گری اشاره ، yPtr سپس و کرده دهی مقدار 5 عدد با int نوع از را y متغير فوق دستوراتint حافظه خانه آدرس سرانجام و شود می تعريف y در yPtr گيرد می قرار .

. باشد می y حافظه خانه آدرس حاوی yPtr ، بينيد می فوق شکل در که همانطور

93

Page 94: آموزش زبان برنامه نویسی C++

: کنيد توجه زير برنامه به گرها اشاره از استفاده نحوه با آشنايی برای

#include <iostream.h>

void main (){ int x = 5, y = 15; int *xPtr, *yPtr;

xPtr = &x; yPtr = &y;

cout << "The value of x is " << x << "\nThe address of x is " << &x << "\nThe value of xPtr is " << xPtr;

cout << "\n\nThe value of y is " << y << "\nThe address of y is " << &y << "\nThe value of yPtr is " << yPtr;

*xPtr = 10; cout << "\n\nx=" << x << " and y=" << y;

*yPtr = *xPtr; cout << "\nx=" << x << " and y=" << y;

xPtr = yPtr; cout << "\nx=" << x << " and y=" << y;

*xPtr = 20; cout << "\nx=" << x << " and y=" << y;}

: باشد می زير صورت به فوق برنامه خروجی

The value of x is 5The address of x is 0x8fb4fff4The value of xPtr is 0x8fb4fff4

The value of y is 15The address of y is 0x8fb4fff2The value of yPtr is 0x8fb4fff2

x=10 and y=15x=10 and y=10x=10 and y=10x=10 and y=20

و xPtr سپس گردد می 15 حاوی y و 5 حاوی x و شده تعريف صحيح عدد نوع از yو x متغير دو فوق برنامه درyPtr شوند می تعريف صحيح عدد به گری اشاره .

xPtr = &x;yPtr = &y;

94

Page 95: آموزش زبان برنامه نویسی C++

خانه آدرس و xPtr در را x حافظه خانه آدرس ، بيند می نيز برنامه خروجی در که همانطور فوق دستور دو. دهد می قرار yPtr در را y حافظه

دهد می قرار را 10 عدد ( x متغير يعنی) کند می اشاره xPtr که حافظه از ای خانه در ;xPtr = 10* دستور به yPtr که حافظه از ای خانه در را کند می اشاره آن به xPtr که ای حافظه خانه مقدار ;yPtr = *xPtr*سپس

. گيرد می قرار y متغير در x متغير مقدار يعنی دهد می قرار کند می اشاره آن

با پس دهد می قرار xPtr در باشد می y حافظه خانه آدرس همان که را yPtr مقدار ;xPtr = yPtr دستور ;xPtr = 20* دستور اجرای با لذا ، کرد خواهد اشاره y به بلکه کند نمی اشاره x به ديگر xPtr دستور اين اجرای

. يابد می تغيير 20 به که است y مقدار اين بلکه شود نمی 20 حاوی x کنيد می مشاهده که همانطور

گر اشاره توسط تابع به آرگومان ارسال

مبحث اين در. ارجاع با ارسال و مقدار با ارسال. ايد شده آشنا توابع به آرگومانها ارسال روش دو با حال به تا مانند گرها اشاره. دهيم می قرار بررسی مورد باشد می گر اشاره توسط ارسال که را ديگری روش

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

. است گرفته قرار استفاده

#include <iostream.h>

void callByPointer( int * );

int main(){ int number = 5;

cout << "The original value of number is " << number;

// pass address of number to callByPointer callByPointer( &number );

cout << "\nThe new value of number is " << number << endl;

return 0;}

void callByPointer( int *nPtr ){ *nPtr = *nPtr * *nPtr * *nPtr; // cube *nPtr}

: باشد می زير صورت به فوق برنامه خروجی

The original value of number is 5The new value of number is 125

تعريف پيش در ، گر اشاره توسط تابع به آرگومان ارسال برای ، کنيد می مشاهده فوق برنامه در که همانطور از قبل را * عالمت نيز تابع تعريف در و کنيم می استفاده * عالمت از آرگومان نوع کردن مشخص از پس تابعU. دهيم می قرار گر اشاره آرگومان نام دهند می قرار خود در را متغيرها آدرس گرها اشاره که آنجا از ضمنا

95

Page 96: آموزش زبان برنامه نویسی C++

عالمت همراه را ارسالی متغير نام بايد تابع فراخوانی هنگام ، تابع يک به گر اشاره توسط آرگومان ارسال برای. گردد می ارسال متغير آدرس صورت اين در تنها چون ببريم کار به &

const گرها اشاره و

const نوع از که را متغير يک مقدار که دهد می را امکان اين نويس برنامه به const دانيد می که همانطور شوند می ارسال توابع به گرها اشاره توسط که هايی داده. داد تغيير نتوان برنامه طول در ، است شده تعريف

، خواسته نا تغييرات از جلوگيری برای. يابند تغيير خواسته نا است ممکن و باشند می تغيير قابل تابع داخل ،: کنيد توجه زير برنامه به. کنيم می ارسال تابع به ثابت صورت به را آنها

void f( const int * ); // prototype

int main(){ int y;

f( &y ); // f attempts illegal modification

return 0;}

// xPtr cannot modify the value of the variable // to which it pointsvoid f( const int *xPtr ){ *xPtr = 100; // error: cannot modify a const object}

. داد خواهد را باشد نمی تغيير قابل ثابت داده اينکه بر مبنی خطايی پيغام شدن کامپايل هنگام فوق برنامه

Compiling CONSTP1.CPP:Error CONSTP1.CPP 16: Cannot modify a const object

const دستور از تابع به ثابت صورت به گر اشاره توسط آرگومان ارسال برای کنيد می مشاهده که همانطورint *xptr شديم مواجه خطا پيغام با ثابت گر اشاره مقدار تغيير هنگام تابع در و. کرديم استفاده .

چنين. باشد می ثابت غير ای داده به ثابتی گر اشاره ايجاد ، گرها اشاره همراه const کاربردهای از ديگر يکی ولی داد اشاره ديگری حافظه خانه به را آن توان نمی و کند می اشاره حافظه خانه يک به همواره گری اشاره

: کنيد توجه زير برنامه به. داد تغيير را حافظه خانه همان داخل داده توان می

int main(){ int x, y;

// ptr is a constant pointer to an integer that can // be modified through ptr, but ptr always points // to the same memory location. int * const ptr = &x;

*ptr = 7; // allowed: *ptr is not const ptr = &y; // error: ptr is const; // cannot assign new address

96

Page 97: آموزش زبان برنامه نویسی C++

return 0;}

نمی را جديدی آدرس ثابت گر اشاره به اينکه بر مبنی ، دهد می خطايی پيغام شدن کامپايل هنگام فوق برنامه. داد نسبت توان

Compiling CONSTP2.CPP:Error CONSTP2.CPP 11: Cannot modify a const object

چون و کرد خواهد اشاره x متغير آدرس به ptr گر اشاره ;int * const ptr=&x دستور توسط فوق برنامه در کند می اشاره آن به ptr که را مقداری اما کند اشاره ديگری آدرس به تواند نمی است شده تعريف ثابت نوع از

با ولی شود می 7 برابر x متغير مقدار و دهد نمی رخ خطايی *ptr=7 دستور اجرای با لذا است تغيير قابل کند اشاره x به بايد تنها ptr که آنجايی از و کند اشاره y متغير به گر اشاره خواهيم می ptr=&y دستور اجرای

. شويم می مواجه خطا پيغام با

گری اشاره چنين. باشد می ثابت ای داده به ثابتی گر اشاره ايجاد ، گرها اشاره همراه const از ديگری کاربرد را حافظه خانه آن داخل داده توان نمی نيز گر اشاره اين طريق از و کند می اشاره حافظه خانه يک به همواره: کنيد توجه زير برنامه به. داد تغيير

#include <iostream.h>

int main(){ int x = 5, y;

// ptr is a constant pointer to a constant integer. // ptr always points to the same location; // the integer at that location cannot be modified. const int *const ptr = &x;

cout << *ptr << endl;

*ptr = 7; // error: *ptr is const; // cannot assign new value ptr = &y; // error: ptr is const; // cannot assign new address

return 0;}

توان نمی را گر اشاره آدرس و گر اشاره مقدار اينکه بر مبنی خطايی پيغام با فوق برنامه کردن کاپايل هنگام. شويم می مواجه ، داد تغيير

Compiling CONSTP3.CPP:Error CONSTP3.CPP 14: Cannot modify a const objectError CONSTP3.CPP 16: Cannot modify a const object

تعريف ثابت نوع از ptr گر اشاره مقدار و آدرس ;const int * const ptr = &x دستور توسط فوق برنامه در خطا پيغام با ;ptr = 7* دستور توسط کند می اشاره آن به ptr که حافظه از ای خانه مقدار تغيير هنگام لذا شده

97

Page 98: آموزش زبان برنامه نویسی C++

خطای پيغام ;ptr = &y دستور توسط کند می اشاره آن با ptr که آدرسی تغيير هنگام نيز و شويم می مواجه. کنيم می دريافت ديگری

گرها اشاره با محاسباتی اعمال

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

. پردازيم می آنها کاربرد نحوه و باشند داشته توانند می گر اشاره نوع از عملوندی

از يا و( + يا =+) اضافه آن به تواند می صحيح عدد يک. يابد( --) کاهش يا( ++) افزايش تواند می گر اشاره يک. شود( - يا =-) کم آن

فرض و دارد قرار حافظه از 3000 آدرس در آن خانه اولين و است شده تعريف int v[5]آرايه که کنيد فرض کند اشاره v آرايه به vptr اينکه برای که باشيد داشته توجه. کند می اشاره آرايه از v[0]خانه به vptr که کنيد: کنيم استفاده زير دستورات از يکی از است کافی

vptr = v;vptr = &v[0];

U گرها اشاره محاسبات در اما شود می 3002 برابر 3000+2 معمول رياضيات در . باشد نم صورت بدين معموالU گر اشاره مقدار ، شود می کم آن از يا و اضافه گر اشاره يک به صحيحی عدد که هنگامی آن اندازه به معموال

می کم يا زياد ، کند می اشاره آن به گر اشاره که ای داده نوع طول اندازه به بلکه ، شود نمی کم يا زياد عدد اينکه فرض با البته شد خواهد 3008( 4*2 + 3000) برابر حاصلش ;vptr += 2 دستور مثال عنوان به. شود

اشاره v[2]خانه به حاال vptr گر اشاره ، v آرايه در. گيرد می قرار حافظه از بايت چهار در int  نوع از متغيری. کند می

3004(2*2 + 3000) خانه ;vptr += 2 دستور حاصل بگيرد قرار حافظه از بايت دو در int نوع از متغيری اگر. بود می

: زير دستور اجرای کند اشاره است 3016 آدرس در که v[4] خانه به vptr اگر

vptr -= 4;

. کند اشاره v[0]يعنی 3000(4*4 - 3016)خانه به vptr که شود می باعث

. کند اشاره ، v آرايه بعدی خانه به گر اشاره که شود می باعث زير دستورات از يک هر

++vptr;vptr++;

. کند اشاره ، v آرايه قبلی خانه به گر اشاره که شود می باعث زير دستورات از يک هر و

--vptr;vptr--;

vptr اگر مثال عنوان به. شوند کم يکديگر از توانند می کنند می اشاره آرايه يک های خانه به که گرهايی اشاره: زير دستور( کند اشاره v[2]خانه به يعنی ) 3008 حاوی v2ptr و( کند اشاره v[0]خانه به يعنی )3000 حاوی

98

Page 99: آموزش زبان برنامه نویسی C++

x=v2ptr - vptr;

گرها اشاره محاسبات. گردد می 2 حاوی x اينجا در که دهد می قرار x در را v2ptr تا vptr بين های خانه تعداد گرها اشاره مقايسه همچنين. است دار معنا ، کنند می اشاره آرايه يک های خانه به گرها اشاره که هنگامی تنها تواند می گر اشاره دو مقايسه مثال عنوان به کنند اشاره آرايه يک های خانه به که دارد مفهوم هنگامی نيز

. کند می اشاره ، ديگر گر اشاره به نسبت بزرگتر انديس با ای خانه به گرها اشاره از يکی که دهد نشان

ها آرايه و گرها اشاره ارتباط

U و داشته يکديگر با نزديکی ارتباط C++ زبان در گرها اشاره و ها آرايه به يکديگر جای به را آنها توان می تقريبا آرايه انديس توسط که اعمالی تمام و گرفت نظر در ثابت گر اشاره يک عنوان به توان می را آرايه نام برد کار عناصر تک تک به توان می نيز گر اشاره طريق از و است انجام قابل نيز گر اشاره توسط داد انجام توان می: بگيريد نظر در را زير دستور. يافت دست آرايه

int b[5];int bptr;

اشاره( بدون) آرايه نام که آنجا از را bptr گر اشاره توانيم می ، باشد می آرايه اول عنصر به گری انديس: دهيم اشاره b آرايه عنصر اولين به زير، دستور توسط

bptr = b;

: کنيم استفاده b آرايه اول عنصر به bptr دادن اشاره برای زير دستور از توانيم می يا و

bptr = &b[0]

شد، مرتبط b آرايه به فوق دستورهای از يکی توسط که bptr گر اشاره توسط b[3] عنصر به دستيابی برای: کرد استفاده زير دستور از توان می

*(bptr + 3)

از. شده آشنا قبيل اين از عباراتی و bptr+3 مفهوم با قبل مبحث در آرايه اول عنصر به bptr که آنجايی ايد بود خواهد b[3] خانه آدرس bptr+3 لذا باشد، می b[0] يعنی آرايه اول عنصر آدرس حاوی پس کند می اشاره پس

(*bptr + 3) خانه به b[3] باشد می اجباری اينجا در پرانتز از استفاده که باشيد داشته توجه. کرد خواهد اشاره از يعنی ببريم کار به پرانتز بدون را فوق دستور اگر. دارد + عملگر به نسبت باالتری اولويت * عملگر چون ،

bptr+3* خانه به 3 عدد کنيم استفاده b[0] گردد می اضافه .

به نيز( گرديد تعريف فوق دستورات در که باشد می ای آرايه نام b اينجا در ) (b + 3*) که باشيد داشته توجه گر اشاره يک همانند آرايه نام شد گفته بحث اين ابتدای در که همانطور چون ، کند می اشاره آرايه از b[3] خانه. باشد می ثابت

خواهد رجوع b[1] عنصر به bptr[1] مثال عنوان به ، کرد دار انديس ها آرايه مانند توان می نيز را گرها اشاره. باشد می bآرايه به گری اشاره bptr چون کرد

نام با ای آرايه برای ;b+=3 مانند دستوری لذا باشد می ثابتی گر اشاره ، آرايه نام دانيد می که همانطور : نکتهb کند می اشاره حافظه از خانه يک به همواره ثابت گر اشاره چون ، باشد نمی استفاده قابل .

99

Page 100: آموزش زبان برنامه نویسی C++

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

#include <iostream.h>

void main(){ int b[] = { 10, 20, 30, 40 }; int *bPtr = b; int i;

cout << "b[i]:\n"; for ( i = 0; i < 4; i++ ) cout << "b[" << i << "] = " << b[ i ] << '\n';

cout << "\n*(b + i):\n"; for ( i = 0; i < 4; i++ ) cout << "*(b + " << i << ") = " << *( b + i ) << '\n';

cout << "\nbPtr[i]:\n"; for ( i = 0; i < 4; i++ ) cout << "bPtr[" << i << "] = " << bPtr[ i ] <<'\n';

cout << "\n*(bPtr + i):\n"; for ( i = 0; i < 4; i++ ) cout << "*(bPtr + " << i << ") = " << *( bPtr + i ) << '\n';

}

: باشد می زير صورت به فوق برنامه خروجی

b[i]:b[0] = 10b[1] = 20b[2] = 30b[3] = 40

*(b + i):*(b + 0) = 10*(b + 1) = 20*(b + 2) = 30*(b + 3) = 40

bPtr[i]:bPtr[0] = 10bPtr[1] = 20bPtr[2] = 30bPtr[3] = 40

*(bPtr + i):*(bPtr + 0) = 10*(bPtr + 1) = 20*(bPtr + 2) = 30*(bPtr + 3) = 40

100

Page 101: آموزش زبان برنامه نویسی C++

بعدی مبحث

گرها اشاره از ای آرايه

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

const char *s[4] = { "string1","string2","string3","string4" }

مشخص فوق دستور در char*کند. می ايجاد حروف از هايی رشته شامل عنصری چهار ای آرايه فوق دستور می قرار آرايه در که مقداری چهار. باشد می char نوع از ای داده به گری اشاره ، s آرايه عنصر هر که کند می

در که ها رشته اين از کدام هر انتهای. باشند می "string4" و "string3" و "string2" و "string1" گيرند حروفی تعداد از بيشتر واحد يک ها رشته اين طول لذا ، شود می مشخص پوچ کاراکتر با گيرند می قرار حافظه

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

دسترسی مشخص نا طول با هايی رشته به که سازد می قادر را ما شيوه اين اما ، دارد ثابتی طول آرايه چه اگر. باشد می ای داده های ساختمان ايجاد در C++ زبان توان از مثالی پذيری انعطاف اين. کنيم پيدا

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

های خانه از زيادی مقدار ، باشند می کمتر رشته بزرگترين طول از ها رشته اکثر طول و داريم حروف از زيادی: کنيد توجه زير شکل به. رود می هدر به حافظه

بعدی مبحث

تابع به گر اشاره

101

Page 102: آموزش زبان برنامه نویسی C++

واقع در آرايه يک نام دانيد می که همانطور. باشد می حافظه در تابع آن آدرس حاوی تابع به گر اشاره يکU. می حافظه در آرايه عنصر اولين آدرس مشابها حافظه در ، تابع يک کدهای ابتدای آدرس ، تابع يک نام ، باشد

تابعی خروجی عنوان به ، شود ارسال توابع به آرگومان عنوان به تواند می تابع يک به گر اشاره. باشد میشود. داده اشاره ديگر تابعی به يا و گيرد قرار آرايه در شود، برگردانده

کنيم. می بازنويسی را آرايه عناصر حبابی کردن مرتب برنامه توابع، گرهای اشاره کاربرد نحوه با آشنايی برای تابع گر اشاره يک bubble تابع. باشد می descending و ascending ، swap ،bubble توابع دارای برنامه اين. کند می دريافت ، آرايه طول عنوان به ثابتی عدد و آرايه با همراه ، آرگومان عنوان به را

نحوه تابع دو اين که باشد می descending يا ascending توابع از يکی به گری اشاره ، تابع به گر اشاره اينبرنامه. می تشخيص بودن نزولی يا صعودی نظر از را آرايه شدن مرتب مرتب نحوه کاربر از ابتدا در دهند يک ، کند وارد را 1 عدد کاربر اگر. پرسد می ، نزولی يا شوند مرتب صعودی صورت به که را عناصر کردن عناصر شود می باعث که شود می ارسال bubble تابع به آرگومان، عنوان به ascending تابع به گر اشارهو. مرتب صعودی صورت به آرايه به descending تابع به گر اشاره يک ، کند وارد را 2 عدد کاربر اگر شوند

شوند. مرتب نزولی صورت به آرايه عناصر شود می باعث که گردد می ارسال bubble تابع به آرگومان، عنوان: کنيد توجه برنامه اين کدهای به

#include <iostream.h>

void bubble( int [], const int, int (*)( int, int ) );void swap( int * const, int * const );int ascending( int, int );int descending( int, int );

void main(){ const int arraySize = 10; int order; int counter; int a[ arraySize ] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 };

cout << "Enter 1 to sort in ascending order,\n" << "Enter 2 to sort in descending order: "; cin >> order; cout << "\nData items in original order\n";

for ( counter = 0; counter < arraySize; counter++ ) cout << " " << a[ counter ];

if ( order == 1 ) { bubble( a, arraySize, ascending ); cout << "\nData items in ascending order\n"; } else { bubble( a, arraySize, descending ); cout << "\nData items in descending order\n"; }

for ( counter = 0; counter < arraySize; counter++ ) cout << " " << a[ counter ];

cout << endl;}

void bubble( int work[], const int size, int (*compare)( int, int ) )

102

Page 103: آموزش زبان برنامه نویسی C++

{ for ( int pass = 1; pass < size; pass++ ) for ( int count = 0; count < size-1; count++) if ( (*compare)( work[count], work[count + 1])) swap( &work[ count ], &work[count + 1]);}

void swap( int * const element1Ptr, int * const element2Ptr ){ int hold = *element1Ptr; *element1Ptr = *element2Ptr; *element2Ptr = hold;}

int ascending( int a, int b ){ return b < a;}

int descending( int a, int b ){ return b > a;}

: باشد می زير صورت به فوق برنامه خروجی

Enter 1 to sort in ascending order,Enter 2 to sort in descending order: 1

Data items in original order 2 6 4 8 10 12 89 68 45 37Data items in ascending order 2 4 6 8 10 12 37 45 68 89Enter 1 to sort in ascending order,Enter 2 to sort in descending order: 2

Data items in original order 2 6 4 8 10 12 89 68 45 37Data items in descending order 89 68 45 37 12 10 8 6 4 2

: گرفت قرار استفاده مورد bubble تابع در زير آرگومان ديديد برنامه در که همانطور

int (*compare) (int , int)

دو که باشد می تابعی به گر اشاره يک کند، می دريافت که آرگومانی که گويد می bubble تابع به دستور اينباشد. می int نوع از آن خروجی و کند می دريافت صحيح عدد نوع از آرگومان

، باشد می تابع يک به گری اشاره compare کنيم مشخص اينکه برای *compare کنار در رفته کار به پرانتزهایاگر. : داشت خواهيم را زير دستور نبريم کار به *compare کنار در را پرانتزها الزاميند

int *compare (int,int)

103

Page 104: آموزش زبان برنامه نویسی C++

int نوع از مقداری به گری اشاره و کرده دريافت را صحيح عدد دو که کند می تعريف را تابعی ، دستور اين که. گرداند می بر خروجی عنوان به را

: باشد می زير صورت به bubble تابع تعريف پيش در آرگومان اين

int (*)(int,int)

. باشد نمی آرگومانها و ها داده نام ذکر به نيازی و است شده مشخص ها داده نوع تنها که باشيد داشته توجه

: شود می فراخوانی زير دستور توسط bubble به شده ارسال تابع

(*compare) (work[count],work[count+1])

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

برای آرايه در موجود گر اشاره و گيرد می قرار استفاده مورد ، توابع به گرهای اشاره آرايه از انديسیدر. می استفاده مربوط تابع فراخوانی توابع به گرهای اشاره از ای آرايه از استفاده نحوه زير برنامه شود

: است شده داده نشان

#include <iostream.h>

void function1( int );void function2( int );void function3( int );

int main(){ void(*f[ 3 ])(int)={function1, function2, function3};

int choice;

cout << "Enter a number between 0 and 2, 3 to end:"; cin >> choice;

while ( choice >= 0 && choice < 3 ) {

(*f[ choice ])( choice );

cout <<"Enter a number between 0 and 2, 3 to end:"; cin >> choice; }

cout << "Program execution completed." << endl;

return 0;}

void function1( int a ){ cout << "You entered " << a << " so function1 was called\n\n";}

104

Page 105: آموزش زبان برنامه نویسی C++

void function2( int b ){ cout << "You entered " << b << " so function2 was called\n\n";}

void function3( int c ){ cout << "You entered " << c << " so function3 was called\n\n";}

: باشد می زير صورت به فوق برنامه خروجی

Enter a number between 0 and 2, 3 to end: 2You entered 2 so function3 was called

Enter a number between 0 and 2, 3 to end: 0You entered 0 so function1 was called

Enter a number between 0 and 2, 3 to end: 1You entered 1 so function2 was called

Enter a number between 0 and 2, 3 to end: 3Program execution completed.

عنوان به را صحيحی عدد يک هر که function3 و function2 و function1 نامهای با تابع سه فوق برنامه دردستور. شده تعريف ، ندارند خروجی و کنند می دريافت ورودی در را تابع سه اين به گرهای اشاره زير است. دهد می قرار f نام با ای آرايه

void (*f[3]) (int) = {function1,function2,function3};

U آرايه نوع بينيد می که همانطور به گرهايی اشاره حاوی آرايه اين چون ، است شده تعريف توابع، نوع مثل کامال f آرايه انديس عنوان به شده وارد عدد ، کند می وارد 2 تا 0 بين را عددی کاربر که هنگامی. باشد می توابع

: زير دستور لذا. شود می استفاده

(*f[choice]) (choice);

. شود می ارسال تابع به آرگومان عنوان به choice و شود می f آرايه توابع از يکی اجرای باعث

ها رشته پردازش

قرار بررسی مورد دارند قرار string.h ای کتابخانه فايل در که را رشته پردازش توابع از تعدادی مبحث اين در. دهيم می

char *strcpy (char *s1, const char *s2);

. شود می برگردانده تابع خروجی عنوان به s1 مقدار و کند می کپی s1 رشته در را s2 رشته فوق تابع

105

Page 106: آموزش زبان برنامه نویسی C++

char *strncpy (char *s1, const char *s2, size_t n);

به. گرداند برمی خروجی عنوان به را s1 و کند می کپی s1 رشته در s2 رشته از را حرف n تعداد فوق تابع: کنيد توجه زير برنامه

#include <iostream.h>#include <string.h>

void main(){ char x[] = "Happy Birthday to You"; char y[ 25 ]; char z[ 15 ];

strcpy( y, x ); // copy contents of x into y

cout << "The string in array x is: " << x << "\nThe string in array y is: " << y << '\n';

// copy first 14 characters of x into z strncpy( z, x, 14 ); // does not copy null character z[ 14 ] = '\0'; // append '\0' to z's contents

cout << "The string in array z is: " << z << endl;}

: باشد می زير صورت به فوق برنامه خروجی

The string in array x is: Happy Birthday to YouThe string in array y is: Happy Birthday to YouThe string in array z is: Happy Birthday

char *strcat (char *s1, const char *s2);

. گرداند می بر خروجی عنوان به را s1 و کند می اضافه s1 رشته انتهای به را s2 رشته فوق تابع

char *strncat (char *s1, const char *s2, size_t n);

به. می بر تابع خروجی عنوان به را s1 و کند می اضافه s1 رشته به را s2 رشته از حرف n فوق تابع گرداند: کنيد توجه زير برنامه

#include <iostream.h>#include <string.h>

void main(){ char s1[ 20 ] = "Happy "; char s2[] = "New Year "; char s3[ 40 ] = "";

106

Page 107: آموزش زبان برنامه نویسی C++

cout << "s1 = " << s1 << "\ns2 = " << s2;

strcat( s1, s2 ); // concatenate s2 to s1

cout << "\n\nAfter strcat(s1, s2):\ns1 = " << s1 << "\ns2 = " << s2;

// concatenate first 6 characters of s1 to s3 // and places '\0' after last character strncat( s3, s1, 6 );

cout << "\n\nAfter strncat(s3, s1, 6):\ns1 = " << s1 << "\ns3 = " << s3;

strcat( s3, s1 ); // concatenate s1 to s3 cout << "\n\nAfter strcat(s3, s1):\ns1 = " << s1 << "\ns3 = " << s3 << endl;}

: باشد می زير صورت به برنامه خروجی

s1 = Happys2 = New Year

After strcat(s1, s2):s1 = Happy New Years2 = New Year

After strncat(s3, s1, 6):s1 = Happy New Years3 = Happy

After strcat(s3, s1):s1 = Happy New Years3 = Happy Happy New Year

int strcmp (const char *s1, const char *s2);

، شود می برگردانده صفر مقدار بودند برابر رشته دو اگر. کند می مقايسه s2 رشته با را s1 رشته فوق تابع تابع خروجی مثبت عددی باشد s2 از بزرگتر s1 رشته اگر و منفی عددی باشد s2 از کوچکتر s1 رشته اگر

. بود خواهند

int strncmp (const char *s1, const char *s2, size_t n);

خواهد strcmp خروجی همانند تابع خروجی و کند می مقايسه s2 رشته با را s1 رشته اول حرف n فوق تابع: کنيد توجه زير برنامه به. بود

#include <iostream.h>#include <string.h>

107

Page 108: آموزش زبان برنامه نویسی C++

void main(){ char *s1 = "Happy New Year"; char *s2 = "Happy New Year"; char *s3 = "Happy Holidays";

cout << "s1 = " << s1 << "\ns2 = " << s2 << "\ns3 = " << s3 << "\n\nstrcmp(s1, s2) = " << " " << strcmp( s1, s2 ) << "\nstrcmp(s1, s3) = " << " " << strcmp( s1, s3 ) << "\nstrcmp(s3, s1) = " << " " << strcmp( s3, s1 );

cout << "\n\nstrncmp(s1, s3, 6) = " << " " << strncmp(s1,s3,6) << "\nstrncmp(s1,s3,7) = " << " " << strncmp( s1, s3, 7 ) << "\nstrncmp(s3, s1, 7) = " << " " << strncmp( s3, s1, 7 ) << endl;}

: باشد می زير صورت به فوق برنامه خروجی

s1 = Happy New Years2 = Happy New Years3 = Happy Holidays

strcmp(s1, s2) = 0strcmp(s1, s3) = 6strcmp(s3, s1) = -6

strncmp(s1, s3, 6) = 0strncmp(s1, s3, 7) = 6strncmp(s3, s1, 7) = -6

char *strtok (char *s1, const char *s2);

: کنيد توجه زير برنامه به. کند می جدا جدا s2 توسط را s1 رشته فوق تابع

#include <iostream.h>#include <string.h>

void main(){ char sentence[] ="This is a sentence with 7 tokens"; char *tokenPtr;

cout << "The string to be tokenized is:\n"<<sentence << "\n\nThe tokens are:\n\n";

tokenPtr = strtok( sentence, " " );

while ( tokenPtr != NULL ) { cout << tokenPtr << '\n';

108

Page 109: آموزش زبان برنامه نویسی C++

tokenPtr = strtok( NULL, " " ); // get next token } cout <<"\nAfter strtok, sentence ="<<sentence<<endl;

}

: باشد می زير صورت به فوق برنامه خروجی

The string to be tokenized is:This is a sentence with 7 tokens

The tokens are:

Thisisasentencewith7tokens

After strtok, sentence = This

size_t strlen (const char *s);

: کنيد توجه زير برنامه به. گرداند می بر خروجی عنوان به را s رشته طول فوق تابع

#include <iostream.h>#include <string.h>

void main(){char *string1 = "abcdefghijklmnopqrstuvwxyz";char *string2 = "four";char *string3 = "Boston";

cout << "The length of \"" << string1 << "\" is " << strlen( string1 ) << "\nThe length of \"" << string2 << "\" is " << strlen( string2 ) << "\nThe length of \"" << string3 << "\" is " << strlen( string3 ) << endl;}

: باشد می زير صورت به فوق برنامه خروجی

The length of "abcdefghijklmnopqrstuvwxyz" is 26The length of "four" is 4The length of "Boston" is 6

بعدی مبحث

109

Page 110: آموزش زبان برنامه نویسی C++

ساختار تعريف

( تعدادی از متشکل ، داده نوعی ساختارها می) عضو داده نوع از است ممکن يک هر عناصر اين که باشند عنصر: کنيد توجه زير ساختار تعريف به. باشند ديگری ساختار نوع از يا و باشند بقيه با متفاوتی ای

struct Time { int hour; int minute; int second; };

سه دارای Time نام با شده ايجاد ساختار کند می ايجاد Time نام با را ساختار يک struct کلمه فوق دستور در)hour نامهای به عنصر ،( نگهداری برای )minute ساعت ،( نگهداری برای )second دقيقه نگهداری برای می( نامهای دارای توانند نمی ساختار يک عناصر. باشند می صحيح عدد نوع از عناصر اين که باشد ثانيه

تداخلی کار اين و باشند يکسان نامهای با عناصری دارای توانند می متفاوت ساخاختار دو ولی باشند يکسانیکند. نمی ايجاد آنها بين

نوع اين از را متغيرهايی و کنيم استفاده جديد داده نوع اين از توانيم می شد ايجاد Time ساختار اينکه از پس: کنيد توجه زير دستورات به. کنيم تعريف داده

Time timeObject;Time timeArray[10];Time *timePtr=&timeObject;

10 شامل که ای آرايه timeArray. شود می تعريف Time نوع از متغيری timeObject فوق دستورات توسط timeObject نام با حافظه از ای خانه به گری اشاره timePtr. شود می تعريف ، باشد می Time نوع از عنصر

شود. می تعريف Time نوع از

ساختار عناصر به دسترسی

نقطه عملگر. کنيم می استفاده)>-( پيکان عملگر يا و).( نقطه عملگر از ساختار يک عناصر به دستيابی برای به مثال عنوان به ، گيرد می قرار استفاده مورد ، متغير يک نام طريق از ساختار يک عنصر به دستيابی برای

: کنيد توجه زير دستور

timeObject.hour = 13;timeObject.minute = 33;timeObject.second = 20;

مقدار 20 و 33 و 13 مقادير با ترتيب به را Time نوع از متغيری second و minute و hour عناصر فوق دستور: زير دستور و کند می دهی

cout << timeObject.hour;

و)-( منفی عالمت يک از که پيکان عملگر . رود می کار به time Objectمتغير از hourعنصر کردن چاپ برای ساختار يک عنصر به دستيابی برای ، است شده تشکيل عالمت دو اين بين فاصله بدون)>( بزرگتر عالمت يک. گيرد می قرار استفاده مورد گر اشاره طريق از

110

Page 111: آموزش زبان برنامه نویسی C++

cout << timePtr -> hour;

. است رفته کار به timePtr گر اشاره توسط timeObject متغير از hour عنصر کردن چاپ برای فوق دستور استفاده hour(.timePtr)* از توان می hour عنصر به دستيابی برای timePtr -> hour از استفاده جای به

زير دستور از مثال عنوان به. باشد می الزامی *timePtr کنار در پرانتز از استفاده که باشيد داشته توجه. کرد. کرد استفاده توان می timePtr گر اشاره توسط timeObject متغير از hour عنصر چاپ برای نيز

cout << (*timePtr).hour;

، توابع به ارجاع با آرگومان ارسال روش توسط و است گرفته قرار استفاده مورد Time ساختار زير برنامه در ارسال printStandard و printUniversal توابع به باشد می Time ساختار نوع از که dinnerTime شیءاست. شده

#include <iostream.h>

struct Time { int hour; // 0-23 (24-hour clock format) int minute; // 0-59 int second; // 0-59 };

void printUniversal( const Time & );void printStandard( const Time & );

int main(){ Time dinnerTime;

dinnerTime.hour = 18; dinnerTime.minute = 30; dinnerTime.second = 0;

cout << "Dinner will be held at "; printUniversal( dinnerTime ); cout << " universal time,\nwhich is "; printStandard( dinnerTime ); cout << " standard time.\n";

dinnerTime.hour= 29; //set hour to invalid value dinnerTime.minute= 73; //set minute to invalid value

cout << "\nTime with invalid values: "; printUniversal( dinnerTime ); cout << endl;

return 0;}

void printUniversal( const Time &t ){ cout << (t.hour<10 ? "0":"") << t.hour << ":" << (t.minute<10 ? "0":"") << t.minute << ":" << (t.second<10 ? "0":"") << t.second;}

111

Page 112: آموزش زبان برنامه نویسی C++

void printStandard( const Time &t ){ cout << ( ( t.hour == 0 || t.hour == 12 ) ? 12 : t.hour % 12 ) << ":" << (t.minute<10 ? "0":"") << t.minute << ":" << (t.second<10 ? "0":"") << t.second << ( t.hour < 12 ? " AM" : " PM" );}

باشد: می زير صورت به فوق برنامه خروجی

Dinner will be held at 18:30:00 universal time,which is 6:30:00 PM standard time.

Time with invalid values: 29:73:00

وجود Time ساختار نوع از شيئی به نادرست دهی مقدار امکان ، کرديد مشاهده فوق برنامه در که همانطوراما. کرد. کنترل را اعضا به دهی مقدار توان می که ديد خواهيد کالسها در بعدی مبحث در دارد

کالس تعريف

که) اعمال و( شوند می داده نمايش عناصر توسط که) خصوصيات با را اشيايی توان می ها کالس توسط در که تفاوت اين با شوند می تعريف ساختارها همانند کالسها. کرد مدلسازی( شوند می مشخص توابع توسط به. شود می تعريف class کلمه توسط کالس يک. باشند کالس عنصر عنوان به توانند می نيز توابع کالسها: کنيد توجه زير کالس تعريف

class Time { public: Time(); void setTime( int, int, int ); void printUniversal(); void printStandard();

private: int hour; int minute; int second;};

کالس تعريف انتها در و شود می مشخص}{ با کالس بدنه و شود می شروع class کلمه با Time کالس تعريفهمانند. می پايان به( ;) ويرگول نقطه يک با Time کالس کرديم ايجاد قبل مبحث در که Time ساختار رسد

می جديد کالس اجزای ساير باشد می secondو minuteو hourنامهای با صحيح عدد نوع از عنصر سه دارای ( عضو) عنصر به دستيابی معرفهای private: و public: برچسبهای. پردازيم می آنها بررسی به که باشد

هر در ، شود می تعريف private از قبل و public از بعد که عضوی تابع يا ای داده عضو هر. شوند می ناميدههر. می دستيابی قابل دارد دسترسی Time نوع از شيئی به برنامه که جايی بعد که تابعی يا ای داده عضو باشد

داخل از مستقيم طور به و باشد می دستيابی قابل کالس عضو توابع برای تنها شود می تعريف private از ):( نقطه دو عالمت يک اعضاء به دستيابی معرفهای از بعد که شود می تأکيد. باشند نمی دسترسی قابل برنامهU. گيرد می قرار توصيه ولی برد کار به توان می ترتيبی هر به و بار چندين ، کالسها تعريف در را معرفها اين ضمنا public) عمومی اعضای ابتدا و ببريد کار به يکبار تنها را معرفها اين از يک هر برنامه خوانايی برای که شود می

, printUniversal تابع چهار تعريف پيش شامل Time کالس تعريف. دهيد قرار را( setTime ,Time و

112

Page 113: آموزش زبان برنامه نویسی C++

printStandard کالس عمومی اعضای ، توابع اين که شود می Time از بعد چون ، باشند می publice تعريف . اند شده

تابع. شود می ناميده سازنده تابع ، تابع اين که دارد وجود کالس با همنام عضوی تابع که باشيد داشته توجه شيئی برنامه که هنگامی. کند می تعيين را ای داده اعضای اوليه مقادير که است بخصوصی عضو تابع ، سازنده

توجه. می فراخوانی خودکار طور به سازنده تابع ، کند می ايجاد را کالسی از سازنده تابع که باشيد داشته گردد. برگرداند خود خروجی عنوان به را مقداری نبايد

به. کرد ايجاد Time کالس نوع از را اشيايی توان می گرديد تعريف Time کالس که هنگامی ، ساختارها همانند: کنيد توجه زير دستورات

Time sunset;Time arrayofTime [5];Time *timeptr = & sunset;

10 شامل ای آرايه arrayofTimeشود. می تعريف Time کالس نوع از متغيری sunset فوق دستورات توسط کالس نوع از sunset نام با حافظه از ای خانه به گری اشاره timePtr و باشد می Time کالس نوع از عنصرTime گردد. می تعريف

در. گرديده تعريف آن عضو توابع و است گرفته قرار استفاده مورد Time کالس زير برنامه در برنامه اين اندهنگامی. شده ايجاد t بانام Time کالس نوع از شيئی به Time سازنده تابع شود می ايجاد شیء اين که  است قرار صفر عدد را( hour , minute , secound) داده اعضای از يک هر ومقدار شود می فراخوانی خودکار طورپس. می با تا شوند می فراخوانی printStandard و printUniversal عضو توابع t شیء شدن ايجاد از دهدسپس. حاصل اطمينان t شیء به اوليه دهی مقدار از تابع دو اين توسط زمان چاپ تابع فراخوانی با کنيم

setTime ، شیء t هنگامی. می چاپ روش دو به شیء اين مقدار مجددا سپس و شود می دهی مقدار که گردد setTime عضو تابع ، کنيم می t شیء به نادرست دهی مقدار در سعی setTime عضو تابع مجدد فراخوانی باکند. می جلوگيری کار اين از

#include <iostream.h>

class Time { public: Time(); void setTime( int, int, int ); void printUniversal(); void printStandard();

private: int hour; // 0 - 23 (24-hour clock format) int minute; // 0 - 59 int second; // 0 - 59}

Time::Time() { hour = minute = second = 0; }

void Time::setTime( int h, int m, int s ){ hour = ( h >= 0 && h < 24 ) ? h : 0; minute = ( m >= 0 && m < 60 ) ? m : 0; second = ( s >= 0 && s < 60 ) ? s : 0;}

113

Page 114: آموزش زبان برنامه نویسی C++

void Time::printUniversal(){ cout << (hour<10 ? "0":"") << hour << ":" << (minute<10 ? "0":"") << minute << ":" << (second<10 ? "0":"") << second;}

void Time::printStandard(){ cout << ( ( hour == 0 || hour == 12 ) ? 12 : hour % 12 ) << ":" << (minute<10 ? "0":"") << minute << ":" << (second<10 ? "0":"") << second << (hour < 12 ? " AM" : " PM" );}

int main(){ Time t; cout << "The initial universal time is "; t.printUniversal(); // 00:00:00

cout << "\nThe initial standard time is "; t.printStandard(); // 12:00:00 AM

t.setTime( 13, 27, 6 ); // change time

cout << "\n\nUniversal time after setTime is "; t.printUniversal(); // 13:27:06

cout << "\nStandard time after setTime is "; t.printStandard(); // 1:27:06 PM

t.setTime( 99, 99, 99 ); // attempt invalid settings

cout << "\n\nAfter attempting invalid settings:" << "\nUniversal time: "; t.printUniversal(); // 00:00:00

cout << "\nStandard time: "; t.printStandard(); // 12:00:00 AM cout << endl;

return 0; }

باشد: می زير صورت به فوق برنامه خروجی

The initial universal time is 00:00:00The initial standard time is 12:00:00 AM

Universal time after setTime is 13:27:06Standard time after setTime is 1:27:06 PM

After attempting invalid settings:

114

Page 115: آموزش زبان برنامه نویسی C++

Universal time: 00:00:00Standard time: 12:00:00 AM

است شده آورده عضو توابع تعريف پيش تنها کالس تعريف هنگام کنيد می مشاهده فوق برنامه در که همانطوربرای. شده تعريف کالس از خارج در توابع خود و عملگر با همراه را کالس نام ، تابع نام از قبل کار اين اند

: دهيم می قرار( ::دامنه) تفکيک

void Time::printUniversal(){ cout << (hour<10 ? "0":"") << hour << ":" << (minute<10 ? "0":"") << minute << ":" << (second<10 ? "0":"") << second;}

کالس اعضای به دسترسی و کالس حوزه

کالس در که توابعی) کالس عضو توابع و( اند شده تعريف کالس در که متغيرهايی) کالس يک داده اعضای فايل حوزه دارای باشند، نمی کالس عضو که توابعی و باشند می متعلق کالس اين حوزه به( ند ا گرديده تعريف

باشند. می

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

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

برای. گرانبار توانند می کالس همان عضو توابع ساير توسط تنها کالس يک عضو توابع يک کردن گرانبار شوند آنرا خواهيم می که عضوی تابع های نسخه از يک هر برای کالس تعريف هنگام است کافی عضو تابع

بگيريم. نظر در ای جداگانه تعريف تابع اين های نسخه از يک هر برای و دهيم قرار تعريف پيش يک گرانبارکنيم،

تابع همان برای فقط یعنی باشند، می تابع حوزه دارای اند، شده تعريف کالس عضو تابع يک در که متغيرهايیاگر. شده شناخته شده تعريف است کالس حوزه دارای که متغيری نام با همنام متغيری عضوی، تابع در اند کرد رجوع توان نمی مستقيم طور به تابع داخل در باشد می کالس حوزه دارای که متغيری صورت اين در باشد،

داد. قرار متغير نام از قبل را( ::) حوزه تفکيک عملگر بايد آن به دسترسی برای و

عمومی عضو تابع يک و x نام به int نوع از عمومی داده عضو يک با Count نام به ساده کالس يک زير برنامه دردر. شده تعريف ، print نام به countPtr و counter نامهای به Count کالس نوع از شیء دو برنامه اين است( Count شیء يک به گری اشاره) است. شده داده اشاره counter به countPtrمتغير که اند شده تعريف

اعضای به دسترسی نحوه که شده تعريف عمومی صورت به اين برای فقط x داده عضو که است ذکر به الزمهمان. نشان را عمومی U ای داده اعضای کرديم، ذکر قبال که طور دهيم می اعالن خصوصی صورت به معموال: کنيد توجه زير برنامه به. شوند

#include <iostream.h>

class Count {

public: int x;

void print()

115

Page 116: آموزش زبان برنامه نویسی C++

{ cout << x << endl; }};

void main(){ Count counter; Count *counterPtr = &counter;

cout << "Assign 1 to x and print " << "using the object's name: "; counter.x = 1; counter.print();

cout << "Assign 3 to x and print using a pointer: "; counterPtr->x = 3; counterPtr->print();}

باشد: می زير صورت به فوق برنامه خروجی

Assign 1 to x and print using the object's name: 1Assign 3 to x and print using a pointer: 3

اعضا به دسترسی کنترل

را کالس عضو توابع و داده اعضای به دسترسی نحوه ، private و public یعنی اعضا به دسترسی معرفهایحالت. می کنترل لذا باشد، می private کالس در عضو توابع و داده اعضای به دسترسی برای فرض پیش  کنند می گرفته نظر در خصوصی اند، آمده معرف برچسب اولین از قبل و کالس نام تعيين از بعد که اعضایی همه

پس. بسته آکالد یا بعدی برچسب تا اعضا همه به کند، می تعيين مربوطه معرف که حالتی معرف، هر از شوندبرچسبهای. می اعمال کالس تعریف پایان به مربوط تعریف در بار چندین توان می را private و public شوداعضای. می برنامه کد پيچيدگی باعث و باشد نمی معمول کار این اما برد، کار به کالس یک خصوصی شود توسط کالس عمومی اعضای مقابل در باشند می دسترسی قابل کالس آن  عضو توابع طریق از فقط کالس

باشند. می دسترسی قابل برنامه در تابعی هر

: باشند نمی دسترسی قابل کالس از خارج کالس، خصوصی اعضای که دهد می نشان زير برنامه

#include <iostream.h>

class Time { public: Time(); void setTime( int, int, int ); void printUniversal(); void printStandard();

private: int hour; // 0 - 23 (24-hour clock format) int minute; // 0 - 59 int second; // 0 - 59}

Time::Time()

116

Page 117: آموزش زبان برنامه نویسی C++

{ hour = minute = second = 0; }

void Time::setTime( int h, int m, int s ){ hour = ( h >= 0 && h < 24 ) ? h : 0; minute = ( m >= 0 && m < 60 ) ? m : 0; second = ( s >= 0 && s < 60 ) ? s : 0;}

void Time::printUniversal(){ cout << (hour<10 ? "0":"") << hour << ":" << (minute<10 ? "0":"") << minute << ":" << (second<10 ? "0":"") << second;}

void Time::printStandard(){ cout << ( ( hour == 0 || hour == 12 ) ? 12 : hour % 12 ) << ":" << (minute<10 ? "0":"") << minute << ":" << (second<10 ? "0":"") << second << (hour < 12 ? " AM" : " PM" );}

int main(){ Time t; // create Time object

t.hour = 7; // error: 'Time::hour' is not accessible

// error: 'Time::minute' is not accessible cout << "minute = " << t.minute;

return 0; }

باشد، نمی دسترسی قابل خصوصی عضو اينکه بر مبنی خطايی پيغام با فوق برنامه کردن کامپايل هنگام. شويم می مواجه

Error in line 50: 'Time::hour' is not accessibleError in line 53: 'Time::minute' is not accessible

ها سازنده

دهی مقدار کالس آن سازنده تابع با توان می را آن داده اعضای شود، می ساخته کالس یک از شیئی که هنگامیتابع. اوليه هنگامی. می تعيين را ای داده اعضای اوليه مقادير که است بخصوصی عضو تابع ، سازنده کرد کندتوجه. می فراخوانی خودکار طور به سازنده تابع ، کند می ايجاد را کالسی از شيئی برنامه که داشته گردد

برگرداند. خود خروجی عنوان به را مقداری نبايد سازنده تابع که باشيد

117

Page 118: آموزش زبان برنامه نویسی C++

صفر با برابر را second و minute ، hour اولیه مقادیر کالس تعريف مبحث برنامه در رفته کار به سازندهاما. قرار به اوليه دهی مقدار برای ها آرگومان اين معموال که باشند، آرگومان دارای توانند می سازنده توابع داداز. می کار به مربوطه کالس نوع از شيئی خودکار طور به سازنده تابع شیء، ايجاد هنگام که آنجا روند

اوليه دهی مقدار تواند می خود، يافتی در های آرگومان توسط را کالس ای داده اعضای شود، می فراخوانیمقادیر. راست سمت در که پرانتزهایی درون کالس، آن از شیئی تعريف هنگام توان می را کالس یک اولیه کنداین. قرار آیند می ویرگول نقطه از پیش و شیء نام کالس سازنده تابع به آرگومان عنوان به اولیه مقادیر داد

به. می ارسال کنيد: توجه زير برنامه گردند

#include <iostream.h>

class CRectangle { int width, height; public: CRectangle (int,int); int area (void) {return (width*height);}};

CRectangle::CRectangle (int a, int b) { width = a; height = b;}

int main () { CRectangle rect (3,4); CRectangle rectb (5,6); cout << "rect area: " << rect.area() << endl; cout << "rectb area: " << rectb.area() << endl;}

باشد: می زير صورت به فوق برنامه خروجی

rect area: 12rectb area: 30

می باشد، پذیر امکان مختلف صورتهای به کالس ای داده اعضای به اوليه دهی مقدار اينکه برای را ها سازندهبه. گرانبار توان نماييد: توجه زير برنامه در سازنده، تابع کردن گرانبار نحوه کرد

#include <iostream.h>

class CRectangle { int width, height; public: CRectangle (); CRectangle (int,int); int area (void) {return (width*height);}};

CRectangle::CRectangle () { width = 5; height = 5;}

CRectangle::CRectangle (int a, int b) { width = a;

118

Page 119: آموزش زبان برنامه نویسی C++

height = b;}

int main () { CRectangle rect (3,4); CRectangle rectb; cout << "rect area: " << rect.area() << endl; cout << "rectb area: " << rectb.area() << endl;}

باشد: می زير صورت به فوق برنامه خروجی

rect area: 12rectb area: 25

در. نيز فرض پیش های آرگومان دارای توانند می ها سازنده time سازنده تابع تعريف پيش در زير برنامه باشندبا. شده گرفته نظر در صفر فرض پیش مقدار آرگومانها از یک هر برای و پيش مقدار کردن مشخص است

نگردد، تعيين آن برای نيز مقداری سازنده تابع فراخوانی هنگام اگر حتی سازنده، تابع آرگومانهای برای فرضاين. می گرفته کار به فرض پيش مقادير را درستی مقادير  همواره کالس اعضاء  که نمايد می تضمين کار شود

کنند. می نگهداری خود در

#include <iostream.h>

class Time { public: Time( int = 0, int = 0, int = 0); void setTime( int, int, int ); void printUniversal(); void printStandard();

private: int hour; // 0 - 23 (24-hour clock format) int minute; // 0 - 59 int second; // 0 - 59}

Time::Time( int hr, int min, int sec ) { setTime( hr, min, sec );}

void Time::setTime( int h, int m, int s ){ hour = ( h >= 0 && h < 24 ) ? h : 0; minute = ( m >= 0 && m < 60 ) ? m : 0; second = ( s >= 0 && s < 60 ) ? s : 0;}

void Time::printUniversal(){ cout << (hour<10 ? "0":"") << hour << ":" << (minute<10 ? "0":"") << minute << ":" << (second<10 ? "0":"") << second;}

119

Page 120: آموزش زبان برنامه نویسی C++

void Time::printStandard(){ cout << ( ( hour == 0 || hour == 12 ) ? 12 : hour % 12 ) << ":" << (minute<10 ? "0":"") << minute << ":" << (second<10 ? "0":"") << second << (hour < 12 ? " AM" : " PM" );}

void main(){ Time t1; // all arguments defaulted Time t2( 2 ); // minute and second defaulted Time t3( 21, 34 ); // second defaulted Time t4( 12, 25, 42 ); // all values specified Time t5( 27, 74, 99 ); // all bad values specified

cout << "Constructed with:\n\n" << "all default arguments:\n "; t1.printUniversal(); // 00:00:00 cout << "\n "; t1.printStandard(); // 12:00:00 AM

cout << "\n\nhour specified;"; << " default minute and second:\n "; t2.printUniversal(); // 02:00:00 cout << "\n "; t2.printStandard(); // 2:00:00 AM

cout << "\n\nhour and minute specified;"; << " default second:\n "; t3.printUniversal(); // 21:34:00 cout << "\n "; t3.printStandard(); // 9:34:00 PM

cout << "\n\nhour, minute, and second specified:\n "; t4.printUniversal(); // 12:25:42 cout << "\n "; t4.printStandard(); // 12:25:42 PM

cout << "\n\nall invalid values specified:\n "; t5.printUniversal(); // 00:00:00 cout << "\n "; t5.printStandard(); // 12:00:00 AM cout << endl;

}

باشد: می زير صورت به فوق برنامه خروجی

Constructed with:

all default arguments: 00:00:00 12:00:00 AM

120

Page 121: آموزش زبان برنامه نویسی C++

hour specified; default minute and second: 02:00:00 2:00:00 AM

hour and minute specified; default second: 21:34:00 9:34:00 PM

hour, minute, and second specified: 12:25:42 12:25:42 PM

all invalid values specified: 00:00:00 12:00:00 AM

پیش آرگومان هر از سازنده فراخوانی هنگام t1 که اند شده ايجاد Time کالس از شیء پنج فوق برنامه در مشخص خود سازنده برای را آرگومان سه t4 آرگومان، دو t3 آرگومان، یک t2 است، کرده استفاده فرضضمنا. کرده مشخص را مجاز غير مقادير با آرگومانهایی t5 و اند کرده آرگومان بودن مجاز بررسی برای است فراخوانی است کرده دريافت که آرگومانهايی با را setTime ، تابع اين سازنده، تابع توسط شده دريافت هایشوند. می دهی مقدار درستی مقادير با second و minute و hour که شود حاصل اطمينان تا کند می

ها نابودکننده

می شروع)~( کاراکتر با و باشد می کالس با همنام و کالس از ای ويژه عضو تابع سازنده همانند نابودکنندهگردد.

در برنامه که وقتی مثال) شود نابود کالس آن از شیئی که شود می فراخوانده هنگامی کالس یک نابودکننده تابعخود(. می ترک شده سازی نمونه کالس آن از شیئی آن، در که را ای حوزه اجرا، حال را شی نابودکننده کند گیرد پس باز را شی حافظه سیستم، که آن از پیش را دهی پایان به مربوط داری خانه امور بلکه کند، نمی نابود

دهد. می انجام شود، آزاد بعدی اشیای برای حافظه این و

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

class CreateAndDestroy {

public: CreateAndDestroy(); ~CreateAndDestroy();

private: int objectID;};

CreateAndDestroy::CreateAndDestroy(int objectNumber){ objectID = objectNumber; cout << "Object "<<objectID<<" constructor runs\n";}

121

Page 122: آموزش زبان برنامه نویسی C++

CreateAndDestroy::~CreateAndDestroy(){ cout << "Object "<<objectID<<" destructor runs\n"; }

ها نابودکننده و ها سازنده فراخوانی

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

#include <iostream.h>

class CreateAndDestroy { public: CreateAndDestroy( int, char * ); ~CreateAndDestroy();

private: int objectID; char *message;};

CreateAndDestroy::CreateAndDestroy( int objectNumber, char *messagePtr ){ objectID = objectNumber; message = messagePtr;

cout << "Object " << objectID << " constructor runs " << message << endl;}

CreateAndDestroy::~CreateAndDestroy(){ cout << ( objectID == 1 || objectID == 6 ? "\n" : "" );

cout << "Object " << objectID << " destructor runs " << message << endl; }

void create( void );

CreateAndDestroy first(1,"(global before main)");

void main(){ cout << "\nMAIN FUNCTION: EXECUTION BEGINS" << endl;

CreateAndDestroy second(2,"(local automatic in main)");

create(); // call function to create objects

cout << "\nMAIN FUNCTION: EXECUTION RESUMES" << endl;

CreateAndDestroy third(3,"(local automatic in main)");

cout << "\nMAIN FUNCTION: EXECUTION ENDS" << endl;

122

Page 123: آموزش زبان برنامه نویسی C++

}

void create( void ){ cout << "\nCREATE FUNCTION: EXECUTION BEGINS" << endl;

CreateAndDestroy fourth(4,"(local automatic in create)");

cout << "\nCREATE FUNCTION: EXECUTION ENDS" << endl;}

باشد: می زير صورت به فوق برنامه خروجی

Object 1 constructor runs (global before main)

MAIN FUNCTION: EXECUTION BEGINSObject 2 constructor runs (local automatic in main)

CREATE FUNCTION: EXECUTION BEGINSObject 4 constructor runs (local automatic in create)

CREATE FUNCTION: EXECUTION ENDSObject 4 destructor runs (local automatic in create)

MAIN FUNCTION: EXECUTION RESUMESObject 3 constructor runs (local automatic in main)

MAIN FUNCTION: EXECUTION ENDSObject 3 destructor runs (local automatic in main)Object 2 destructor runs (local automatic in main)

Object 1 destructor runs (global before main)

ثابت عضو توابع و ثابت اشياء

کند. می جلوگيری گيرد می قرار کلمه اين از بعد که متغيری روی بر تغيير از const کلمه دانيد می که همانطورکرد. استفاده const از توان می تغييرنيز قابل غير و ثابت شیء يک ايجاد برای

const Time noon(12, 0, 0);

اين که کند می دهی مقدار آنرا ظهر 12 با و کند می ايجاد noon نام با Time نوع از ثابتی شيء فوق دستورباشد. نمی تغيير قابل مقدار

به خودشان نيز عضو توابع اينکه مگر دهد نمی ثابت اشياء برای را عضو توابع فراخوانی اجازه C++ کامپايلربرای. شده تعريف const صورت پيش در هم بايد شود، تعريف const صورت به عضوی تابع اينکه باشندکنيم. استفاده تابع های آرگومان ليست از بعد const کلمه از تابع تعريف در هم و تابع تعريف

int Time::getHour() const{ return hour; }

123

Page 124: آموزش زبان برنامه نویسی C++

کند. می تعريف ثابت صورت به را Time کالس از getHour عضو تابع فوق دستور

نکته:

 وقوع باعث شود، تعريف ثابت صورت به اگر دهد، می تغيير را شيئی از داده عضو يک که عضوی تابع.1گردد. می خطا

شود، تعريف ثابت صورت به اگر  کند، می فراخوانی را ديگری ثابت غير عضو تابع که عضوی تابع.2گردد. می خطا  وقوع باعث

می خطا ايجاد باعث است، شده تعريف ثابت صورت به که شيئی از ثابت غير عضو تابع يک فراخوانی.3گردد.

اينکه. گرانبار آن از ثابتی غير نسخه با توان می را ثابت غير عضو تابع يک.4 گرانبار عضو تابع کدام نمودگردد. می تعيين شیء نبودن يا بودن ثابت اساس بر و کامپايلر توسط شود، فراخوانی شده

صورت به را آنها نبايد دارند اشياء تغيير به نياز ها کننده نابود و ها سازنده که آنجا از باشيد داشته توجه.5 پيغام يک کنيم تعريفشان ثابت صورت به و رود کار به آنها برای  const کلمه اگر و نمود تعريف ثابتکرد. خواهيم دريافت خطا

کنند. فراخوانی را ثابتی غير عضو تابع توانند می ثابت اشياء در ها سازنده.6

در. می ثابت غير ديگری و ثابت يکی که اند شده ايجاد Time نوع شیء دو زير برنامه در تابع برنامه اين باشد فراخوانی هنگام باشند، می ثابت غير عضو توابع صورت به که printStandard عضو تابع و setHour عضو

برنامه. می خطا وقوع باعث شد ذکر 2 نکته در که همانطور روشن را مبحث اين در شده گفته نکات زير گردندسازد: می

#include <iostream.h>

class Time { public: Time( int = 0, int = 0, int = 0); void setTime( int, int, int );

void setHour( int ); void setMinute( int ); void setSecond( int );

int getHour() const; int getMinute() const; int getSecond() const;

void printUniversal() const; void printStandard();

private: int hour; // 0 - 23 (24-hour clock format) int minute; // 0 - 59 int second; // 0 - 59}

Time::Time( int hour, int minute, int second ){ setTime( hour, minute, second );}

void Time::setTime( int hour, int minute, int second ){ setHour( hour ); setMinute( minute ); setSecond( second );

124

Page 125: آموزش زبان برنامه نویسی C++

}

void Time::setHour( int h ){ hour = ( h >= 0 && h < 24 ) ? h : 0;}

void Time::setMinute( int m ){ minute = ( m >= 0 && m < 60 ) ? m : 0;}

void Time::setSecond( int s ){ second = ( s >= 0 && s < 60 ) ? s : 0;}

int Time::getHour() const{ return hour;}

int Time::getMinute() const{ return minute; }

int Time::getSecond() const{ return second;}

void Time::printUniversal() const{cout << (hour<10 ? "0":"") << hour << ":" << (minute<10 ? "0":"") << minute << ":" << (second<10 ? "0":"") << second;}

void Time::printStandard(){ cout << ( ( hour == 0 || hour == 12 ) ? 12 : hour % 12 ) << ":" << (minute<10 ? "0":"") << minute << ":" << (second<10 ? "0":"") << second << (hour < 12 ? " AM" : " PM" );}

int main(){ Time wakeUp( 6, 45, 0 ); // non-constant object const Time noon( 12, 0, 0 ); // constant object

// OBJECT MEMBER FUNCTION wakeUp.setHour( 18 ); // non-const non-const

noon.setHour( 12 ); // const non-const

wakeUp.getHour(); // non-const const

125

Page 126: آموزش زبان برنامه نویسی C++

noon.getMinute(); // const const noon.printUniversal(); // const const

noon.printStandard(); // const non-const

return 0;}

باشد: می زير صورت به فوق برنامه خطای های پيغام

Warning W8037 100: Non-const function Time::setHour(int) called for const object in function main()Warning W8037 107: Non-const function Time::printStandard() called for const object in function main()*** 2 errors in Compile ***

ها کالس اعضای عنوان به اشياء: ترکيب

بايد( زنگ )AlarmClock شيء به را Time نوع از شيئی است بهتر پس آيد، در صدا به وقت چه که بداند ساعتچنين. داشته خود اعضای از يکی عنوان يعنی. می ناميده ترکيب ها کالس در قابليتی باشد می کالس يک شودباشد. داشته خود اعضای از يکی عنوان به را ديگری کالسهای يا کالس تواند

در. می آشنا شیء ايجاد هنگام سازنده تابع به آرگومانها ارسال روش با ارسال روش مبحث اين باشيمبرای. می بررسی را آن به اوليه دهی مقدار و کالس عضو شیء سازنده تابع به آرگومان اين با آشنايی کنيم

کنيد: توجه زير برنامه به روش

#include <iostream.h>#include <string.h>

class Date {

public: Date( int = 1, int = 1, int = 1900 ); void print() const; ~Date();

private: int month; // 1-12 (January-December) int day; // 1-31 based on month int year; // any year

int checkDay( int ) const; };

Date::Date( int mn, int dy, int yr ){ if ( mn > 0 && mn <= 12 ) month = mn; else { month = 1; cout << "Month " << mn

126

Page 127: آموزش زبان برنامه نویسی C++

<< " invalid. Set to month 1.\n"; }

year = yr; day = checkDay( dy );

cout << "Date object constructor for date "; print(); cout << endl;}

void Date::print() const{ cout << month << '/' << day << '/' << year; }

Date::~Date(){ cout << "Date object destructor for date "; print(); cout << endl;}

int Date::checkDay( int testDay ) const{ static const int daysPerMonth[ 13 ] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };

if ( testDay > 0 && testDay <= daysPerMonth[ month ] ) return testDay;

if ( month == 2 && testDay == 29 && ( year % 400 == 0 || ( year % 4 == 0 && year % 100 != 0 ) ) ) return testDay;

cout << "Day " << testDay << " invalid. Set to day 1.\n";

return 1;}

class Employee {

public: Employee(const char *, const char *, const Date &, const Date & );

void print() const; ~Employee();

private: char firstName[ 25 ]; char lastName[ 25 ]; const Date birthDate; //composition: member object const Date hireDate; //composition: member object};

127

Page 128: آموزش زبان برنامه نویسی C++

Employee::Employee(const char *first, const char *last, const Date &dateOfBirth, const Date &dateOfHire ) : birthDate( dateOfBirth ), hireDate( dateOfHire ){ int length = strlen( first ); length = ( length < 25 ? length : 24 ); strncpy( firstName, first, length ); firstName[ length ] = '\0';

length = strlen( last ); length = ( length < 25 ? length : 24 ); strncpy( lastName, last, length ); lastName[ length ] = '\0';

cout << "Employee object constructor: " << firstName << ' ' << lastName << endl;}

void Employee::print() const{ cout << lastName << ", " << firstName << "\nHired: "; hireDate.print(); cout << " Birth date: "; birthDate.print(); cout << endl;}

Employee::~Employee(){ cout << "Employee object destructor: " << lastName << ", " << firstName << endl;}

int main(){ Date birth( 7, 24, 1949 ); Date hire( 3, 12, 1988 ); Employee manager( "Bob", "Jones", birth, hire );

cout << '\n'; manager.print();

cout << "\nTest Date constructor " <<"with invalid values:\n"; Date lastDayOff(14,35,1994); //invalid month and day cout << endl;

return 0;}

باشد: می زير صورت به فوق برنامه خروجی

Date object constructor for date 7/24/1949Date object constructor for date 3/12/1988Employee object constructor: Bob Jones

128

Page 129: آموزش زبان برنامه نویسی C++

Jones, BobHired: 3/12/1988 Birth date: 7/24/1949

Test Date constructor with invalid values:Month 14 invalid. Set to month 1.Day 35 invalid. Set to day 1.Date object constructor for date 1/1/1994

Date object destructor for date 1/1/1994Employee object destructor: Jones, BobDate object destructor for date 3/12/1988Date object destructor for date 7/24/1949Date object destructor for date 3/12/1988Date object destructor for date 7/24/1949

کالس. شده ايجاد Employee و Date کالس دو فوق برنامه در داده عضو چهار دارای  Employee استاعضای. می hireDate و birthDate و lastName و firstName نامهای به خصوصی و birthDate باشد

hireDate کالس نوع از ثابتی اشياء خود  Date خصوصی داده اعضای دارای که باشند می month و day و year . تعريف و fname آرگومان چهار سازنده که کند می مشخص Employee کالس سازنده تابع هستند

lname و  dateOfBirth و dateOfHire دو. می دريافت را lastName و firstName اعضای اول آرگومان کنددو. می دهی مقدار را hireDate و birthDate توسط dateOfHire و dateOfBirth يعنی بعدی آرگومان کنند مقدار را شیء دو اين و گردند می ارسال اشياء اين های سازنده به باشند می Date کالس نوع از اشيايی که

کنند. می اوليه دهی

Employee::Employee(const char *first, const char *last, const Date &dateOfBirth, const Date &dateOfHire ) : birthDate( dateOfBirth ), hireDate( dateOfHire )

دو نام آن از بعد و است گرفته قرار ( :) عالمت آرگومانها ليست از بعد بينيد می فوق دستور در که همانطوراين. قرار باشند، می Date کالس نوع از که Employee کالس عضو شیء به اوليه دهی مقدار برای روش داردگيرد. می قرار استفاده مورد اصلی، کالس آرگومانهای طريق از کالس يک عضو اشياء

اين. شده فراخوانی آرگومانی هيچ بدون کالس اين سازنده تابع در ، Date کالس از print عضو تابعنکته: استدر. مرسوم بسيار C++ در کار بايد کالس اعضای از يک کدام که است شده مشخص print تابع در اينجا است

ندارد. آرگومان دريافت به نيازی و شود، چاپ

دوست های کالس و دوست توابع

کالس آن عمومی غير اعضای به همچنان اما شود می تعريف کالس آن حوزه از خارج در کالس يک دوست تابعتوابع. دسترسی و( نمی کالسی عضو که توابعی) تنها دارد عنوان به توانند می کالس يک عضو توابع يا باشند

برای. تعريف ديگری کالس دوست آن در را تابع تعريف پيش کالس، يک دوست عنوان به تابع يک تعريف گردندآوريم. می friend کلمه همراه به کالس

class Count{ friend void setX(Count & , int); int x;}

129

Page 130: آموزش زبان برنامه نویسی C++

برای. می گرفته نظر در Count کالس دوست عنوان به setX تابع فوق دستور در عضو توابع تمام اينکه شوددستور. گرفته نظر در classOne نام با ديگری کالس دوست توابع عنوان به classTwo نام با کالسی زير شوند

آوريم: می classOne کالس تعريف در را

friend class classTwo;

عضو به دستيابی اجازه لذا است شده گرفته نظر در Count کالس دوست عنوان به setX تابع زير برنامه درضمنا. می دارا را Count کالس از x داده ، کالس اعضای تعريف ابتدای در دوست توابع که است بهتر باشد

گردند. تعريف

#include <iostream.h>

class Count { friend void setX( Count &, int );

public: Count(): x( 0 ) // initialize x to 0 { // empty body }

void print() const { cout << x << endl; }

private: int x;};

void setX( Count &c, int val ){ c.x = val; // legal: setX is a friend of Count}

void main(){ Count counter;

cout << "counter.x after instantiation: "; counter.print();

setX( counter, 8 ); // set x with a friend

cout << "counter.x after call" <<"to setX friend function: "; counter.print();}

باشد: می زير صورت به فوق برنامه خروجی

counter.x after instantiation: 0counter.x after call to setX friend function: 8

130

Page 131: آموزش زبان برنامه نویسی C++

همچنين. شده تعريف کالس داخل در Count کالس عضو توابع فوق برنامه در ، x خصوصی داده عضو انداست. شده اوليه دهی مقدار 0 عدد با زير دستور توسط

Count(): x( 0 )

this گر اشاره

هر. وجود ها کالس با همراه this کليدی کلمه C++ در خود آدرس به this نام به گری اشاره طريق از شیء دارداز. دسترسی شیء، يک عضو تابع به شده ارسال آرگومان آيا اينکه بررسی برای توان می گر اشاره اين دارد

به. استفاده ، خير يا باشد می شیء خود نماييد: توجه زير برنامه کرد

#include <iostream.h>

class CDummy { public: int isitme (CDummy& param);};

int CDummy::isitme (CDummy& param){ if (&param == this) return 1; else return 0;}

int main () { CDummy a; CDummy* b = &a; if ( b->isitme(a) ) cout << "yes, &a is b"; return 0;}

باشد: می زير صورت به فوق برنامه خروجی

yes, &a is b

پویا حافظه مدیریت

++c در ای داده نوع هر برای را حافظه آزادسازی یا و حافظه تخصیص تا سازد می قادر را نویسان برنامه این. کنترل و مدیریت برنامه و new عملگرهای توسط و شود می نامیده پویا حافظه مدیریت قابلیت، کنند

delete دو.  می صورت لذا. قرار new.h فایل در مذکور عملگر پذیرد باید عملگر دو این کارگیری به برای دارنددستورات. استفاده برنامه در <include <new.h# دستور از بگیرید: نظر در را زیر کنیم

Time *timePtr;timePtr = new Time;

را شیء این سازنده و سازد می Time نوع از ای داده اندازه با را شیئی فوق دستورات در new عملگرتوجه. برمی new عملگر راست سمت در گرفته قرار داده نوع از گر اشاره یک و کرده فراخوانی داشته گرداند

اگر. کار به تواند می کالسها یا و...( و int و double مانند) ای داده نوع هر برای new عملگر که باشید رود

131

Page 132: آموزش زبان برنامه نویسی C++

new برای. می باز را 0گر اشاره یک بیابد، حافظه در شیء برای خالی فضای نتواند شیئی نابودسازی گرداندکنیم: می استفاده زیر صورت به delete عملگر از شده، داده تخصیص حافظه آن برای پویا صورت به که

delete timePtr;

حافظه سپس کرده؛ فراخوانی کند، می اشاره آن به timePtr که را شیء نابودکننده ابتدا فوق دستورشود. می آماده دیگری شیء به تخصیص برای حافظه و سازد می آزاد را شیء به شده داده اختصاص

++c به. می شیء یک به پویا حافظه تخصیص با همزمان را اولیه مقداردهی اجازه کنید: توجه زیر دستور دهد

double *ptr=new double(3.14159);

گر اشاره کندو می مقداردهی 3.14159 با را double نوع از ای داده به شده داده تخصیص حافظه فوق دستورروش. می قرار Ptr در را آن به کار به شیء یک سازنده تابع آرگومانهای برای تواند می فوق دستور مشابه دهد

به. کنید: توجه زیر دستور رود

Time *timePtr= new Time(12,0,0);

گر اشاره و کرده مقداردهی ظهر 12 با را Time کالس نوع از شیئی به شده داده تخصیص حافظه فوق دستوردهد. می قرار timePtr در را آن با

10 آرایه یک برای مثال عنوان به  سازد. می فراهم نیز را ها آرایه برای پویا حافظه تخصیص امکان new عملگریابد: می تخصیص پویا حافظه زیر دستور توسط صحیح عدد نوع از عنصری

int *gradesArray=new int[10];

صحیح عدد نوع از عنصری  10 آرایه به یافته تخصیص پویای حافظه در عنصر اولین به گر اشاره فوق دستور درگیرد. می قرار gradesArray گر اشاره در

کرد: استفاده توان می زیر دستور از ها آرایه به شده داده تخصیص حافظه آزادسازی برای

delete [] gradesArray;

استفاده delete][ از آرایه یک به یافته تخصیص حافظه های خانه آزادسازی برای که باشید داشته توجه نکته:نبرید. کار به تنهایی به را delete و نمایید

کالس ایستای اعضای

نمی بین از تابع از خروج هنگام شد، می تعریف static نوع از تابع یک در که متغیری دانید می که طور هماندر. دسترسی قابل تابع مجدد فراخوانی با و کرد می خفظ را خود مقدار و رفت اعضا توان می نیز کالسها بود

چنین. تعریف( static) ایستا صورت به را که اشیایی همه برای شود، می تعریف ایستا صورت به که عضوی کرد در عضو این مقدار که هنگامی و است دسترسی قابل مشترک صورت به شوند، می تعریف کالس آن نوع از

چنین. می استفاده قابل نیز کالس آن نوع از اشیا سایر در جدید مقدار کند می تغییر اشیا این از یکی باشد متغیر مانند و باشد می کالس حوزه دارای عضو این اما آید، نظر به عمومی متغیر مانند است ممکن عضویاعضای. فایل حوزه دارای عمومی .private ویا public نوع از توانند می کالس یک ایستای نیست باشند

132

Page 133: آموزش زبان برنامه نویسی C++

ضمنا. می دسترسی قابل کالس یک دوست توابع یا و کالس عضو توابع طریق از ایستا اعضای همچنین به باشندیافت. دسترسی)::( عملگر طریق از مستقیما توان می اند، شده تعریف عمومی صورت به که ایستایی اعضای

کنید: توجه زیر برنامه به پویا حافظه مدیریت نیز و کالس ایستای اعضای گیری کار به نحوه با آشنایی برای

#include <iostream.h>#include <new.h>#include <string.h>

class Employee { public: Employee( const char *, const char * ); ~Employee(); const char *getFirstName() const; const char *getLastName() const;

// static member function static int getCount();

private: char *firstName; char *lastName;

// static data member static int count;};

int Employee::count = 0;

int Employee::getCount(){ return count;}

// constructor dynamically allocates space for// first and last name and uses strcpy to copy// first and last names into the objectEmployee::Employee(const char *first,const char *last){ firstName = new char[ strlen( first ) + 1 ]; strcpy( firstName, first );

lastName = new char[ strlen( last ) + 1 ]; strcpy( lastName, last );

++count; // increment static count of employees

cout << "Employee constructor for " << firstName << ' ' << lastName << " called." << endl;}

// destructor deallocates dynamically allocated memoryEmployee::~Employee(){ cout << "~Employee() called for " << firstName << ' ' << lastName << endl;

delete [] firstName; // recapture memory delete [] lastName; // recapture memory

133

Page 134: آموزش زبان برنامه نویسی C++

--count; // decrement static count of employees}

const char *Employee::getFirstName() const{ return firstName;}

const char *Employee::getLastName() const{ return lastName;}

int main(){ cout <<"Number of employees before instantiation is " <<Employee::getCount() << endl;

Employee *e1Ptr = new Employee( "Susan", "Baker" ); Employee *e2Ptr = new Employee( "Robert", "Jones" );

cout << "Number of employees after instantiation is " << e1Ptr->getCount();

cout << "\n\nEmployee 1: " << e1Ptr->getFirstName() << " " << e1Ptr->getLastName() << "\nEmployee 2: " << e2Ptr->getFirstName() << " " << e2Ptr->getLastName() << "\n\n";

delete e1Ptr; //recapture memory e1Ptr = 0; //disconnect pointer from free-store space delete e2Ptr; //recapture memory e2Ptr = 0; //disconnect pointer from free-store space

cout << "Number of employees after deletion is " << Employee::getCount() << endl;

return 0;}

باشد: می زير صورت به فوق برنامه خروجی

Number of employees before instantiation is 0Employee constructor for Susan Baker called.Employee constructor for Robert Jones called.Number of employees after instantiation is 2

Employee 1: Susan BakerEmployee 2: Robert Jones

~Employee() called for Susan Baker~Employee() called for Robert JonesNumber of employees after deletion is 0

134

Page 135: آموزش زبان برنامه نویسی C++

کالس در( static) ایستا صورت به getCount عمومی عضو تابع و count خصوصی داده عضو باال برنامه درEmployee زیر: دستور توسط و شدند، تعریف

int Employee::count = 0;

کالس از شده ایجاد اشیای تعداد countشد. اولیه مقداردهی Employee کالس از count خصوصی داده عضوEmployee هر. می نگهداری خود در و شمارد می را ایجاد Employee کالس نوع از جدید شی یک که بار کند

و یابد می افزایش واحد یک مقدارش count ، Employee کالس سازنده در ++count ستور توسط شود می count کالس کننده نابود در --count دستور توسط شود، می نابود Employee کالس نوع از شی یک که بار هر

، Employee یابد. می کاهش واحد یک مقدارش

تخصیص حافظه به گر اشاره و کنند می ایجاد new عملگر توسط را Employee  نوع از شی دو زیر دستوراتگیرد: می قرار e2Ptr و e1Ptr در ترتیب به شی دو این یافتهبه

Employee *e1Ptr = new Employee( "Susan", "Baker" ); Employee *e2Ptr = new Employee( "Robert", "Jones" );

سازند: می آزاد را Employee کالس  نوع از شی دو به یافته تخصیص حافظه زیر دستورات همچین

delete e1Ptr; //recapture memory e1Ptr = 0; //disconnect pointer from free-store space delete e2Ptr; //recapture memory e2Ptr = 0; //disconnect pointer from free-store space

اعضای ولی است نشده ساخته Employee کالس  نوع از شیئی هنوز که هنگامی باشید، داشته توجهgetCount و count مقدار به توان می و باشد می موجود کالس این از count عضو تابع طریق از getCount دهد: می انجام را کار این زیر دستور فوق برنامه در کرد پیدا دسترسی

Employee::getCount()

عملگرها کردن گرانبار مبانی

به. کار به را عضو توابع فراخوانی شیوه کالس، یک اشیای با کار برای که دیدید قبلی مباحث در عنوان بردیم یک عضو مقدار دیگری عضو تابع توسط یا و کردیم مقداردهی را کالس یک اعضای عضو، تابع یک توسط مثالاین. نمایش را کالس برای. می دشوار ریاضی کالسهای خصوصا کالسها، از برخی برای کار دادیم کار این باشد برای ++C زبان عملگرهای بردن کار به برای البته کرد، استفاده ++C زبان عملگرهای مجموعه از توان می

به. سازی آماده باید عملگرها این سازیم، می ما که کالسهایی می گفته عملگرها کردن گرانبار کار این شوندبه. این. شده گرانبار ++C زبان در- یا+ عملگرهای مثال عنوان شود عملوندهای نوع به توجه با عملگرها اندکنند. می عمل متفاوتی شیوه به باشند، می اعشاری یا صحیح اعداد که خود

اکثر تا سازد می قادر را نویسان برنامه ولی دهد، نمی ما به را جدیدی عملگر ایجاد اجازه ++C گرچهدر. گرانبار ببرند، کار به را آنها خواهند می که جایی برای را زبان این عملگرهای گرانبار عملگری که حالتی کنند

می تولید خودکار صورت به را آن به مرتبط کد کامپایلر رفته، کار به عملگر این که جایی به توجه با باشد، شدهضمنا. ولی. انجام توانند می نیز توابع شود، می انجام عملگرها توسط که کاری کند عملگرها معموال دهند

کنند. می بیشتر را برنامه وضوح

135

Page 136: آموزش زبان برنامه نویسی C++

کلمه از متشکل بايد تابع نام البته ، کنيد تعريف آن برای تابع يک است کافی عملگر يک کردن گرانبار برایoperator به. نظر مورد عملگر نماد و + بايد کند می گرانبار را + عملگر که تابعی نام مثال عنوان باشدoperator . در ايم: کرده گرانبار مختصات نقطه دو مجموع محاسبه برای را+ عملگر زير برنامه باشد

#include <iostream.h>

class CVector{ public: CVector (int =0 ,int =0 ); CVector operator+ (CVector); void showCVector(void); private: int x,y;};

CVector::CVector (int a, int b){ x = a; y = b;}

CVector CVector::operator+ (CVector vector){ CVector temp; temp.x = x + vector.x; temp.y = y + vector.y; return temp;}

void CVector::showCVector(void){ cout << "("<< x << "," << y << ")";}

int main (){ CVector a (3,1); CVector b (1,2); CVector c; c = a + b; a.showCVector(); cout << "+"; b.showCVector(); cout << "="; c.showCVector(); return 0;}

: باشد می زير صورت به برنامه خروجی

(3,1)+(1,2)=(4,3)

قبلی مبحث بعدی مبحث

عملگرها کردن گرانبار مبانی

136

Page 137: آموزش زبان برنامه نویسی C++

به. کار به را عضو توابع فراخوانی شیوه کالس، یک اشیای با کار برای که دیدید قبلی مباحث در عنوان بردیم یک عضو مقدار دیگری عضو تابع توسط یا و کردیم مقداردهی را کالس یک اعضای عضو، تابع یک توسط مثالاین. نمایش را کالس برای. می دشوار ریاضی کالسهای خصوصا کالسها، از برخی برای کار دادیم کار این باشد برای ++C زبان عملگرهای بردن کار به برای البته کرد، استفاده ++C زبان عملگرهای مجموعه از توان می

به. سازی آماده باید عملگرها این سازیم، می ما که کالسهایی می گفته عملگرها کردن گرانبار کار این شوندبه. این. شده گرانبار ++C زبان در- یا+ عملگرهای مثال عنوان شود عملوندهای نوع به توجه با عملگرها اندکنند. می عمل متفاوتی شیوه به باشند، می اعشاری یا صحیح اعداد که خود

اکثر تا سازد می قادر را نویسان برنامه ولی دهد، نمی ما به را جدیدی عملگر ایجاد اجازه ++C گرچهدر. گرانبار ببرند، کار به را آنها خواهند می که جایی برای را زبان این عملگرهای گرانبار عملگری که حالتی کنند

می تولید خودکار صورت به را آن به مرتبط کد کامپایلر رفته، کار به عملگر این که جایی به توجه با باشد، شدهضمنا. ولی. انجام توانند می نیز توابع شود، می انجام عملگرها توسط که کاری کند عملگرها معموال دهند

کنند. می بیشتر را برنامه وضوح

کلمه از متشکل بايد تابع نام البته ، کنيد تعريف آن برای تابع يک است کافی عملگر يک کردن گرانبار برایoperator به. نظر مورد عملگر نماد و + بايد کند می گرانبار را + عملگر که تابعی نام مثال عنوان باشدoperator . در ايم: کرده گرانبار مختصات نقطه دو مجموع محاسبه برای را+ عملگر زير برنامه باشد

#include <iostream.h>

class CVector{ public: CVector (int =0 ,int =0 ); CVector operator+ (CVector); void showCVector(void); private: int x,y;};

CVector::CVector (int a, int b){ x = a; y = b;}

CVector CVector::operator+ (CVector vector){ CVector temp; temp.x = x + vector.x; temp.y = y + vector.y; return temp;}

void CVector::showCVector(void){ cout << "("<< x << "," << y << ")";}

int main (){ CVector a (3,1); CVector b (1,2); CVector c; c = a + b; a.showCVector(); cout << "+";

137

Page 138: آموزش زبان برنامه نویسی C++

b.showCVector(); cout << "="; c.showCVector(); return 0;}

: باشد می زير صورت به برنامه خروجی

(3,1)+(1,2)=(4,3)

ها عملگر کردن گرانبار های محدوديت

جدول. گرانبار توان می را C++ های عملگر اکثر باشد: می زير صورت به عملگرها اين کرد

[ ] ( ) ->

++ -- & *

+ - ~ !

->* / % <<

>> < > <=

>= == != ^

| && ||

= *= /= %=

+= -= <<= >>=

&= ^= |= ,

new delete new[] delete[]

اند: شده ذکر زير جدول در ندارند، را شدن گرانبار قابليت که عملگرهايی

. .* :: ?: sizeof

دوست توابع يا کالس اعضای عنوان به عملگر توابع

توابع صورت به معموال عضو غير توابع البته که باشند، عضو غير توابع يا عضو توابع توانند می عملگر توابعهنگام. می دوست فرستاده تابع به آرگومان عنوان به بايد ها عملوند ، عضو غير عملگر تابع يک فراخوانی باشندشوند.

عنوان به بايد عملگر کننده گرانبار تابع ديگری، انتساب عملگر هر يا >- و ][ ، )( های عملگر کردن گرانبار هنگام عضو غير تابع صورت به تواند می عملگر کننده گرانبار تابع عملگرها، ساير برای ولی شود تعريف عضو تابع يک

شود. تعريف

138

Page 139: آموزش زبان برنامه نویسی C++

کالس از شيئی بايد چپ سمت عملوند شود، می تعريف عضو تابع يک عنوان به عملگر تابع يک که هنگامی تابع نوع از بايد عملگر تابع اين باشد، ديگری کالس از شيئی چپ سمت عملوند که است الزم اگر باشدو عملگر

تابع. تعريف عضو غير کالس( private) خصوصی عضو يک به بايد که صورتی در عضو غير عملگر شودگردد. تعريف( friend) دوست توابع نوع از بايد باشد، داشته دسترسی

عملوندی( دو) دودويی عملگر چپ سمت عملوند که شود می فراخوانی هنگامی تنها کالس عضو عملگر تابعشيئی( تک) يگانی عملگر عملوند تنها يا و باشد عملگر تابع کالس نوع از شيئی عملگر کالس نوع از عملوندیباشد.

بخواهيم که اينست رود کار به عملگر يک کردن گرانبار برای عضو غير تابع يک است ممکن که ديگری دليلبه. داشته جابجايی خاصيت عملگر داريم long int نوع از number نام به متغيری کنيد فرض مثال عنوان باشد

خيلی مقادير توانند می صحيح اعداد آن در که کالسی )HugeInteger کالس نوع از bigInteger1 نام با شيئی وعملگر(. داشته double و long int مانند انواعی توسط ايجاد مقاديرقابل به نسبت بزرگتری (+) جمع باشند

يک جمع يا و( bigInteger1+number عبارت در مثال )long int عدد يک با HugeInteger عدد يک جمع هنگام کالس نوع از موقت شيئی ،( number+bigInteger1 عبارت در مثال )HugeInteger عدد يک با long int عدد

HugeInteger در جمع عملگر معموال که) باشد داشته جابجايی خاصيت بايد عملگر اين لذا کند، می ايجاد در(. می جابجايی خاصيت دارای محاسباتی عبارات تعريف عضو تابع صورت به جمع عملگر اگر اينجا باشد در جابجايی خاصيت ايجاد امکان لذا گيرد، قرار HugeInteger کالس از شيئی بايد تنها آن چپ سمت در گردد، بتوانيم تا کنيم می گرانبار عضو غير تابع صورت به را عملگر اين دليل همين به باشد، نمی ميسر حالت اين

بدهيم. آن به را بجايی جا خاصطت

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

#include <iostream.h>

class CVector{ friend CVector operator- (CVector & , CVector);

public: CVector (int =0 ,int =0 ); CVector operator+ (CVector); void showCVector(void); private: int x,y;};

CVector::CVector (int a, int b){ x = a; y = b;}

void CVector::showCVector(void){ cout << "("<< x << "," << y << ")";}

CVector CVector::operator+ (CVector vector){ CVector temp; temp.x = x + vector.x; temp.y = y + vector.y; return temp;

139

Page 140: آموزش زبان برنامه نویسی C++

}

CVector operator- (CVector &v, CVector vector){ CVector temp; temp.x = v.x - vector.x; temp.y = v.y - vector.y; return temp;}int main (){ CVector a (3,1); CVector b (1,2); CVector c,d; c = a + b; a.showCVector(); cout << "+"; b.showCVector(); cout << "="; c.showCVector();

cout << "\n";

d = a - b; a.showCVector(); cout << "-"; b.showCVector(); cout << "="; d.showCVector(); return 0;}

: باشد می زير صورت به برنامه خروجی

(3,1)+(1,2)=(4,3)(3,1)-(1,2)=(2,-1)

>> و<< های عملگر کردن گرانبار

++C از اينکار برای و باشد می خروجی به آنها ارسال و زبان اين در شده تعريف های داده دريافت به قادر اين. می استفاده >> و<< های عملگر ما. شده گرانبار زبان اين در موجود ای داده انواع برای ها عملگر کند اند

در. گرانبار ايم، کرده ايجاد خودمان که کالسهايی و داده انواع برای را ها عملگر اين توانيم می نيز برنامه کنيمدر. شده ايجاد کند می نگهداری خود در را تلفن شماره که phoneNumber نام با کالسی زير برنامه اين است

نمايش صفحه در شماره اين << عملگر توسط و شود می دريافت ورودی از تلفن شماره يک>> عملگر توسطبه. می چاپ کنيد: توجه برنامه اين گردد

#include <iostream.h>

class PhoneNumber { friend ostream &operator<< ( ostream&, const PhoneNumber & ); friend istream &operator>> ( istream&, PhoneNumber & );

140

Page 141: آموزش زبان برنامه نویسی C++

private: char areaCode[ 4 ]; // 3-digit area code and null char exchange[ 4 ]; // 3-digit exchange and null char line[ 5 ]; // 4-digit line and null};

ostream &operator<< ( ostream &output, const PhoneNumber &num ){ output << num.areaCode << " " << num.exchange << " " << num.line;

return output; // enables cout << a << b << c;}

istream &operator>> ( istream &input, PhoneNumber &num ){ input >> num.areaCode; // input area code input >> num.exchange; // input exchange input >> num.line; // input line

return input; // enables cin >> a >> b >> c;}

int main(){ PhoneNumber phone;

cout << "Enter phone number in the form " << "123 456 7890:\n";

cin >> phone;

cout << "The phone number entered was: ";

cout << phone << endl;

return 0;}

: باشد می زير صورت به برنامه خروجی

Enter phone number in the form 123 456 7890:021 224 5348The phone number entered was: 021 224 5348

چون. شده تعريف دوست توابع نوع از >> و << عملگرهای توابع بينيد می فوق برنامه در که همانطور اندcout<<classObje دستور در cout مانند باشد می &ostream نوع از چپ سمت عملوند يک دارای << عملگر

ct نوع از چپ سمت عملوند يک دارای>> عملگر نيز وistream& مانند باشد می cin دستور در cin>>classObject .چاپ خروجی در و دريافت ورودی از بايد که شيئی داده اعضای به بايد شده گرانبار توابع اين همچنين به. داشته دسترسی شود، اند. شده تعريف دوست عملگر توابع نوع از توابع اين شده ذکر داليل باشند

کالس نوع از ديگری آرگومان و input نام با istream نوع از آرگومان يک <<operator عملگر تابعphoneNumber نام با num نوع از تابع خروجی و کند می يافت در istream اين. می تلفن شماره تابع باشد

صورت به هايی

141

Page 142: آموزش زبان برنامه نویسی C++

800 555 1212

هنگامی. می قرار phoneNumber کالس نوع از شيئی در را آنها و کرده دريافت ورودی از را کامپايلر که دهدبيند: می را زير دستور

cin>>phone;

شود: می توليد زير صورت به <<operator تابع

operator>>(cin,phone);

نام num ارجاعی آرگومان و cin مستعار نام input ارجاعی آرگومان شد، توليد فوق تابع که هنگامیبدين. می گرفته نظر در phone برای مستعاری اعضای در ورودی از شده دريافت رشته سه ترتيب شوند

areacode ، exchange و line گيرند. می قرار

کالس نوع از ديگری آرگومان و output نام با ostream نوع از آرگومان يک >>operator عملگر تابعphoneNumber نام با num نوع از تابع خروجی و کند می يافت در ostream اين. می تلفن شماره تابع باشد

صورت به هايی

800 555 1212

هنگامی. می نمايش باشد، می phoneNumber کالس نوع از شيئی که را می را زير دستور کامپايلر که دهدبيند:

cout<<phone;

شود: می توليد زير صورت به >>operator تابع

operator<<(cout,phone);

نام num ارجاعی آرگومان و cout مستعار نام output ارجاعی آرگومان شد، توليد فوق تابع که هنگامیبدين. می گرفته نظر در phone برای مستعاری ، areacode اعضای در موجود رشته سه ترتيب شوند

exchange و line يابند. می نمايش نظر مورد شيوه به

يگانی های عملگر کردن گرانبار

کنيم: می تعريف را آن زير شيوه به ، عضو تابع صورت به يگانی عملگر يک کردن گرانبار برای کلی طور به

class کالس نام { public:عملگر خروجی نوع oprerator عملگر عالمت () const; ...}

کنيم: می تعريف را آن زير شيوه به ، دوست تابع صورت به يگانی عملگر يک کردن گرانبار برای و

142

Page 143: آموزش زبان برنامه نویسی C++

class کالس نام { friend عملگر خروجی نوع oprerator عملگر عالمت (const کالس نام &); ...}

دودويی های عملگر کردن گرانبار

کنيم: می تعريف را آن زير شيوه به ، عضو تابع صورت به دودويی عملگر يک کردن گرانبار برای کلی طور به

class کالس نام { public: const کالس نام &oprerator عملگر عالمت (const کالس نام &); ...}

کنيم: می تعريف را آن زير شيوه به ، دوست تابع صورت به دودويی عملگر يک کردن گرانبار برای و

class کالس نام { friend const کالس نام &oprerator عملگر عالمت کالس نام ) &, const کالس نام &); ...}

مبحث

يکديگر به انواع تبديل

مثال. يکديگر به انواع تبديل به نياز که آيد می پيش مواردی نويسی برنامه هنگام از اشيايی که هنگامی داريم الزم تبديالت چگونه که داند نمی کامپايلر شوند ترکيب يکديگر با را کاربر توسط شده تعريف متفاوت کالسهای

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

اين. تبديل اوليه انواع يا ديگر کالسی از شيئی به را کالسی از شيئی تواند می نيز تبديل عملگر بايد عملگر نمايدبه. تعريف عضو تابع صورت به نماييد: توجه زير دستور شود

test::operator char* () const;

اين. می گرانبار را تبديل تابع يک يک فوق دستور نوع از شيئی به را char* نوع از موقت شیء يک تابع نمايدهمانطور. می تبديل test نام با کاربر توسط شده ايجاد در خروجی نوع تابع اين برای کنيد می مشاهده که نمايددر. نشده گرفته نظر می شيئی نوع ، خروجی نوع و باشد داشته خروجی نوع نبايد تبديل عملگر حقيقت استمثال. تبديل حال در که باشد ) عبارت به کامپايلر که هنگامی باشد باال دستور در test کالس از شيئی s اگر استchar )* s فراخوانی کند، می برخورد s.operator char)(* گردد. می ايجاد

myClass::operator int() const;myClass::operator otherClass() const;

143

Page 144: آموزش زبان برنامه نویسی C++

عملگر دومی و صحيح عدد يک به myClass کالس از شيئی تبديل برای تبديلی عملگر ترتيب به فوق دستور دوکنند. می تعريف otherClass نام با ديگری کالس از شيئی به myClass کالس از شيئی تبديل برای تبديلی

-- و++ های عملگر کردن گرانبار

به. گرانبار را -- و ++ های عمگر توان می C++ در تابع عنوان به ها عملگر اين کردن گرانبار برای کلی طور کردکنيم: می عمل زير صورت به عضو

داده نوع operator++() //++x

{ ...}

داده نوع operator++(int x) //x++{ ...}

داده نوع operator--() //--x{ ...}

داده نوع operator--(int x) //x--{ ...}

کنيم: می تعريف را آنها زير شيوه به ، دوست توابع توسط فوق عملگرهای کردن گرانبار برای و

friend داده نوع operator++( داده نوع &op) //++x{ ...}

friend داده نوع operator++( داده نوع &op, int x) //x++{ ...}

friend داده نوع operator--( داده نوع &op) //--x{ ...}

friend داده نوع operator--( داده نوع &op, int x) //x--{ ...}

144