صفحه 1:

صفحه 2:
‎ad Cr+ @‏ اول : مقدمات زبان ‏فصل دوم : ساختار های تضمیم گیری و تکرا 9 فصل سوم : سایر ساختار های تکرا ‏فصل چهارم : اعداد تصادف ‏9 فصل پنجم : آرایه ها ‏8 فصل هفتم : ساختارها و اشاره گرها ‏© ن شتم : د نامه د ‎a‏ گرا ‎

صفحه 3:

صفحه 4:
۴ عملگر هاى جا محاسبا اولويت عملكرها ‎olx533 (Comments)‏ توایع کتابخانه ‎Cre‏ يرتامه در ‎

صفحه 5:
اين زبان در اوائل دهه ۱۹۸۰ توسط بحاصخد 40-5 در آزمايشكاه بل طراحى ‎oad‏ اين زبان عملاً توسعه يافته زبان برنامه نويسى 0) مى باشد كه امکان نوشتن برنامه‌های ساخت يافته شی گرا را می‌دهد.

صفحه 6:
انون نامگذاری شناسه‌ها حروف کوچک و بزرگ در نامگذاری شناسه‌ها متفاوت می‌باشند. 4

صفحه 7:
انون نامگذاری اسه‌ها ۲) در نامگذاری شناسه‌ها از حروف الفباء. ارقام و زیر خط ۱۳06۲560۲6 استفاده می‌شود و حداکثر طول شناسه ۳۱ می‌باشد و شناسه نبایستی‌با یک رقم شروع گردد .

صفحه 8:
۳ برای نامگذاری شناسه‌ها از کلمات کلیدی نبایستی استفاده نمود. در زیر بعضی از کلمات 0 کلیدی داده شده است.

صفحه 9:
i : i i |

صفحه 10:
در اسلاید بعد به انواع داده ها اشاره می شود.

صفحه 11:
انواع داده ها ۷۷ تا -۱۳۲۷۶۸ ۵ ۰ ۷ 7 - ۱۲۱۳۷۴۸۳۶۳۸ ۵ تا یک کارکتر ۱۲۸-۷ ومج وت ویو 9 تا موه

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

صفحه 13:
چند مثال از اعلان متغیر ها : “” _برای اعلان متغیراز نوع ‎tint‏ tt x; برای اعلان متفیرهای ۶ و 9 از نوع 1031 كه هر كدام جهار بايت از Poa 7, حافظه را اشغال می‌کنند : براى اعلان متغير 06 از نوع كركتر که می‌توان یکی از ۲۵۶ کرکتر را به آن تخصیص داد و یک بایت را اشغال می‌کند" ‎chor went;‏

صفحه 14:
با استفاده از عملگر < می‌توان به متغیرها مقدار اولیه تخصیص در اسلاید بعد مثال هابی از ‎let‏

صفحه 15:
” در دستورالعمل نوع با مقدار اولیه ۲۶ اعلان نموده . در دستورالعمل 0 , ۵000 مسا متغيرهاى داو ف را از نوع« بط تعريف نموده با مقادير بترتيب ۰و دا

صفحه 16:
داده‌های از نوع کرکتر ای نمایش داده‌های از ن ف اتر از برای نمایش داده‌های از نوع -عجاه در حافظه کامپیوتر از جدول 1 استفاده می‌شود. جدول اسکی به هر یک از ۲۵۶ کرکتر یک عدد منحصر بفرد بین ۰ تا ۲۵۵ تخصیص می‌دهد.

صفحه 17:
کامپیلر ‎HO‏ بعضی از کرکترهای مخصوص که در برنامه می‌توان از آنها برای فرمت بندی استفاده کرد را تشخیص می‌دهد. تعدادی از این کرکترهای مخصوص به همراه کاربرد آنها در اسلاید بعد آورده شده است .

صفحه 18:
کرکترهای مخصوص بعنوان مثال از کرکتر [* می‌توان برای ایجاد صدای سس استفاده نمود. ‎joka x= Me‏

صفحه 19:
ها رشته يا يمه عبارتست از دنبالهاى از كركترها كه بين قرار داده مىشود. در حافظه كامبيوتر انتهاى رشتهها بوسيله ۰۱ ختم مى كردد. در اسلا ید بعد به دو ‎peared‏

صفحه 20:

صفحه 21:

صفحه 22:
برای نمایش داد‌ها بر روی صفحه مانیتو از 4 که بدنیال آن عملگر درج یعنی < < قید شده باشد استفاده می‌گردد. بایستی توجه داشت که دوکرکتر < پشت سر هم توسط ۰62+ بصورت یک کرکتر تلقی می‌گردد.

صفحه 23:
مثال % بیای نمایشن پیفام سس تسب بر زوی صفحه نمایش: ۰ زاس اسب >> مه پرای نمایش مقدار متفیر < بر روی صفحه نمایش :

صفحه 24:
دریافت مقادیر متغیر به منظور دریافت مقادیر یرای متفیرها در ضمن اجرای برنامه از صفحه کلید: از اس كه بدنبال آن عملگر استخراج يعنى > > قيد شده باشد می‌توان استفاده نمود.

صفحه 25:
int x; cout << "Enter a number:" ; cin >> x;

صفحه 26:
عملگر انتساب > می‌باشد که باعث می‌گردد مقدار عبارت در طرف راست اين عملكر ارزيابى شده و در متغیر طرف چپ آن قرار گیرد.

صفحه 27:

صفحه 28:
عملگرهای محاسباتی در 0++ پنج عملگر محاسباتی وجود دارد که عبار تند از : % این عملگرها دو تائى مى باشند زیر روی دو عملوند عمل مى نما يند. از طرف ديكر عملكرهاى + و - رامى توان بعنوان عملكرهاى يكتائى نيز در نظر كرفت.

صفحه 29:
در حالتی که هر دو عملوند عملگرهای ۰ ۰۶۰۱ +۰ - از نوع صحیح باشد نتیجه عمل از نوع صحیح می‌باشد. عبارت

صفحه 30:
در صورتیکه حداقل یکی از عملوندهای عملگرهای /۰ ۰-۰۶ + از نوع اعشاری باشد نتیجه عمل از نوع اعشاری می‌باشد. عبارت ‎Yeo‏ ‏9*0 ‏8.0/8 ‏8.00 ‏8.0/8.0

صفحه 31:
در 6++. افزایش یک واحد به مقدار یک ‎Gree ose‏ و و مشابه کاهش یک واحد از مقدار یک ‏متغیر از نوع صحیح را کاهش می‌نامند.. ‎

صفحه 32:

صفحه 33:

صفحه 34:
از عملگرهای ++ و -- می‌توان بدو صورت پیشوندی و پسوندی استفاده نمود. در دستورالعمل‌های پیچیده عملگر پیشوندی قبل از انتساب ارزیابی میشود و عملگر پسوندی بعد از انتساب ارزیابی می‌شود.

صفحه 35:
پس از اجرای دستورالعملهای فوق : پس از اجرای دستورالعملهای فوق :

صفحه 36:
عملگر داد 0 ازعملگرهایکتلئی‌میب اشدو مشخص‌ک ننده تسعداد بسلیت هلئیلسنکه بکتوع دادم اشفا [م )ند مثال : مقدار ۲ نمایش داده مى شود مقدار ۴ نمایش داده می شود.

صفحه 37:
های جا محاسبا برای ساده‌تر نوشتن عبارتها در ۰+46 می‌توان از عملگرهای جایگزینی محاسباتی استفاده نمود.

صفحه 38:
اولویت عملگر رزیابی مقدار یک عبارت ریاضی براساس جدول اولویت عملگرهاانجام می‌گردد. در ذیل جدول اولویت عملگرها براساس بترتیب از بیشترین اولویت به کمترین اولویت داده شده است. پرانتزها عملگرهای یکتابی عملگرهای ضرب و تقسیم و باقیمانده عملگرهای جمع و تفریق عملگرهای درج و استخراج عملگرهای جایگزینی و انتساب O ‏جد‎ sizeof

صفحه 39:
(618) ‏.هب‎ ye با توجه به جدول اولویت عملگرها داریم که (ه*هبی* ج (6+۵)* 06 06 66

صفحه 40:
06ح رمعم ,معط , حدم بج راط * ججمدل >> بعكم >> ل >> بجو

صفحه 41:
توضیحات در برنامه باعث خوانلئی بیشتر و درک بهتر برنامه میشود. بنابرلین توصیه بر آن است که حتی الامکان در برنامه‌ها از توضیحات استفاده نمائیم. در 0++. توضیحات بدو صورت انجام می‌گیرد که در اسلایدهای بعدبه آن اشاره اشده |

صفحه 42:
ضیحات الف: این نوع توضیح بوسیله // انجام می‌شود. که کامپیوتر هر چیزی را كه بعد از // قرار داده شود تا انتهای آن خط اغماض می‌نماید. متال ‎ood b‏ وخ معد ط اعمج عد -الزطجمدم ‏ب:توضيح نوع دوم با /: شروع شده و به #/ ختم مى شود و هر جيزى كه بين* / و / قرار كيرد اغماض می‌نماید ‎

صفحه 43:
زبان 6++ مجهز به تعدادی توابع کتابخانه می‌باشد. بعنوان مثال ‎galas‏ توابع کتابخانه برای عملیات ورودی و خروجی وجود دارند. معمولا توابع کتابخانه مشابه . بصورت برنامه‌های هدف (برنامه ترجمه شده بزبان ماشین) در قالب فایلهای کتابخانه دسته بندی و مورد استفاده قرا رمی‌گيرند. این فایلها را فایلهای سطحح می‌نامند و دارای پسوند .۰ می‌باشند.

صفحه 44:
نحوه استفاده از توابع کتابخانه اء برای استفاده از توابع کتابخانه خاصی بایستی نام فایل سطعح آنرا در ابتدای برنامه در دستور #طعخم قرار دهیم.

صفحه 45:
عا ۱ تعداد کرکترهای رشته 5 تانژانت 0 یی ترا تبدیل به حروف کوچک تبدیل به حرف بزرگ (e tot dovble double double double dpuble dpuble tot double لت ‎tou(d)‏ leaded) vin Gd) vari(d) virlea(e) tau(d) لاطا toupeerle )

صفحه 46:
برنامه در ۵)++ اکنون باتوجه به مطالب گفته شده قادر خواهیم بود كه تعدادی برنامه ساده و کوچک به زبان 0+ + بنویسیم. رای نوشتن برنامهبایستی دستورالعمله را در تابع مهعی() قرار دهیم و براى اينكار می‌توان به یکی از دو طریقی که در اسلایدهای بعد آمده است . عمل نمود. ©

صفحه 47:

صفحه 48:

صفحه 49:
برنامه ای که پیغام عچعجمم| صفحدج ساماد دج ‎te‏ ++) را روی صفحه مانیتور نمایش ss می دهد. حلمم طعادة stot) 1 : "ما عوسيهما احفصت امصزجات مو وا 0+4" >> اوم : 0 مسج 1

صفحه 50:

صفحه 51:
.دو عدد از نوع اعشارى را گرفته مجموع و حاصلضیب آنها را محاسبه و نما یش می‌دهد ss pas ‏بر << بر << وم‎ ‏لمحم‎ بكم زج >> > و >> فص © مجر }

صفحه 52:
فصل دوم ساختارهای تصمیم گیری و تکرار

صفحه 53:

صفحه 54:
های رابطه 1 از اين عملگرها برای تعیین اينكه آيا دو عدد با هم معادلند يا يكى از ديكرى بزركتر يا كوجكتر مىباشد استفاده مى كردد. عملكرهاى رابطهاى عبارتند از

صفحه 55:
عملكر شرطى شکل کلی عملگر شرطی بصورت زیر می‌باشد: عملگر شرطی تنها عملگری در 60++ می‌باشد که دارای سه عملوند می‌باشد.

صفحه 56:
90ص ۱ زمر : ع7 (بجمحم اين دو دستور العمل باعث میشوند که ماکزیمم مقادیر مرو « در ط قرار بگیرد. 3? =00 ? pou << "passed" | pout << "Puled” ; اكر مقدار >< بزركتر يا مساوى ده باشد رشتة لحم در غير اينصورت رشته ‏ لت" نمايش داده ميشود.

صفحه 57:
۳ دستورالعمل شرطی .۰ ‎IB)‏ ‏که توسط این دستور شرطی را تست نموده و بسته به آنكه شرط درست يا غلط باشد عكس العمل خاصى را نشان دهيم. (عبیت )1 م مستورا سل مستورل نملقة 5 ‎else‏ ‏{ دستورا اعمل1 ار مستورا اهمل13

صفحه 58:

صفحه 59:
‎<poreaoh>‏ از جک اس ‎poet)‏ ‏سا ‏:د << وم ‎> 0( at <<" xe ceive” << pod | be ‏{ ‏| نو دم ‎

صفحه 60:
عملگر کاما تعدادی عبارت را می‌توان با کاما بهم متصل نمود و تشکیل یک عبارت پیچیده‌تری را داد. اين عبارتها به از چپ به راست ارزیابی شده و مقدار عبارت ترت معادل عبارتج می‌باشد. 4 عبارت ۳ , عبارت ۲ , عبارت ۱)

صفحه 61:
اگر داشته باشیم ۵عو, عط , ۰26: عبارت زیر را در نظر بگیرید: مقدار عبارت برابر است با 0+6 که معادل ۱۰ می‌باشد.

صفحه 62:
عملگرهای منطقی با استفاده از عملگرهای منطقی می‌توان شرطهای ترکیبی در برنامه ایجاد نمود. عملگرهای منطقی عبارتست از : 00 ‎OR‏ 00 که در 6۵++ به ترتیب بصورت زير نشان داده میشود. && !

صفحه 63:

صفحه 64:
if (x= = 5) ily != 0)) cout << x << endl;

صفحه 65:
ى كرفته مشخص مىنمايد ‎iostream.h >‏ <_— مب ‎int main()‏ ‎{ ‎float a, b, c; ‎cout << “Enter three real numbers" << endl ; cin >>a>>b>>¢; // ‎if((a <b + c) &&(b < atc) &&(c < atb)) cout << “It is a triangle" ; ‎else ‎cout << “Not a triangle" ; ‎return 0; ‎

صفحه 66:
دستورالعمل و از دستور العمل ۲ برای تکرار دستورالعملها استفاده میشود. شکل کلی دستور عو بصورت زیر می‌باشد: (عبارت ۳ عبارت ژ ۲ عبارت ) 80۳

صفحه 67:
ot << "Bolero postive kiewer canober"; ‏ره << وو‎ Por( 4; =u; +4) Poot pout << Past << pod rewaO ; 1

صفحه 68:
ابوتاعة در مرت اد صحیح و متوالی بین ۱ تاه را محاسبه نموده و نمایش می‌دهد. > سا ‎wot)‏ بر { tts, FC; bry = O ; om >> a; احج ع ‎Por(; <0; H+)‏ >> فص

صفحه 69:
2327110 Hoke <petreur-h> ‘et wata( ) { tt FO; Por{ 3 1<=9 ; ) pot << ptt << eek retura O 5 }

صفحه 70:
د می‌شوند را نمایش می‌دهد. جامسه طحة ‎peas )‏ تزا سا Por(i=d; <=O; +4) Por(d; =O; +4) Por{k=; k<=O; ++h) { +۳00 + ۳400و زم << ‎wo <<a‏ } retura O ; 1

صفحه 71:
فصل سوم ساير ساختارهای تکرار

صفحه 72:
فهرست مطالب فصل سوم ۵ دستورالعما ۶ 010 دستورالعه 6216© دستورالعمل 00۶ دستورالعما ‎Switch‏ دستورالعما aw cingeto Silos Static_cast<>0 جدول اولویت عملگرها

صفحه 73:
از اين دستور العمل مانند دستورالعمل « برای تکرار یک دستورالعمل ساده یا ترکیبی استفاده می‌گردد. شکل کلی این دستور العمل بصورت زیر می‌باشد.

صفحه 74:
دستورالعمل 701 زمانی استفاده ميشود كه تعداد دفعات تکرار از قبل مشخص و معین باشد. در صورتیکه تعداد دفعات تکرار مشخص نباشد بایستی از دستورالعمل 1010316 استفاده نمود.

صفحه 75:
tet x=O while(x<S) زج کج << ‎Tal‏ با اجرای قطعه برنامه فوق مقادیر زیر نمایش داده fe :میشود

صفحه 76:
ma it cout = O , g; Poot x, pu =O, wy; /*» تعناد مقامير ورومى */ زه << ويم whde(ooved <0) << وم wn tex} ++ vow | } wy = suo! >: vot << wy << ead; return D ; }

صفحه 77:
دستورالعمل طانب طلء اين دستور العمل نيز براى تکرار یک دستورالعمل ساده پا ترکیبی استفاده می‌شود. شکل کلی این دستورالعمل بصورت زیر می‌باشد. do 1 ز دستورالععل ۱ 5 دستورالععل ۲ + مستور ا همل ‎while( b>);‏ }

صفحه 78:
در دستورالعمل 1811816 ابتدا مقدار شرط ارزیابی شده اما در دستورالعمل 10 10 ابتدا دستورالعمل اجرا شده سپس مقدار شرط ارزیایی می‌گردد. بتابراین دستورالسمل 712116 ‎do‏ حداقل يك بار انجام ميشود .

صفحه 79:
include <iostream. int main() int count = 0; do cout << count ++<<endl ; while(count <= 9); return 0 ; }

صفحه 80:
brody ‏دستورالعمل‎ این دستورالعمل باعث توقف دستورالعملهای تکرار( لابب ط, ‎Por, while‏ شده و کنترل به خارج از این دستورالعملها منتقل می‌نماید. Break

صفحه 81:

صفحه 82:
حاسم ات )سم 1 tet cont 2 0 : ‎٩(‏ )انب ‎{ ‎owt H+; ‏( 40 < سس ‎bredk ; ‎} ‏>> یی >> ۳ : یی >> لور ‎rena ;‏ ‎

صفحه 83:
حا مه طعادة peel) tot ood Pout x, ‏صمح‎ = O; << ود Por(vount = ; x < (DOO . O; ++ vow) ‏سید‎ > 0.0( ) mat << "@rrov — Orquive uch " <<eud; beds; 1 paw t= x; } Dnt << mao << ۳ :[ اف ‎E>‏ ه

صفحه 84:
بوحدية (0.0 > مج 1 :قحم >> "ص0 معيو 0 - س3" >> تجو ا } ‎wo t= x}‏ ‎(OO.0);‏ > )سلب ( :لد >> صمح >> قحو ‎rena Dj}‏ ©

صفحه 85:
دستورالعمل عحفیرر از دستورالعمل صحفسه می‌توان در دستورالعملهای تکرار له ‎Por‏ . طذرید. لب استفاده نمود. اين دستورالعمل باعث می‌شود که کنترل بابتدای دستورالعملهای تکرار منتقل گردد. Continue

صفحه 86:
pao +x; ‏مس(‎ > 0000.0 (: Po << mr; ۱ ‏مم‎

صفحه 87:

صفحه 88:
دستور العمل >اطاسدد همانطور كه مى دائيد از دستورالعمل شرطى (ححاء * مى توان بصورت تودرقو استفاده نمود ولى از طرفى اكر عمق استفادة تو در تو از اين دستورالعمل زياد گردد. درک آنها مشکل ميشود . براى حل اين مشكل 0++ . دستورالعمل امد كه عملا يى دستور العمل جند انتخابى مى باشد را ارائه نموده است. switch 6

صفحه 89:

صفحه 90:
ver 4: val << "owe" << wud; ‏سا‎ pel << "bun" << od; bred ‏:قمع‎ ‎vou << "Pad" << ead; | * ‏ايد ناه لجس‎ */

صفحه 91:
Dt << "Levy Thos Mowe” << red; brook; ver: at << "qd Te Tose" << ed ; bred Pad: Bent << "Brecter Noa Three” << rand; }

صفحه 92:
55200000 ee ‏کلید می‌گیرد. برای استفاده از این‎ ‏تابع در ابندای برنامه بایستی داشته‎ pa Ete tity ‏حطصدم‌طاوموت>‎

صفحه 93:

صفحه 94:
خاممیی.. وه )سم د (ه6 0ه -! ( )سمه - ‎hde((x‏ ‏>> قحم : 0 سم 1

صفحه 95:
:)اس 0 :© ۳ >> ۵00" >> فصو :ی ape 8: pou << “BLOG” << end; bred ; oo | ee;

صفحه 96:
برنامة ذیل یک سطر متن انگلیسی را گرفته کرکترها chor wen; he (cont = ‏)سم‎ ) ) BOP) Pont I=" ") oot <<cend} ‏سم‎ 0 : }

صفحه 97:
52171711007 استفاده مى شود. اين عملكر يك عملكر يكتائى مى باشد.

صفحه 98:

صفحه 99:

صفحه 100:

صفحه 101:

صفحه 102:
تولید اعداد تصادفر ( ]0606 ۲۷) تعریف نوع داده داده های از نوع شمارشی فرمت های مختلفه مقادیر خروج

صفحه 103:
اعداد تصادفی مقادیر تصادفی با شانسی در اکثر برنامه‌های کاربردی در زمینه شبیه سازی و بازد تری نقش مهمی را ایفا می‌نمایند. برای ایجاد یک عدد تصادفی صحیح ب بایستی از تابع له( ) استفاده نمائیم. rand| )

صفحه 104:
( )و بر { )4+ ;00=< :20 و۳ ما << ) ‎vat << romd(‏ © بر }

صفحه 105:
اگر برنامة فوق را چندبار اجرا نمائيم جواب يكسانى را از کامپیوتری‌می گیریم. برای تصادفی کردن اعداد می‌بایستی از تابع 6۲۵190( ) استفاده نمائیم. این تابع به یک آرگومان صحیح از نوع 20510001 نیاز دارد. به این آرگومان 5600 گفته می‌شود. در اسلايد بعد برنامه قبلى رابا تابع 818194() نوشته ايم.

صفحه 106:
0ه >>( ]اج >> نج ‎rows |‏ }

صفحه 107:

صفحه 108:
السب )++ ;00=< ;0 بو( :لحم >> ©. ©6626 / ( الحم << ‎vot‏ © مور }

صفحه 109:
تعریف نوع داده (علسس) از #طحبومی‌توان برای تعریسف نوع داده‌های جدیسد کسه معادل نوع داده‌های موجود باشد استفاده تمود. شکل کلی عبارتست از : نشاندهنده نوع داده موجود

صفحه 110:
حال می‌توان مرو درا بصورت زیر تعریف نمود :

صفحه 111:
داده‌های از نوع شسمارشي بمنظور معرفی داده‌های از نوع شمارشی از کلمه صعجح استفاده می‌گردد. 02 ی کننوع دادم ش مشیم اشد

صفحه 112:
Bann sie {oarted, devorved, vbw, side}; oie Sj ‏]طح عو‎ ‎wore, Ke, wed, ter, Pri};‏ يديج رادج ونوك وجو ‎ae ‎9 00 = ‏<ه‎ ‎

صفحه 113:
بایستی در نظر داشت که داده‌های از نوع شمارشی در عملیات ورودی و خروجی شرکت نمی‌تمایند. بعبارتٍ دیگر مقادیر داده‌های از نوع شمارشی بایستی در برنامه تعیین نمود. دستورالعلهای ورودی و خروجی مانند ‎y cin‏ 60۷01 در مورد داده‌های شمارشی نمی‌توان استفاده نمود.

صفحه 114:
مقدار ۶ بطور غير علمی با نقطه اعشار ثابت نمایش داده می شود. include <iomanip.h> ‎x=10S0 ;‏ طح ‎Dat << peter (or |: Pood | te! : showpont ) << wrte(SO) <<‏ ‎veprevtsir(®) << x << rad ; ‏مر‎ ‏مقدار »با طول میدان ۲۳ نمايش داده می شود. ار »با طول میدان ۲۳ نمایش داده می شود مقدار با دو رقم اعشار نمایش داده می شود. ‏بتابراین مقدار بصورت زیر نمایش داده می شود : ‏شانزده ستون خالی 1090.00 ‎

صفحه 115:

صفحه 116:
gow Sali 1 7 آرایه دو بعدی ( ماتریس ها)

صفحه 117:
آرایه یک بعدء آرایه یک فضای پیوسته از حافظه اصلی کامپیوتر می‌باشد که می‌تواند ,چندین مقدا را در خود جای دهد کلیه عناصر یک آرایه از یک نوع می‌باشند. عناصر آرایه بوسیله اندیس آنها مشخص می‌شوند. در ++ . انديس آراية از صفر شروع می‌شود.

صفحه 118:

صفحه 119:
آرایه یک بعدی از نوع ‎Int‏

صفحه 120:
تخصیص مقادیر اولیه به عناصر آرایه : 14 OKs (@, ©, 8, 07, 00);

صفحه 121:
دریافت مقادیر عناصر آرایه : :[6] م ‎Parlier OD; =P; +H)‏ ‎veo >> [1] 5‏ Parle FD; <=G; +H) cow << aft];

صفحه 122:
گر تعداد مقادیر او tt x9] = (00, 9, 7};

صفحه 123:

صفحه 124:
,6.6 ,0.6 ,000 ,6.6 ,6.6 سا سرا ;}48.8 9 9

صفحه 125:
۱ 0 0 بت : 00 = سوه 4 بسن Pout xf arate], tt = 0.0 ; (+۲ سیک :۳۵ ماو par >> xf i] Por(FO; erretan; i++) Det << setesPe(oet'Pimed toy 2: showpond ) << sets{ 18) << seprevetra(®) << xf 1] << ead; (۳ تسیک

صفحه 126:
ایک اس ‎tet ete )‏ Poa x20], = ‏م‎ )سام ‎Por{ FO; SOO 5 +41) ora >> af 1];‏ :201« (++ تسس متا ‎Ped] <>) 2 =f];‏ ‎eed‏ >> ع >> فح ‎

صفحه 127:
() مس بر { Pet x{(O], ‏تس‎ ‎۳ :ل )حسام For(=O; <dDO; +4) ors >> x{t J; Por(=O; <9; H+) Por(Fr#d ; <0; H+) > :2 مس ۱121 aft] 2 ‏زج‎ } Por(FO; <=0; r++) pot << xf] << ead ‏سم‎ 0 :

صفحه 128:
آرایه‌های دوبعدی (ماتریس‌ها) ماتریسها بوسیله آرایه‌های دوبعدی در کامپیوترنمایش داده ميشوند. int a[3][4]; ٠ ‏ستون ۲ ستون ۲ ستون ۱ ستون‎ OO] AON ‏ات‎ OS] AMO] aia sate] ‏ات‎ ‎ACO] ‏ال‎ Cle] eS]

صفحه 129:
تخصیص مقادیر اولیه به عناصر آرایه : ;})0,00,00,00( ,}0,7,0,©( وت تا

صفحه 130:
‎OIF] { {@, {0,9}, {F,9,9}};‏ م ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎

صفحه 131:
‎AOIP]= )0, ©, ©, ©,.6 (:‏ م ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎

صفحه 132:
‎ps lp ts‏ حبقت رای یک اندیسی ات در مان ‎las a ae dau‏ سوه اس ‎rt of JIPRGC,9,6,9}; ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎

صفحه 133:
۱ eye tee Sed e per ere es حاممصووم> ی رن ] ایک ی ‎total)‏ f Poa xfO][P], wrt= 0.0; ۳ «۹ > مشج صفحدج || Por(=O; <9; +H) Por (FO; <9; r++) :۱ << وم اه اه بمج صما صخلت || (++ ب©> بوعيجم ‎<P; ++)‏ وحيجم ‎«+ 2۱: wnt << “pid = "<< thd << ead ‎

صفحه 134:

صفحه 135:
نوابع درون خط انتقال بارامترها | ارجا ‎wis (Storage classes )‏ های حافظه ‏سرياركذلرى توابع ‎

صفحه 136:
استفاده از توابع در برنامه‌ها به برنامه‌نویس این امکان را می‌دهد که بتواند برنامه‌های خود را به صورت قطعه قطعه برنامه بنویسد. تا کنون کلیه برنامه‌هائی که نوشته‌ایم فقط از تابع هسب( ) استفاده نموده‌ايم.

صفحه 137:
58 5 5 5 مقدار برگشتر شكل كلى توابع بصورت زیر می‌باشند : 0 لیست پارامتر ها جهت انتقال اطلاعات از تابع احضار کننده به تابع فراخوانده شده return-value-type function-name (paérameter- list) 1 declaration and statements تعریف اعلان‌های تابع و دستورالعملهای اجرائی

صفحه 138:
پارامتری از نوع 2ق 7 pte phar bw_b_wy (oho ofl) { vker vO; :لك :( م ۵۵( 0 و ‎(APE‏ = هم ‎rena (c®) :‏ }

صفحه 139:
© سما ‎HA”‏ © )7( د" س> اطق “4 * دج )سوم ‎vets 0;‏ ‎} ‎con ‎hor x x= once) ‎pn <b s(n) ١ ‏ممعم‎ ©: ‎} ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎

صفحه 140:
(۸ مس بر { 2م (0 >=)? V5 سم }

صفحه 141:
‎x , ty)‏ موی بر ‎ne‏ ‎acer py)? xiv; aes ‎} ‏)ميم ‎1 ‎tab; ‏زا <ده << مم‎ ‏:(طه) حصب >> نهر ‏سم ‎b‏ ,3 آرگومانهای‌تلبع مس ‎ ‎ ‎ ‎ ‎

صفحه 142:

صفحه 143:

صفحه 144:
. تبع دیگر احضار می‌گردد بایستی تعریف تابع احضار شونده قبل از تعریف ‎ab.‏ احضار کننده در برنامه ظاهر گردد

صفحه 145:
385 اگر بخواهيم در برنامه‌ها ابتدا تابع 080 ظاهر گردد بایستی ۳0101106 تلبع بعنی پیش نمونة تلبع که شامل نام تلبع. نوع مقدار برگشتی تابع. تعداد بارامترهائي را كه تابع ار دريافت آنرا دارد و انواع بارامترها و ترتیب قرارگرفتن این پارامترها را به اطلاع ‎ils‏ در اسلاید بعد مقالی در این زمینه آورده شده است.

صفحه 146:
ایک یا 0 0 ) تفت ito; pal << "@uler u postive ‏لت >> مس‎ ‏به << وم‎

صفحه 147:
7 BS QS & در صورتی که تابع مقداری بر نگرداند نوع مقدار برگشتی تلبع را ۷۵34 اعلان می‌کنيم. و در صورتیکه تلبع مقداری را درلفت نکند بجای ‎list‏ مامهمتهواز ‎Otvoid‏ ‏استفاده میگردد. در اسلاید بعد مقالی در این زمینه آورده شده است.

صفحه 148:
تابع مقداری بر نمی گرداند. pot << "wax uch lu" << 2<< ead; ‏مور‎

صفحه 149:

صفحه 150:
در اين نوع احضار تابع حافظه‌های مورد استفاده آرگومانها و پارامترها از هم متمایزند و هرگونه تغییر در پارامترها باعستث تفي اك در آرگومنهای متناظر نم ىكردد.

صفحه 151:
۵ ‏رکه‎ ‎QS هر زمان که نوع مقدار برگشتی تابع ‎int‏ ‏می‌باشد نیازی به ذکر ن نیست و همچنین

صفحه 152:
توابع بازگشتی یا 1661115116 توابعی هستند که وقتی احضار شوند باعث می‌شوند که خود را احضار نمایند.

صفحه 153:
نحوه محاسبه فاکتوریل از طریق تابع بازگشتم ۰ .۳6۳ عم اه( 5 0و { درغي رليسويه ‏ میج ۲0 ج)* زهم"* ... *و*ق *0 دام 0 «* ا(مج)دام در اسلايد بعد تابع بازكشتى مورد نظر پیاده سازى شده است. 5 جه ه

صفحه 154:
berg tot ‏)ل حص‎ tnt cata ) { ‏عم‎ ‏جم ” >> نوم‎ > ‏وم‎ << ant << ead <<” Pastore =" << (a) << pod; retura O 5 } pay tot Pastoritdi{int a) P(e<=0) rena); : ( (0> سه" )مم

صفحه 155:
: منیب فسيبناكى ... ,900 , 60 ,09 ,© ,© ,© ,© ,4,0 , ۵ م fled “Plfa)= we رهد )ص رجام در اسلايد بعد تابع بازكشتى مورد نظر پیاده سازى شده است.

صفحه 156:
bry tat Peery fe); // Porwrard dockets oo frag tat rj زم ‎uch ” << ood;‏ ما میج >> فجن ‏<د وم ‏كا ‏لحم >> >> يوم ‏: 0 عم ‏} ‏(۰ ۱۵ و۳۲ ها بسا ‎Moz =a] 0( rete 7; ‎cbr ‎renre( Pr) + Pole) ); ‎

صفحه 157:
seo rove]! Porvoo ‏وعدم‎ ‏)سدم‎ : 0 مس } vord reverse(vord) || ‏لمیر‎ a hoe oP chorwters vad reverse t { زو وان زاس( ۰( ای )۸ زج >> قود

صفحه 158:
استفاده از آرایه‌ها بعنوان پارامتر تبع مجاز است. در اسلايد بعد به يك مثال توجه نمایید.

صفحه 159:
1 2 3 4 5 تب هر تن © لق ماو ‎Porward‏ |/ :( [ ] میلست فد ‎haa‏ rt ofS] : Por(tat RD; <P; +4) vou << of] << ead; ‏ممعم‎ © : 1 ‏لاس‎ wood y(t of [( ۱ ‏مسا ی(‎ { ۳) =O; <9; +4) i<0; +4) Por(FO; vo << of j] << ed; ‏ممم‎

صفحه 160:
در صورتيكه آرايه بیش از یک بعد داشته باشد بعددهاق دومبه يعدا بايسدى دز تعويف تلبع و بيقن نمونه تابع ذکر گودد. در اسلايد بعد به يك مثال توجه نمایید.

صفحه 161:
‎k>‏ رن :(1 119 ] بیج لس = ‎rt of [O19] = ( {8,9}, (9,9);‏ ‎wo F 0,0,9,6,9},‏ ‎SISF (.9,9,¢,9); 279 [JSF (0,0), (} }; ‏مسج‎ ‎} ‎alias 1©[( ‏نا‎ 0: 0; H+) { Por{tt =D; 1605 H+) ‎won << oft i] <<" ‏لجس >> يحم‎ ‎eee000 ‎

صفحه 162:
کلمه 1101186 بدین معنی است که به کامپیلر دستور می‌دهد که يك کپی از دستورالعلمهای تابع در همان جا (در زمان مقتضی) تولید نماید تا از احضار تابع ممانعت بعمل آورد.

صفحه 163:
بجای داشتن تنها یک کپی از تابع . چند کپی از دستورالعملهای تابع در برنامه اضافه می‌شود که باعث بزرگ شدن اندازه با طول برنامه می‌شود. بنابراین از 11011196 برای توابع کوچک استفاده می‌گردد.

صفحه 164:
مثالی از توابع درون خ fickle <petreawh> tober Poot abe(coust Mot») {rete o*s*s; } ‏)سدم‎ 1 طحم سا pia >> wider | mint << ode << rabe(okle) << ead ; retra O 5 } ©

صفحه 165:
تاکنون وقتی تیعی را احضار مى كرديم يك كبى از مقادير آركومانها دربارامترهاى متناظر قرار می‌گرفت . این روش احضار بوسیله مقدار با ۷۵106 11 0811 نامیده شد. در انتقال بارامترها از طریق ارجاع در حقیقت حافظه مربوط به آركومانها و يارامترهاى متناظر بصورت اشتراکی مورد استفاده قرار می‌گیرد. این روش ۳۵2۵۶666 بوط هه ‎Spat‏

صفحه 166:
در ال روش پارامترهائی که از طریق ۲010169006 توظ 6۵11 عمل می‌نمایند در نمونه تابع قبل از نام چنین پارامترهائی از 6 استفاده می‌شود.واضح است که دار تعریف تابع نیز بهمین طریق عمل می‌شود.

صفحه 167:
اه طلسم ‎et VP rte); HI Bor‏ ‎vod rPirees (tot 6( :‏ ‎pos)‏ و اج >> ب ‎BM SS x SC werd <6 cf) Cel SS‏

صفحه 168:
وقتی پارامتری بصورت لاط ‎call‏ ‏0706 اعلان می‌گردد اين بدان معنى است كميا تغيير مقدار لين يارامتر در تلبع احضار شده مقدار آركومان متناظر نيز تغيير مى نمايد.

صفحه 169:
Det <<a << pad <b; Powap( a,b); زط >> اقحس >> ه >> فجن : © مور

صفحه 170:
کلاس‌های حافظه (عصصاه صوصص) متفیرها بدو طریق متمایز مشخص می‌شوند یکی بوسیله نوع (عجبه) نها و دیگری بوسیله کلاس حافظه آنها. نوع متغیر قبلا اشاره شده بعنوان مثال عاطحط.. ۰۳۳۵ ۰.۰۰۱۷ ولی کلاس خافظة يك متغير در مورد طول عمر و وسعت و دامن متغیر بحث می‌نماید. در اسلاید بعد به انواع کلاس حاقظه می پردازیم.

صفحه 171:
automatic static external register

صفحه 172:
automatic متغیرهای تفه در درون یک تابع تعریف می‌شوند و در تابعی که اعلان می‌شود بصورت متغیرهای محلی برای آن تابع می‌باشند. حافظه تخصیص داده ‎uy MM lb patie ay od‏ از اتمام اجرای تابع از بين می رود بعبارت _ ديكر وسعت و دامنة متغيرهاى از نوع 7ه تابعى مى باشد که متغیر در آن اعلان گردیده است.

صفحه 173:
static متغیرهای عفد« نیز در درون توابع تعریف میشوند و از نظر وسعت و دامنه شبیه متغیرهای ع#حفه هستند ولی در خاتمة اجرای تابع. حافظه وابسته به این نوع متغیره از بین نمی‌رود بلکه برای فراخوانی بعدی تابع باقی می‌ماند. در اسلاید بعد به یک مثال از کاربرد این نوع کلاس حافظه می پردازیم.

صفحه 174:
و امه اسلا مه تفلطلی با موی |[ ‎foro tt Pitt) §‏ )سم 1 كم اك حدم pow << rod ( + زک ز0 م۳ ‎rod;‏ << ۳ >> > >> >> قحم ‏:0 جر ‏+ ‎comet)‏ م۳۲ بسا ‎ma 2 4, 620:‏ بسا عبر عدا © +20:0 (6©> سداد ‎

صفحه 175:
external متغیرهای از نوع جع متغیرهلئی هستند که در بیرون از تولبع اعلان میشوند و وسعت و دامنه فعالیت آنها کلیه توابعی می‌باشد که در زیر دستور اعلان متفیر قرار دارد. در اسلاید بعد به یک مثال از كاربرد اين نوع كلاس حافظه می پردازیم.

صفحه 176:
یه طیاب# ۱ ‎Pucntalfet 2, tot)‏ { اس >> قحم ‎wexty;‏ ‎Dent << wud << ws << echt;‏ بل مج } est) Dat << pad <p << ead >> ‏سس >> قحس >> ل‎ rewraO ; }

صفحه 177:
register وقتی متغیری از نوع ضيح اعلان می‌شود از کامپیوتر عملا درخواست می‌شود که به جای حافظه از یکی از رجیسترهای موجود استفاده نماید.

صفحه 178:

صفحه 179:
سریارگذاری توابع (عفعطصه سح در 6++ این امکان وجود دارد که دریک برنامه بتوانیم از چند توابع هم نام استفاده نمائیم مشروط بر این که پارامترهای این توابع متفاوت باشند. (از نظر تعداد پارامتر و یا نوع پارامترها و ترتیب آنها)

صفحه 180:
0 ‏عه سام‎ : i); et iP (t,t); اس : لحم روح م : م 6ل سم pat << ukF(a, b) << ead; pot << ak Pd, b) << rod; rena ; } kt ok (ct, ty) { rota ty | } Pou uxkF (Pou x, mtv) {

صفحه 181:
ساختار ها و اشاره گرها

صفحه 182:
ها ‎Union‏ ‏( 20166 ) اشاره كرها تعريف آرايه آرایه هاى دو بعدى و اشاره كرها ‎new )‏ حافظه بصورت يويا ( ‏شته ها و توایع مربوطه ‎

صفحه 183:
ساختارها ساختارها شبیه آرایه‌ها بوده بدین صورت که یک نوع داده گروهی است که فضای پیوسته از حافظه اصلی را اشغال می‌نماید. اما عناصر ساختار الزاماً از یک نوع نمی‌باشند بلکه اعضای بیک ساختار می‌توانند از نوع‌های مختلفه از قبیل ۰ ‎phew‏ ‏لط. ۳ . ... باشند.

صفحه 184:
نام ساختار struct time { int hour ; // 0 - 23 0 int minute ; // 0 - اعضا ساختار 59 int second; // 13 5

صفحه 185:
ساختار 30001001 دارای چهار عضو می‌باشد. ‎CoA‏ شطيه حسابيز نوع 6ط 0 Toy 0000# name ser yeep Meee Cnt

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

صفحه 187:
به ساختارها می‌توان مقدار اولیه نیز تخصیص داد wood mst = (PESO, ‘Duder Dudert” , PESC.S};

صفحه 188:

صفحه 189:
عج_س. بصه ‎vast woe = “Duder Daderi”‏ ‎rast. base 2 0‏

صفحه 190:
: نکته عضو یک ساختار خود می‌تواند یک ساختار دیگر باشد. struct date { int month; int day; int year; 1 struct account { int acc_no ; char acc_typer; char name[80]; float balance ; date lastpay ; }; اگرداشته باشیم ‎account x, y;‏ آنگاه عضو 1351۳۵57 بوسیله x.lastpay.day x.lastpay.month x.lastpay.year

صفحه 191:
: نکته می‌توان آرای‌ای تعریف نمود که هر عضو آن یک ساختار باشد و حتی بهآنها مقادیر اولیه تخصیص نمود. مسحت اماع char rae PO]; rt pad; tp; } 5 ereloredl JF {"askr”, GOO , ۵000, ‏,"و"‎ FOOO, OOO, ‏مهو"‎ , 9۳00, 000, “pares”, POOD , OOOO, };

صفحه 192:
Plot bi dos vy a ‎vowplex anobers” << wad;‏ © جح" >> نو ‎j‏ اههد << وت ‎vot << ead ‎pir >> pia >> yb; ‏+ ود ‎abe xbt pb; ‎ont << pad >> ‏ورد‎ >> ۲ “<<zb; ‏© مور ‎1 ‎+16 12-7 ‏بطوييكه‎ ‏ماج دود‎ Hy (ate) 164d) ‎

صفحه 193:
‎ee ee ol‏ فلوتكه عضوهللی‌که ت-شکیل010 11193 میدهد همگواز حافظه مشترکیدر ‎rrr taco eee apr ane eee Ee‏ ‏صرفه‌جینیدر حافظه مسر ‎

صفحه 194:
هر کدام از متغیرهای »رو لا بیک رشته ۱۰ کرکتری با یک مقدار از نوع ‎int‏ ‏می‌باشدد وکامهیهترییک بلوک حاقنه که بتواند رشته ۱۰ کرکتری رادر خود جای دهد .برای00102 و 5326 در نظر می‌گیرد.

صفحه 195:

صفحه 196:
اشاره‌گرها (عصده۳)) داده‌هانی خه در حامپیوتر در حافظنه اصلی ذغیره بایت‌های متوالی از حافظه بسته به نوع 0212 اشغال مى كثند. 0 ۸ ۲۱۳۷۳۸۳۶۲۸ یک کارکتر وهیجو تا وهیعم4 0 تا 66۵09

صفحه 197:
اشاره‌گرها (عصده۳)) با داشتن آدرس داده در حافظة اصلی می‌توان براحتی به آن داده دسترسی پیدا نمود و از طرف دیگر آدرس هر داده در حافظه آدرس بایت شروع آن داده می‌باشد. int x = 61.

صفحه 198:
نکته در کامپیوتر آدرس‌ها معمولاً دو بایت اشغال می‌نمایند. اگر آدرس >«را در «م قرار دهیم آنكاه مى كوثيم كه »م به >« اشاره می‌نماید.

صفحه 199:
26 حال اكر دستور العمل 10 -+ 6 زرا بدهیم: 36 حال اگر دستورالعمل 7 + 0* < 01 ز بدهیم. 43

صفحه 200:
آرایه یک بعدی و اشاره گرها اولین عنصر آرایه بوسیله 201 مشخص می‌شود. آدرس اولین عنصر آرايه بوسيله 010184 يا بوسيله > مشخص می‌شود. آخرس 1امين عنصر آرايه بوسيله :613-136 يا بوسيلة 3401-1 مشخص می‌شود. دو دستورالعمل زير با هم معادلند . 5 - [11]ء: ‎de‏ + 6 1۸۲.۵۰ از طرف دیگر اگر داشته باشیم 1101 11021 ‎jfloat *p‏ دو دستورالععل زیر معادلند. 21 دمر 2+ عوز و ه ۵ ۵ 5 ۵ ۵ ۵0

صفحه 201:
ساختارها و اشاره گرها می‌توان اشاره گری را تعریف نمود که به اولین بایت یک ساختار (معمهعا اشاره نماید. struct strucl

صفحه 202:
ارایه‌های دویعدی و اشاره‌گرها يك آریه ویمدی بسورت تعما‌ي آریه نک بعدی من تون عریق عومد اگر « یک ماتریس ۵ سطری و ۴ ستونی از نوع اعشاری باشد قبلاً اين ماتریس را با joa xf] معرفى كرديم. حال با استفاده از اشاره‌گرها بصورت زیر معرفی نمائیم:

صفحه 203:
آرايه يك بمدى اول آرايه يك بعدى دوم آرایه يك يعدى سوم آرايه يك بعدی چهادم آرایه یک بعدی پنجم

صفحه 204:
و حاص ‎١‏ طعادة ‎ae )‏ kt xf (00, 89, ©, 09, 400); ‏:)حسام‎ tet "pax; انام آيليه بدو نديس لشايه به عنصر ایل‌آرلیه میسمابدا| ‎Porta HO; <=; r++)‏ Dent << *(ct) << eed; Uke sevoed ‏لاس‎ Por; <0; ++) >>[ >> فص ساب لد | ‎ree; +4)‏ رسیم ‏>>[ ]مس >> فصو ‏اس ۳۷ ۱ ‏)+ اس را الم( >> فص ‏( :0 سم ‎G ‎=> ‎

صفحه 205:
از عملكر ‎ely ce‏ تخیصیص حافظمبه صورت بويا dynamic memory allocation

صفحه 206:
۳2 به اولین داده از نوع 3108 اشاره می‌نماید. +تاو ب» 1 +ألمیرعنصراز فضای ی یوسته لشایه می‌ماید.

صفحه 207:
ا راعشخص و نمایش می‌دهد. 0 )سدم 1 م ;0.0 = ينوم" مح قجس >> > و سین جح >> مج << مم :[-] حاط سصمحوم + يدكر زوع مجم إل + سوم" << وم 0 ما هيت 0) Por (=O; ‏زه بكم‎ wits "pr +); pant << teh; U sx order © Prov be ope we cee] prs renee O;

صفحه 208:
0 ”م ‎oot <<" how oxny records?‏ ‎ma >> 0;‏ زاس سح > ۲ ‎Port =O; <0; +4) {‏ > >> (إسا<- (جهم))>> دجم : ام >> (6 .0ل كو بإزه عوم)")>> فود ‎bbe [re‏ [: 0 سیب G =>

صفحه 209:
0 ۳ ail Pou ub; ia >> a >> b; pn <u << wad ‏ام > با ک>‎

صفحه 210:
char name[ ]= ” sara’;

صفحه 211:
رشته و اشاره گر هر رشته از طریق اشاره‌گری به اولین کرکتر آن در دسترس قرار می‌گیرد. آدرس یک رشته. آدرس کرکتر اول آن می‌باشد. به رشته‌ها می‌توان مقداراولیه تخصیص داد. char *name =” sara’;

صفحه 212:
۱ حيصي نا ([ ]اه لس )سيم { ‎char Yow] = ("rare “rook”, bubck, “eons”, “oa”‏ اجه له لوف ا نو مب رم رهم مسج ‎ced,‏ >> [ ]سس >> بجر :0 سم حمم ام (0 <(: اس ‎eons‏ ‎the two srt‏ مت ۲ اعسوم ]سس > [ ]عمد :۶۱ [۱ ]سس [ :میم اف >

صفحه 213:

صفحه 214:
رشته‌های 51 و 52 رابا هم مقایسه نموده اگر 51 برابربا 52 باشد مقدار صفر و اگر رشته 91 کوچکتر از رشته 52 باشد یک مقدار منفی در غیر اینصورت یک مقدار مثبت برمی‌گرداند.

صفحه 215:
اکرکتر از رشتذ 81 رابا «كركتر از رشتة 82 مقايسه نموده در صورتيكه 1 کوچکتر از 52 باشد یک مقدار منفی, اگر 51 مساویبا 92 باشد مقدار صفر در ‎pad‏ ایتصورت یک مقدار مثبت برمیگرداند.

صفحه 216:
دو رشتة 51و 52 را بعنوان آرگومان گرفته رشتة 52 رابه انتهای رشتذ 51 اضافه می‌نماید. کرکتر اول رشتة 52 روی کرکتر پایلنی "۱0" رشتة 91 نوشته مى شود ونهايقاً رشتة 51 را برمیگرداند.

صفحه 217:
دورشته 951 52 ومقدار صحيح و مثبت هرا بعنوان آركومان كرفته. حداكثر م رشتة 91 کپی می‌نماید. اولین کرکتر رشته 52 روی كركتر يايانى “70 رشتة 51 مىنويسد ونهايتاً مقدار رشتة 51 را برمیگرداند.

صفحه 218:

صفحه 219:

صفحه 220:

صفحه 221:

صفحه 222:
ای ام وت رشته‌ها بایستی حتماً در ابتدا برنامه ‎<include <string.h+‏ ,| reels

صفحه 223:
:( )ساد vat << siren oll, 9) << ved Dat << sraxnp(oll, 29, P) << wad ; rena O;

صفحه 224:

صفحه 225:
( 4اه , [اه میاه بت { زعم ( إناد-لاع) حص ‎(of+4]="0" )‏ ® :0 مر :(2]]0) مسج }

صفحه 226:
5 1 هنت برنامه نویس شی گرا

صفحه 227:
ae MY ست مطالب pif igi dad jiu, uz (polymorphism) ‏خاضیت ارت بت‎ ans, (stack) ssl all slat ‏ان ات اشاره گنه‎ ‏توایع سازنده پازامتر دا اشاره گر حل‎ ‏توابع سازنده یک پارامترع . توابع مجازی و پلی مرفیسم‎

صفحه 228:
برنامه نویسی شی گرا یا 0010 یک روش جدید برنامه نویسی می‌باشد که در آن از ویژگی ساختیافته همراه با چند ویژگی‌های قوی جدید استفاده آن برنامه نویسی 67++ امکان استفاده از 00 را به راحتی فراهم می‌نماید.

صفحه 229:
در 00 , بطور کلی مساله به تعدادی زیرگروه قطعات ‎code «.‏ تبدیل به 136 ها با واحدهائی می‌شود که 09685 (با اشیام ناهیده میشوند.

صفحه 230:
تمام زبائيهاى برنامه نويسى شىكرا داراى سه خصوصيت مشترک زیر می‌باشند (jl+)9.04) encapsulation sit (42) polymorphism :— (s»©;) imheritance:c

صفحه 231:
محصورسازى (وصنداد د22 2 ) محصورسازی مکانیزمی است که ‎roe‏ 9 4ك را بهم وصل نموده و هر دوى آنها را از استفاددهاى غیرمجاز مصون نگه می‌دارد. شی یک مولفه منطفی است که 40 و طعمت را محصور تموده و طحم باعث دستکاری و پردازش تفه می‌شود.

صفحه 232:
چند ریختی مشخصه‌ای است که بیک وسیله امکان میدهد که باتعدادی .از سیستمها یا عمیات یا دستگاههاء مورد استفاده قرار گیره

صفحه 233:
ارث بری فرآیندی است که بوسیله آن یک شی (]01[66) می‌تواند خاصیت‌های شی دیگری را دارا شود.

صفحه 234:
بوک ات میکود یک عصر از بشته اج کرد

صفحه 235:
بمنظور ایجاد یک شی بایستی از کلسة رزروشده 255 استفاده نمود. 01855 از نظر ظاهر شبیه ساختار یا 503120 می‌باشد. پشته را بعنوان یک ‎object‏ می‌توان در تظر گرفت که ۸8 تن شامل یک آرلیه ویک 805 و عملیاتی که روی اين 01668 انجام مى شود عبارتست از .711519 ‎os initialize .pop‏ در اسلاید بعد مثالی از نحوه ایجاد شی آورده شده است. از نحوه ایجاد شی آور

صفحه 236:
بدین معنی است که »ماو 0 9110 ۷ 5 يوسيله توابعى كه عضو | 060 نباشند غير قابل ۷ دسترسی هستند. وان یکی از سس شترتی هستند وین یکی از ‎Sr‏ ‎ee‏ 91ج kf toy; بدين معنى انست که بوسیله سایر ‎vai),‏ قطعات برناصسه قابسل دسسترسی ز(۱ 0اه لس پاش :( )سم مر

صفحه 237:
فقط تولبع عضو می‌توانند به متغیرهای عضو از نوع مه دسترسی داشته باشند. بایستی توجه داشت که اگر نوع عضوی مشخص نگردد آن عضو به صورت اتوماتیک مهم مى باشد. Private

صفحه 238:
vord ‏)اس : : اناد‎ i) 1( ©6112 - د دوم :”دخا د معا" >> مج تم } stck|be]= 1; tow ++; عملگر:: مشخص می‌نملید که تبع متعلق‌به کدام 010[66 می‌باشد. عملگر : : عملگر ‎SCOpe resolution‏ نامیده می‌شود.

صفحه 239:
مج اه ‎‘peck wf, 9; || rete te‏ ‎wok‏ سای ‎rare)‏ ‎

صفحه 240:
ارث بری فرآیندی است که بوسیله آن یک شی (]01[66) می‌تواند خاصیت‌های شی دیگری را دارا شود. در اسلاید بعد مثالی از ارث بری آورده شده است.

صفحه 241:
:ال در روبرو جنات اى بنام ساختمان يا دشح تعريف كرديدة اسث. هر ساختمان دارای تعدادی اطاق. تعدادی طبقه و سطح زیر بنا نیز مي‌باشد: از طرف دیگزتوایعی که بزاق شي تغزیف شده حال ناه ديكرى بنام «صحط تعریف می‌نمائيم کهنه تنها دارای تعام اعضای شی پ«فح می‌باشد بلکه دارای دو اقلام داده افلفی و چهار تابع اضافی می‌باشد. دراینجا عملاً شى «صحط از شی یط ارث می‌برد :

صفحه 242:
در مثال قبل بجقفط را ععاه و ها را جعاه ‎Atel ga dered‏ . شی عصحا تمام اعضای بجقفط را دارا است بعلاوه اينکه دارای متغیرهای عضوی اضافی عف ۰ سس و همچنین توابع عضوی سب .)فا .داح _مانیز می‌باشد. . Inheritance.

صفحه 243:
سازنده‌ها و نابودکننده‌ها (عصسط اجه عصسصسسس] ‎bab! til, — Initializatio‏ صوردتماتیکاز طریوتلبعیلنجام ‎QU gol aij waits L constructor elit. oh.‏ مخصوصیسنکه عضوواز ک الب وده و همام ‎ASL LS Li‏ ‎

صفحه 244:
سازنده‌ها و نابودکننده‌ها (عصسط اجه عصسصسسس] ‎Joc Se. destructor bois opt alt‏ تلبع سازنده را انجام می‌دهد. وقتی که شی‌ای از بين می‌رود بصورت اتوماتیک تلبع نابود کننده آن فراخوانی می‌گردد. ‎

صفحه 245:
با استفاده از کلمة 83101901 لین امکان وجود دارد کهبه تابعی که عضو کلاس نمی‌باشد اجازه دسترسی به متغیرها: ‎Wai Jy ssf) oe private‏ تابعی را دوست اعلان نمائیم از کلمه ‎Ld friend‏ از تعریف تلبع استفاده مى نمائيم. در اسلاید بعد مثالی آورده شده است.

صفحه 246:
0 0 ) سارت سار ۳ rib: :ل سات )سعد ‎Petra it‏ :1ك ,1 هلوس ‎word‏ 3 | :: obra, ei)

صفحه 247:
۱-کلاسی که از کلاس دیگر ارت می‌برد. توابع دوست آن کلاسس را به ارث نمیبرند.بعبارت دیگر یک 61255 8023700 . توبع 0 3 ۲-نوایع دوست دارای مشخصه نوع ذخیره نمی‌باشند یعنی ‎AND‏ ‏دوست را نمی‌توان بصورت ]هنک با 036107021 تعریف نمود.

صفحه 248:
باشد . در چنین وضعیتی تابع دوست به اين امكان وجود دارد كه يك كلاس دوست كلاس ديكرى رچنین ‎sla‏ تعريف شده در كلاس ديكر دسترسى دارد. كليه اسامى وعدم تعريف شده در Friend Class در اسلاید بعد مثالی آورده شده است.

صفحه 249:

صفحه 250:
امکان انتقال آرگومانها به تولبع سازنده وجود دارد. معمولاً از اين ‎See‏ براى تفه نمودن شسی در زمان ایجاد آسن اسستفاده دد. در اسلاید بعد مثالی آورده شده است.

صفحه 251:
امک یاب # خاک عبات ) امه ام و با : ام wovckwn (tet t, tot) fe = 5 v=) ae ) foo << << ee <<; } 1

صفحه 252:
توا 5 حاممصوم> ‏ طعادةة ی رن ] سس پیب م ريح ( سس ‎a x}‏ ( )سب بر رابه ۱066 منتقلك ناا ده (( )تاه << ‎vow‏ ‏© عبر

صفحه 253:
اگر عضو داده‌ای بصورت 582830 اعلان گردد این بدین معنی است کد کامپیلر فقط یک کبی از متغیر مذکور را نگهداری نموده و تعام ۵6 [و ها بایستی بصورت اشتراکی از آن كبى استفاده نمايند. براى ايتكار می‌بایستی از کلمه 5286 قبل از اعلان عضو استفاده تمود. در الايد يعد مثالی آورده شده است.

صفحه 254:
)دم زو ‎howd‏ ‏0ص هد // :(0,0)سدم rorkou{ i vise PP); I oben * ‏)سداس ير‎ ( ز( )سید er", p>

صفحه 255:
می‌توان یک کلاس را در یک کلاس دیگر تعریف نمود. آمابعلت اینکه در 6++ براي کلاسها خاصیت ارث بری وجود دارد نیازی معمولاًبه تعریف نمودن یک کلاس در کلاس دیگر نیست Nested Classes

صفحه 256:
وقتی که کلاسی در درون یک تابع تعریف می‌شود این کلاس فقط برای آن تابع شناخته شده است و برای تولبع دیگر ناشناخته می‌باشد. چنین کلاسی را کلاس محلی می‌نامند. Local Classes

صفحه 257:
در مورد کلاسهای محلی رعایت نکات زیر ضروری است : تمام توابع عضو بايستى در درون كلاس تعریف گردند. از متغیرهای محلی. تابعی که کلاس در آن تعریف شده نمی‌تواند استفاده نماید. از متغیرهای عضوی هه نمی‌توان استفاده نمود.

صفحه 258:
استفاده از ها بعنوان پارامترها از اه ها می‌توان بعنوان پارامترهای توابع استفاده نمود و مکانیزمانتقال آرگومانها و پارامترها بصورت ‎by cher‏ قد مى باشد.

صفحه 259:
در اسلاید بعد مثالی آورده شده است.

صفحه 260:
frevkee <pereuw.k> ‏اب سار‎ ) :ال ا( { ‎ward set_ Act a)‏ (: سس ( )رصم k ‏میا از[ سیخ ماوت‎ os bet ee) ‏امه‎ b= Pe) vat << obaptt( ) << ead ‏ممصم‎ ©

صفحه 261:
انتساب اشیاء (مسنسه سسوم در اسلاید بعد مثالی آورده شده است.

صفحه 262:
] ‏ی وس‎ <petrrow.h> # ‏اه‎ > ‏امن سا‎ tt rable: ‏لح‎ 4 3) (xi) st ett) frenrart} eee wocken obfl, ob; )128( باه b= offi; If cas cess Prow ob ob ‏)ضام‎ (: اسم >> rer ©: }

صفحه 263:
در اسلاید بعد مثالی آورده شده است.

صفحه 264:
حامس طادة حاصحه طبادة ارت اد 0300 bbe: vord eet it) (ii) ‏لصم ( ارس‎ at) ‏:)سا‎ worker bf]; a ۱ ob Art); Por (=O; <2; H+) ‏قعص >> ( )راس .[؛ إنام >> جو‎ ‏ممم‎ 0: 1

صفحه 265:
در اسلاید بعد مثالی آورده شده است.

صفحه 266:
0 troche <oocte hk ‏ام سار‎ tt; bbe: ‏)عم‎ ( {=O;} ‎i) {i}‏ )سام ‎te) {rena}‏ ‎k ‏م‎ --) ‏-[ق]ط وساسد‎ )0, ©, ©(: ‏:م" سرت ‏العم >> ( )راس <-م >> فصو اانا جد ‎p++; Il pond‏ ‎

صفحه 267:
در اسلاید بعد مثالی آورده شده است.

صفحه 268:
للم معد () حرص لد اووس سا اقا مود bi > ud = hy > ud *he > by } ( ای بر )10.7.0 ,0 ,40.8 (9 ,© )سم >>( )سروب > مج ‎pur ) <<‏ ] :7ه >>( )سم ورد >> مج ( :0 مس

صفحه 269:
تابع مجازی, تابعي است که در ‎base class‏ تعریف شد و بوسیله 01855 16115760 تغیر داده ميشود. برای اعلان یک تابع مجازی بایستی از کلمه ۷1۲1281 استفاده نمائیم. تغیر تابع در کلاس مشتق روی تابعی که در کلاس پایه ‎(hase class)‏ تعریف شده انجام می‌شود. در اسلاید یعد مثالی آورده شده است.

صفحه 270:
خلسسسه یسم ‎thew bor‏ rie raed ‏لع‎ re Hert $6" rr Pe)” 2 sha etal bbs awe ‏عم‎ )<< *) سح ما ایس عام ” >> قحا ( سخا لمم 3 haw drt ‏]سس تالم‎ 537 0 ‎wend")‏ ( اماب تسوت تسوت مسر ‎bows‏ مسجت( مج تست تمس از ‏اس ‏( اس حاسمت سست ‎Pe‏ > تست تس ‎2, ‎osteo ker treet‘) ‎

صفحه 271:

فهرست مطالب C++فصل اول :مقدمات زبان فصل دوم :ساختار های تصمیم گیری و تکرار فصل سوم :سایر ساختار های تکرار فصل چهارم :اعداد تصادفی فصل پنجم :آرایه ها فصل ششم :توابع فصل هفتم :ساختارها و اشاره گرها فصل هشتم :برنامه نویسی شی گرا فصل اول مقدمات ++C فهرست مطالب فصل اول .1تاریخچه مختصر .2قانون نامگذاری شناسه ها .3متغیر ها .4اعالن متغیر .5تخصیص مقادیر به متغیر .6داده های از نوع کرکتر .7کرکتر های مخصوص .8رشته ها .9نمTایش مقادیر داده ها .10دریافت مقادیر .11 .12 .13 .14 .15 .16 .17 .18 .19 عملگر انتساب عملگر های محاسباتی عملگرهای افزایش و کاهش sizeofعملگر عملگرهای جایگزینی محاسباتی اولویت عملگرها ) (Commentsتوضیحات توابع کتابخانه C++برنامه در تاریخچه مختصر ++C این زبان در اوائل دهه 1980توسط Bjarne stroustrupدر آزمايشگاه بل طراحي شده .اين زبان عم ً ال توسعه يافته زبان برنامه نويسي Cمی باشد كه امكان نوشتن برنامه‌هاي ساخت يافته شئ گرا را مي‌دهد. قانون نامگذاري شناسه‌ها )1 حروف كوچك و بزرگ در نامگذاري شناسه‌ها متفاوت مي‌باشند. بنابراين Xy ، XY ، xY ، xyچهار شناسه متفاوت از نظر ++Cمي‌باشد. قانون نامگذاري شناسه‌ها )2در نامگذاري شناس1ه‌ها از حروف الفباء ،ارقام و زي1ر خ1ط ()underscore1 اس1تفاده مي‌شود و حداكث1ر طول شناس1ه 31مي‌باش1د و شناس1ه نبايس1تيب1ا يك رقم شروع گردد . قانون نامگذاري شناسه‌ها در زير بعضي از كلمات.) براي نامگذاري شناسه‌ها از كلمات كليدي نبايستي استفاده نمود3 .كليدي داده شده است And Sizeof then xor Template Float False Friend While continue extern Private Switch Default Const delete typedef if this Virtual keywords and alternative tokens. asm enum protected typedef auto explicit public typeid bool extern register typename break false reinterpret_cast union case float return unsigned catch for short using char friend signed virtual class goto sizeof void const if static volatile const_cast inline static_cast wchar_t continue int struct while default long switch xor delete mutable template xor_eq do namespace this or_eq double new throw not dynamic_cast operator true bitand else private try and_eq bitor not_eq compl And -- or متغيرها متغير ،مكاني در حافظه اصلي كامپيوتر مي‌باشد كه در آنجا يك مقدار را مي‌توان ذخيره و در برنامه از آن استفاده نمود .قانون نامگذاري متغيرها همان قانون نامگذاري شناسه‌ها مي‌باشد. در اسالید بعد به انواع داده ها اشاره می شود. انواع داده ها حافظه الزم مقادير نوع داده 2بايت 32767تا –32768 ‏int 2بايت 65535تا 0 ‏unsigned int 4بايت 2147483647تا –2147483648 ‏long int 4بايت 4294967295تا 0 ‏unsigned long int 1بايت يك كاركتر ‏char 1بايت 127تا –128 ‏unsigned char 4بايت 3.4e38ت11ا 1.2e-38 ‏float 8بايت 1.8e308ت11ا 2.2e-308 ‏double اعالن متغیرها قبل از آنكه در برنامه به متغيرها مقداري تخصيص داده شود و از آنها استفاده گردد بايستي آنها را در برنامه اعالن نمود . در اسالید بعد مثال هایی از اعالن متغیر ذکر شده است. چند مثال از اعالن متغیر ها : براي اعالن متغير xاز نوع : int ;x ‏int برای اعالن متغيرهاي pو qاز نوع floatكه هر كدام چهار بايت از حافظه را اشغال مي‌كنند : ;float p , q برای اعالن متغير nextاز نوع كركتر كه مي‌توان يكي از 256كركتر را به آن تخصيص داد و يك بايت را اشغال مي‌كند. ;char next تخصيص مقادير به متغيرها با استفاده از عملگر = مي‌توان به متغيرها مقدار اوليه تخصيص نمود. در اسالید بعد مثال هایی از اعالن متغیر ذکر شده است. مثال : در دستورالعمل نوع intبا مقدار اوليه 26اعالن نموده . ‏X ; int x=26را از ;long a=67000 , b=260 در دستورالعمل متغيرهاي bو aرا از نوع long intتعريف نموده با مقادير بترتيب 260و .67000 داده‌هاي از نوع كركتر براي نمايش داده‌هاي از نوع charدر حافظه كامپيوتر از جدول ASCIIاستفاده مي‌شود .جدول اسكي به هر يك از 256 كركتر يك عدد منحصر بفرد بين 0تا 255تخصيص مي‌دهد. كركترهاي مخصوص كامپيلTر ++CبعضTي از كركترهاي مخصTوص كه در برنامTه مي‌توان از آنهTا براي فرمTت بندي اسTتفاده كرد را تشخيص مي‌دهد .تعدادي از اين كركترهاي مخصTوص بTه همراه کاربرد آنهTا در اسTالید بعد آورده شده است . ي مخصوص6كركترها \n Newline \t Tab \b Backspace \a Beep sound \” Double quote \’ Single quote \0 Null character \? Question mark \\ Back slash beep مي‌توان براي ايجاد صدايa\ بعنوان مثال از كركتر .استفاده نمود ; char x = '\a رشته‌ها رشته يا stringعبارتست از دنباله‌اي از كركترها كه بين " " قرار داده مي‌شود .در حافظه كامپيوتر انتهاي رشته‌ها بوسيله \ 0ختم مي‌گردد. در اسالید بعد به دو مثال دقت نمایید. مثال : 1 " "BOOK STOREيك رشته ده كركتري مي‌باشد كه با توجه به كركتر \ 0كه به انتهاي آن در حافظ ‌ه اTضافه مي شود جمعــاً يازده بايت را اشغال مي‌كند. مثال : 2 دقTت نماییTد کTه " "wيك رشتTه مي‌باشTد كه دو بايت از حافظTTه را اشغال مي‌كنTTد در حاليكه ' 'wيك كركتTTر مي‌باشد كه يك بايت از حافظه را اشغال مي‌نمايد. نمايش مقادير داده‌ها براي نمايش داده‌ها بر روي صفحه مانیتور از coutكه بدنبال آن عملگر درج يعني << قيد شده باشد استفاده مي‌گردد .بايستي توجه داشت كه دوكركتر < پشت سر هم توسط ++Cبصورت يك كركتر تلقي مي‌گردد. :مثال براTی نمایش پيغام good morningبر روی صفحه نمایش : ;"cout << "good morning برای نمایش مقدار متغیر Xبر روی صفحه نمایش : ; cout << x دریافت مقادیر متغیرها بTه منظور دريافت مقادير براي متغيرها در ضمن اجراي برنامTه از صTفحه كليد ،از cinكه بدنبال آن عملگر استخراج يعني >> قيد شده باشد مي‌توان استفاده نمود. : مثال int x; cout << "Enter a number:" ; cin >> x; عملگر انتساب عملگر انتساب = مي‌باشد كه باعث مي‌گردد مقدار عبارت در طرف راست این عملگر ارزيابي شده و در متغير طرف چپ آن قرار گيرد. مثال : ;x=a+b ; x=35 ; x=y=z=26 از عملگرهاي انتساب چندگانه نيز مي‌توان استفاده نمود .که مقدار سه متغير zو yو xبرابر با 26 ميشود. عملگرهاي محاسباتي در ++Cپنج عملگر محاسباتي وجود دارد كه عبارتند از : + جمع - تفريق * ضرب / تقسيم % باقيمانده اين عملگرها دو تائي مي‌باشند زيرا روي دو عملوند عمل مي‌نمايند .از طرف ديگر عملگرهاي +و – رامي‌توان بعنوان عملگرهاي يكتائي نيز در نظر گرفت. مثال : 1 در حالتي كه هر دو عملوند عملگرهاي – ، + ، * ، / ، %از نوع صحيح باشد نتيجه عمل از نوع صحيح مي‌باشد. نتیجه عبارت 7 2+5 10 5*2 3 5–2 1 5%2 2 5/2 مثال : 2 در صورتيكه حداقل يكي از عملوندهاي عملگرهاي + ، – ، * ، /از نوع اعشاري باشد نتيجه عمل از نوع اعشاري مي‌باشد. نتیجه عبارت 7. 0 2+ 0 .5 10.0 5* 2. 0 2.5 5. 0 / 2 3. 0 5. 0 -2 2.5 5. 0 / 2. 0 عملگرهاي افزايش و كاهش در ، ++Cافزايش يك واحد به مقدار يك متغير از نوع صحيح را افزايش و بطور مشابه كاهش يك واحد از مقدار يك متغير از نوع صحيح را كاهش مي‌نامند.. عملگرهاي افزايش و كاهش عملگر كاهش را با - -و عملگر افزايش را با ++نمايش مي‌دهند .چون عملگرهاي ++و - -فقط روي يك عملوند اثر دارند اين دو عملگر نيز جزء عملگرهاي يكتائي مي‌باشند. مثال : سه دستور العمل : ;++x ;x++ ;x=x+1 معادل مي‌باشند و بطريق مشابه سه دستورالعمل زير نیز معادل مي باشند. ;--y ;y=y-1 ; y- - از عملگرهاي ++و --مي‌توان بدو صورت پيشوندي و پسوندي استفاده نمود. در دستورالعمل‌هاي پيچيده عملگر پيشوندي قبل از انتساب ارزيابي ميشود و عملگر پسوندي بعد از انتساب ارزيابي مي‌شود. مثال : ;int x=5 ;y=++x * 2 پس از اجراي دستورالعملهاي فوق : ‏y=12 ;int x=5 ;y=x++ * 2 پس از اجراي دستورالعملهاي فوق : ‏y=12 عملگر sizeof Sizeofاز1عملگرهايي1كتائ1يم1يب11اشد و م1شخصك11ننده 1ت11ع1داد ب11اي1ت ‌ك11ند. 1ل1ي 1ي1س1تك11ه ي1كن1وع داد1ه 1ا1ش1غ1ا م هائ ا مثال : ;int x ; cout << sizeof x مقدار 2نمايش داده مي‌شود . ; )cout << sizeof(float مقدار 4نمايش داده مي شود. عملگرهاي جايگزيني محاسباتي براي ساده‌تر نوشتن عبارتها در ، ++Cمي‌توان از عملگرهاي جايگزيني محاسبـــاتي استفاده نمود. =% =/ *= =- =+ اولويت عملگرها ارزيابي مقدار يك عبارت رياضي براساس جدول اولويت عملگرها انجام مي‌گردد .در ذيل جدول اولويت عملگرها براساس بترتيب از بيشترين اولويت به كمترين اولويت داده شده است. چپ به راست پرانتزها )( راست به چپ عملگرهاي يكتايي - + -- ++ sizeof چپ به راست عملگرهاي ضرب و تقسيم و باقيمانده چپ به راست عملگرهاي جمع و تفريق چپ به راست عملگرهاي درج و استخراج راست به چپ عملگرهاي جايگزيني و انتساب % ‏ >> / * + << == += -= *= /= % مثال : 1 (5+2) *(6+2*2)/2 با توجه به جدول اولويت عملگرها داريم كه 7 *(6+2*2)/2 7*(6+4)/2 7* 10 /2 70 /2 35 : 2 مثال int a=6 , b=2, c=8, d=12; d=a++ * b/c ++; cout << d << c << b << a; : خروجی 1 9 2 7 توضيحات ()Comments توضيحات در برنام1ه باع1ث خوانائ1ي بيشت1ر و درك بهت1ر برنام1ه ميشود .بنابراي1ن توص1يه بر آ1ن اس1ت ك1ه حت1ي االمكان در برنامه‌ه1ا از توضيحات اس1تفاده نمائيم .در ،++Cتوضيحات بدو ص1ورت انجام مي‌گيرد که در اس1الیدهای بع1د ب1ه آن اشاره شده است. توضيحات ()Comments الف :اين نوع توضيح بوسيله //انجام مي‌شود .كه كامپيوتر هر چيزي را كه بعد از //قرار داده شود تا انتهاي آن خط اغماض مي‌نمايد. مثال : ‏c=a+b;//c is equal to sum of a and b ب:توضيح نوع دوم با */شروع شده و به * /ختم مي‌شود و هر چيزي كه بين*‌ /و * /قرار گيرد اغماض مي‌نمايد . مثال : / * this is a program ‏to calcufate sum of ‏n integer numbers */ توابع كتابخانه زبان ++Cمجهز به تعدادي توابع كتابخانه مي‌باشد .بعنوان مثال تعدادي توابع كتابخانه براي عمليات ورودي و خروجي وجود دارند. معموالً توابع كتابخانه مشابه ،بصورت برنامه‌هاي هدف (برنامه ترجمه شده بزبان ماشين) در قالب فايلهاي كتابخانه دسته بندي و مورد استفاده قرا رمي‌گيرند .اين فايلها را فايلهاي headerمي‌نامند و داراي پسوند h.مي‌باشند. نحوه استفاده از توابع کتابخانه ای براي استفاده از توابع كتابخانه‌ خاصي بايستـــي نام فايل headerآنرا در ابتداي برنامه در دستور include#قرار دهيم. > اسم فايل include < #header تابع نوع شرح فايل هيدر a b s(i ) int i قدرمطلق st d l i b .h c o s(d ) double ma t h .h e xp (d ) l o g (d ) l o g 10(d ) double double double si n (d ) double d كسينوس ex loge d Log10 d d سينوس s q rt (d ) double d جذر ma t h .h st rl en (s) int sتعداد كركترهاي رشته st ri n g .h t a n (d ) double d تانژانت ma t h .h t o a s ci i ( c) int cكداسكي كركتر st d l i b .h t o l o we r(c ) int تبديل به حروف كوچك st d l i b .h t o u p p er(c ) int تبديل به حرف بزرگ st d l i b .h ma t h .h ma t h .h ma t h .h ma t h .h برنامه در ++C اكنون باتوجه به مطالب گفته شده قادر خواهيم بود كه تعدادي برنامه ساده و كوچك به زبان +C +بنويسيم .براي نوشتن برنامه بايستي دستورالعملها را در تابع ) (mainقرار دهيم و براي اينكار مي‌توان به يكي از دو طريقی که در اسالیدهای بعد آمده است ،عمل نمود. :روش اول > #include < ) (int main } ; دستورالعمل 1 ; دستورالعمل 2 . . . ; د1س1تورا1لعملn ; return 0 } روش دوم : > #include < ) (void main { ; دستورالعمل 1 ; دستورالعمل 2 . . . ; د1س1تورا1لعملn } را روي صفحه مانیتور نمايشC++ is an object oriented language برنامه ای که پيغام .مي دهد #include <iostream.h> int main( ) { cout <<"C++ is an object oriented language \n" ; return 0 ; } برنامه زير يك حرف انگليسي كوچك را گرفته به حرف بزرگ تبديل مي‌نمايد. #include <iostream.h> #include <stdlib. h> int main( ) { char c1 , c2; cout << "Enter a lowercase letter:" cin >> c1; c2 = toupper(c1); cout << c2 << endl; return 0; } ب آنها را محاسبه و نمايش مي‌دهد6دو عدد از نوع اعشاري را گرفته مجموع و حاصلضر. #include <iostream.h> int main( ) { float x,y,s,p ; cin >> x >> y ; s= x+y ; p=x*y; cout << s <<endl << p; return 0 ; } فصل دوم ساختارهای تصمیم گیری و تکرار فهرست مطالب فصل دوم .1 .2 .3 .4 .5 .6 عملگر های رابطه ای عملگر شرطی دستورالعمل شرطی عملگر کاما عملگر های منطقی Forدستورالعمل عملگرهای رابطه ای از این عملگرها براي تعيين اينكه آيا دو عدد با هم معادلند يا يكي از ديگري بزرگتر يا كوچكتر مي‌باشد استفاده مي‌گردد .عملگرهاي رابطه‌اي عبارتند از: مساوي == مخالف =! بزرگتر > بزرگتر يا مساوي => كوچكتر < كوچكتر يا مساوي < = عملگر شرطی شكل كلي عملگر شرطي بصورت زير مي‌باشد: ‏expression _ test ? expression _ true : expression _ false عملگر شرطي تنها عملگري در ++Cمي‌باشد كه داراي سه عملوند مي‌باشد. مثال : 1 ;int x=10,y=20,b ; b=(x>y) ? x : y اين دو دستور العمل باعث ميشوند كه ماكزيمم مقادير yو xدر bقرار بگيرد. مثال 6: 2 ; "x>=10 ? cout << "passed" : cout << "failed رشته اگر مقدار xبزرگتر يا مساوي ده باشد رشتة passedدر غير اينصورت نمايش داده ميشود. ‏failed IF دستورالعمل شرطي توسط این دستور شرطي را تست نموده و بسته به آنكه شرط درست يا غلط باشد عكس‌العمل خاصي را نشان دهيم. ) ع1بار1ت ; د1س1تورا1لعمل1 . ; د1س1تورا1لعملn (if { } ‏else { ; د1س1تورا1لعمل1 . ; د1س1تورا1لعملn } 1 مثال: if(x != y) { cout << x ; ++ x ; } else { cout << y ; --y; } 2 مثال: برنامه زير يك عدد اعشاري را از ورودي گرفته جذر آنرا محاسبه مي‌نمايد. #include <iostream.h> #include <math . h> int main( ) { float x,s; cin >> x ; if( x < 0 ) cout << " x is negative" << endl ; else { s = sqrt(x) ; cout << s << endl ; } return 0; } عملگر كاما تعدادي عبارت را مي‌توان با كاما بهم متصل نمود و تشكيل يك عبارت پيچيده‌تري را داد .اين عبارتها به ترتيب از چپ به راست ارزيابي شده و مقدار عبارت معادل عبارت nمي‌باشد. (عبارت , .… , nعبارت , 3عبارت , 2عبارت )1 مثال : اگر داشته باشيم ; int a=2 , b=4 , c=5عبارت زير را در نظر بگيريد: )(++ a , a+b, ++ c, c+b مقدار عبارت برابر است با b+cكه معادل 10مي‌با‌شد. عملگرهای منطقی با استفاده از عملگرهاي منطقي مي‌توان شرطهاي تركيبي در برنامه‌ ايجاد نمود. عملگرهاي منطقي عبارتست از : ‏AND ‏OR ‏NOT كه در ++Cبه ترتيب بصورت زير نشان داده ميشود. && || ! جدول درستی سه عملگر شرطی a t ru e t ru e fa l se fa l se a t ru e t ru e fa l s e fa l s e b t ru e fa l s e t ru e fa l s e b t ru e fa l se t ru e fa l se a && b Tru e Fa l s e Fa l s e Fa l s e a t ru e fa l s e !a Fa l se Tru e a || b Tru e Tru e Tru e Fa l se چند مثال : ))if ((x= = 5) ||(y != 0 ; cout << x << endl اگر xبرابر با 5يا yمخالف صفر باشد مقدار xنمايش داده شود . ‏if(x ) =x ;0 اگر مقدار xمخالف صفر باشد ،آنگاه xبرابر با صفر شود . برنامه زير طول سه پاره‌خط را از ورودي گرفته مشخص مي‌نمايد كه آيا تشكيل يك مثلث ميدهد يا خير؟ #include < iostream.h > int main( ) { float a, b, c; cout << "Enter three real numbers" << endl ; cin >> a >> b >> c; // if(( a < b + c) &&(b < a+c) &&(c < a+b)) cout << "It is a triangle" ; else cout << "Not a triangle" ; return 0 ; } دستورالعمل For از دستور العمل forبراي تكرار دستورالعملها استفاده ميشود .شكل كلي دستور forبصورت زير مي‌باشد: (عبارت ; 3عبارت ; 2عبارت for )1 { ; د1س1تورا1لعمل1 ; د1س1تورا1لعمل2 . . . ; د1س1تورا1لعملn } . را از ورودي گرفته فاكتوريل آنرا محاسبه ونمايش مي‌دهدn برنامه‌ زير عدد صحيح و مثبت #include <iostream.h> int main( ) { int n, i ; long fact = 1 ; cout << "Enter a positive integer number"; cin >> n; for( i=1; i<=n; ++i) fact *= i; cout << fact << endl; return 0 ; } برنامه زير مجموع اعداد صحيح و متوالي بين 1تا nرا محاسبه نموده و نمايش مي‌دهد. #include ><iostream.h ‏int ) (main { ; int n, i=1 ; long s = 0 ; cin >> n ;for(; i<=n; i++) s += i ; cout << s } ; return 0 . را نمايش مي‌دهد9 تا0 برنامه زير ارقام #include <iostream.h> int main( ) { int j=0 ; for( ; j <= 9 ; ) cout << j++ << endl; return 0 ; } . ايجاد مي‌شوند را نمايش مي‌دهد3 ، 2 ، 1 برنامه زير كليه اعداد سه رقمي كه با ارقام #include <iostream.h> int main( ) { int i,j,k,n; for(i=1; i<=3; ++i) for(j=1; j<=3; ++j) for(k=1; k<=3; ++k) { n=i*100 + j*10+k; cout << n << ‘\n’ ; } return 0 ; } فصل سوم سایر ساختارهای تکرار فهرست مطالب فصل سوم .1 .2 .3 .4 .5 .6 .7 .8 whileدستورالعمل do whileدستورالعمل breakدستورالعمل continueدستورالعمل switchدستورالعمل )( cin.getتابع )(>< static_castعملگر جدول اولویت عمTلگرها دستورالعمل while از اين دستور العمل مانند دستورالعمل forبراي تكرار يك دستورالعمل ساده يا تركيبي استفاده مي‌گردد .شكل كلي اين دستور العمل بصورت زير مي‌باشد. )ش1رط (while } ; دستورالعمل 1 ; دستورالعمل 2 . . ; د1س1تورا1لعملn } تفاوت دستورهای whileو for دستورالعمل forزماني استفاده ميشود كه تعداد دفعات تكرار از قبل مشخص و معين باشد .در صورتيكه تعداد دفعات تكرار مشخص نباشد بايستي از دستورالعمل while استفاده نمود. مثال : ‏int x=0 )while(x<5 ;cout << x ++<< endl با اجراي قطعه‌ برنامه فوق مقادير زير نمايش داده :ميشود 0 1 2 3 4 . قرار مي‌دهدavg مقدار از نوع اعشاري را گرفته ميانگين آنها را محاسبه و در متغيرn برنامة فوق #inclode <iostream.h> int main( ) { int count = 0 , n; float x, sum = 0 , avg ; cin >> n ; /* ي1ير ورود1قاد1داد م1ع11 تn*/ while(count < n){ cin >> x ; sum += x ; ++ count ; } avg = sum / n ; cout << avg << endl; return 0 ; } دستورالعمل do while اين دستور العمل نيز براي تكرار يك دستورالعمل ساده يا تركيبي استفاده مي‌شود .شكل كلي اين دستورالعمل بصورت زير مي‌باشد. ‏do } ; دستورالعمل 1 ; دستورالعمل 2 . . ; د1س1تورا1لعملn ;)ش1رط (} while تفاوت دستورهای do whileو while در دستورالعمل whileابتدا مقدار شرط ارزيابي شده اما در دستورالعمل do whileابتدا دستورالعمل اجرا شده سپس مقدار شرط ارزيابي مي‌گردد. بنابراین دستورالعمل do while حداقل يك بار انجام ميشود . : مثال #include <iostream.h> int main( ) { int count = 0; do cout << count ++<<endl ; while(count <= 9); return 0 ; } را روي ده خط نمايش مي‌دهد9 تا0 ارقام دستورالعمل break اين دستورالعمل باعث توقف دستورالعملهاي تكرار( )for , while ,do whileشده و كنترل به خارج از اين دستورالعملها منتقل مي‌نمايد. : 1 مثال #include <iostream.h> int main( ) { float x, s=0.0 ; cin >> x ; while(x <= 1000.0) { if(x < 0.0){ cout << "Error-Negative Value" ; break; } s += x ; cin >> x ;} cout << s << endl ; return 0 ; } :2 مثال #include <iostream.h> int main( ) { int count = 0 ; while( 1 ) { count ++ ; if(count > 10 ) break ; } cout << "counter : " << count << "\n"; return 0 ; } :3 مثال #include <iostream.h> void main( ) { int count; float x, sum = 0; cin >> x ; for(count = 1; x < 1000 . 0; ++ count ) { cin >> x ; if(x < 0.0) { cout << "Error – Negative value " <<endl; break ; } sum += x ; } cout << sum << \n ; } :4 مثال #include <iostream.h> int main( ) { float x , sum = 0.0 ; do { cin >> x ; if(x < 0.0) { cout << "Error – Negative Value" << endl ; break ; } sum += x ; } while(x <= 1000.0); cout << sum << endl ; return 0 ; } دستورالعمل continue از دستورالعمل continueمي‌توان در دستورالعملهاي تكرار do while ، while ، forاستفاده نمود .اين دستورالعمل باعث مي‌شود كه كنترل بابتداي دستورالعملهاي تكرار منتقل گردد. :1 مثال #include <iostream.h> int main( ) { float x, sum = 0.0 ; Do { cin >> x ; if(x < 0 . 0) { cout << "Error" << endl ; continue ; } sum += x ; } while(x <= 1000.0 ); cout << sum ; return 0 ; } :2 مثال #include <iostream.h> int main( ) { int n , navg = 0 ; float x, avg, sum = 0 ; cin >> n ; / *ي1عداد ورود1داد ا1ع11تاز ت1بار1 عn * / for(int count = 1 ; count <=n; ++ count ) { cin >> x ; if(x < 0 ) continue ; sum += x ; ++ navg ; } avg = sum / navg; cout << avg << endl ; return 0 ; } دستورالعمل switch همانطور که می دانید از دستورالعمل شرطی( )if elseمی توان بصورت تودرتو استفاده نمود ولي از طرفي اگر عمق استفادة تو در تو از اين دستورالعمل زياد گردد ،درك آنها مشكل ميشود .براي حل اين مشكل ، ++Cدستورالعمل switchكه عم ً ال يك دستورالعمل چند انتخابي مي‌باشد را ارائه نموده است. Switch شکل کلی دستور العمل switch(ت1بار1)ع { case valueone : statement; break; case statement; valuetwo:  break; case statement; valuen : break; default: statement ; } 1 مثال: #include <iostream.h> void main( ) { unsigned int n ; cin >> n; switch(n) { case 0: cout << "ZERO" << endl ; break; case 1: cout << "one" << endl ; break ; case 2: cout << "two" << endl ; break; default : cout << "default" << endl; } / * end of switch statement * / } : 2 مثال #include <iostream.h> void main( ) { unsigned int n; cin >> n ; switch(n) { case 0 : case 1: case 2: cout << "Less Than Three" << endl; break; case 3: cout << "Equal To Three" << endl ; break; default: cout << "Greater Than Three" << endl; } } تابع : )(cin.get اين تابع يك كركتر را از صفحه كليد مي‌گيرد .براي استفاده از اين تابع در ابتداي برنامه بايستي داشته باشيم : #include ><iostream.h قطعه برنامه ذيل يك كركتر را از صفحه كليد گرفته و نمايش مي‌دهد. ‏char ;x ;) (x = cin.get ; cout << x برنامة ذيل يك سطر متن انگليسي كه به CTRL Zختم ميشود را گرفته دقيقا‌ ً نمايش مي‌دهد. #include ><iostream.h ) (int main { ;char x )while((x = cin.get( ) !=EOF ; cout << x ; return 0 } ‌ب11اشد EOFبه م1عني End of Fileم1ي ك11ه در iostream.hت11ع1ري1فش1ده 1و ‌ب11اشد .م1قدار آندر م1قدار آنب11را1بر ب11ا -1م1ي س1يستمع1ام1ل DOSع1بار1ت1ستاز . ctrl z . استفاده شده استswitch () و دستورcin.get در قطعه برنامه ذيل ازتابع char x; x = cin.get( ); switch(x) { case  r  : case  R  : cout << RED << \n ; break ; case  b  : case  B  : cout << BLUE << endl ; break ; case  y  : case  Y  : cout << YELLOW << endl; } .) آنرا حذف نموده و نمايش ميدهدblank( برنامة ذيل يك سطر متن انگليسي را گرفته كركترهاي خالي #include <iostream.h> int main( ) { char next; while((next = cin.get( ) ) !=EOF) if(next !=   ) cout << next ; return 0 ; } عملگر static_cast از اين عملگر براي تبديل موقت يك نوع dataبه نوع ديگر استفاده مي‌شود .اين عملگر يك عملگر يكتائي مي‌باشد. :مثال 1 ‏intint xx==25 ; ;25 ‏float ; ;float yy ‏yy==static_cast <<static_cast ‏float )float>(x ; ;)>(x مقدار xموقتاً بصورت اعشاري در می آيد و در نتيجه مقدار yبرابر با 25.0می شود .بايستي توجه داشت كه نوع متغير xعوض نمي شود بلكه موقتاً مقدار آن بصورت اعشاري در آمده است. 2 مثال: float floatxx= = 14.75 14.75;; cout cout<< << static_cast static_cast< < int int>(x) >(x)<< << endl; endl; cout cout<< <<xx;; نمايش داده ميشود و14 ابتدا مقدار نمايش داده14.75 سپس مقدار .ميشود جدول اولویت عملگرها چپ به راست ( ) راست به چپ Static_cast < >( ) ++ -- + - sizeof چپ به راست * / % +- چپ به راست چپ به راست چپ به راست << >> => > =< چپ به راست =! == راست به چپ : ? راست به چپ چپ به راست =*= /= % < == += - , فصل چهارم اعداد تصادفی فهرست مطالب فصل چهارم .1 .2 .3 .4 تولید اعداد تصادفی ) ( typedefتعریف نوع داده داده های از نوع شمارشی فرمت های مختلفه مقادیر خروجی اعداد تصادفی مقادير تصادفي يا شانسي در اكثر برنامه‌هاي كاربردي در زمينه شبيه سازي و بازيهاي كامپيوتري نقش مهمي را ايفا مي‌نمايند .براي ايجاد يك عدد تصادفي صحيح بين 0و 32767 بايستي از تابع ) (randاستفاده نمائيم. . را ايجاد مي‌نمايد32767 و0 عدد تصادفي بين10 برنامه زير #include <stdlib.h> #include < iostream.h> int main( ) { for(int j=1; j<=10; ++j) cout << rand( ) << \n ; return 0 ; } نکته : اگر برنامة فوق را چندبار اجرا نمائيم جواب يكساني را از كامپيوتري‌می گيريم. براي تصادفي كردن اعداد مي‌بايستي از تابع ) (srandاستفاده نمائيم. اين تابع به يك آرگومان صحيح از نوع unsignedنياز دارد. به اين آرگومان seedگفته مي‌شود. در اسالید بعد برنامه قبلی را با تابع ) (srandنوشته ایم. ) ) (srand ( . را ايجاد مي‌نمايد32767 و0 عدد تصادفي بين10 برنامه زير #include <stdlib.h> #include < iostream.h> int main( ) { unsigned seed; cout << "Enter seed value : " ; cin >> seed ; srand(seed); for(int j=1; j<=10; ++j) cout << rand( ) <<  \n ; return 0 ; } .برنامه زير نتيجه پرتاب دو تاس را نمايش مي‌دهد #include < iostream.h> #include <stdlib.h> int main( ) { unsigned seed, d1, d2; cout << "Enter seed: " ; cin >> seed ; srand(seed) ; d1= 1+rand( )% 6 ; d2= 1+rand( )% 6 ; cout << d1 <<  << d2 ; return 0 ; } . را نمايش مي‌دهد1 و0 اعداد شانسي بين10 برنامه زير #include <stdlib.h> #include < iostream.h> int main( ) { unsigned seed ; cout << "Enter seed: " ; cin >> seed ; srand(seed) ; for(int i=1; i<=10; ++i) cout << rand( ) / 32768.0 << endl ; return 0 ; } تعريف نوع داده ()typedef از typedefمي‌توان براي تعري11ف نوع داده‌هاي جدي11د ك11ه معادل نوع داده‌هاي موجود باشد استفاده نمود .شكل كلي عبارتست از : ;newtype اسم جديد ‏type ‏typedef نشاندهنده نوع داده موجود مثال : ;typedef int integer حال مي‌توان yو xرا بصورت زير تعريف نمود : ;integer x,y داده‌هاي از نوع شمارشي بمنظور معرفي داده‌هاي از نوع شمارشي از كلمه enumاستفاده مي‌گردد. مثال : 4 3 2 1 0 ‏enum color {red, blue, green, ; }yellow, brown ‌ب11اشد. colorي1كن1وع داد1ه 1ش1مار1ش1يم1ي چند مثال: emum status {married, devorced, vidow, single}; status a ; a= single ; enum days {sat, sun, mon, tue, wed, thr, fri}; enum bread {lavash, fantezi, taftoon, barbari}; enum color { yellow, red=2, brown, white }; color x=brown; 0 3 4 :توجه بايستي در نظر داشت كه داده‌هاي از نوع شمارشي در عمليات ورودي و خروجي شركت نمي‌نمايند .بعبارت ديگر مقادير داده‌هاي از نوع شمارشي بايستي در برنامه تعيين نمود. دستورالعلهاي ورودي و خروجي مانند cinو coutدر مورد داده‌هاي شمارشي نمي‌توان استفاده نمود. فرمتهای مختلفه مقادیر خروجی مقدار xبطور غیر علمی با نقطه اعشار ثابت نمایش داده می شود. ; double x=1050 << )cout << setiosflags(ios : : fixed | ios: : showpoint ) << setw(23 ; setprecision(2) << x << endl مقدار xبا طول میدان 23نمایش داده می شود. مقدار xبا دو رقم اعشار نمایش داده می شود. بنابراین مقدار xبصورت زیر نمایش داده می شود : شانزده ستون خالی 1050.00 فصل پنجم آرایه ها فهرست مطالب فصل پنجم .1 .2 آرایه یک بعدی آرایه دو بعدی ( ماتریس ها ) آرایه یک بعدی آرايه يك فضاي پيوسته از حافظه اصلي كامپيوتر مي‌باشد كه مي‌تواند .چندين مقدا را در خود جاي دهد كليه عناصر يك آرايه از يك نوع مي‌باشند. عناصر آرايه بوسيله انديس آنها مشخص مي‌شوند. در ، ++Cانديس آرايه از صفر شروع مي‌شود. کاربرد آرایه ها آرايه‌ها در برنامه‌نويسي در مواردي كاربرد دارند كه بخواهيم اطالعات و داده‌ها را در طول اجراي .برنامه حفظ نمائيم ; ]int x[5 ‏x 4 پنجمين عنصر ]x[4 3 2 1 0 اولين عنصر ]x[0 تخصیص مقادیر اولیه به عناصر آرایه : ;}int x[5]= {4, 2, 5, 17, 30 ‏x 30 17 5 2 4 4 3 2 1 0 دریافت مقادیر عناصر آرایه : ;]int x[5 )for(int i=0; i<=4; ++i ; ] cin >> x[ i نمایش مقادیر عناصر آرایه : ; ] for(int i=0; i<=5; ++i) cout << x[ i .اگر تعداد مقادير اوليه كمتر از تعداد عضوهاي آرايه باشد عضوهاي باقيمانده بطور اتوماتيك ،مقدار اوليه صفر مي‌گيرند ;}int x[5] = {12, 5, 7 ‏x 0 0 7 5 12 4 3 2 1 0 بايستي توجه داشت كه آرايه‌ها به صورت ضمني مقدار اوليه صفر نمي‌گيرند .برنامه نويس بايد به عضو اول آرايه، مقدار اوليه صفر تخصيص دهد تا عضوهاي باقي‌مانده بطور اتوماتيك ،مقدار اوليه صفر بگيرند. ; }int x[5] = {0 ‏x 0 0 0 0 0 4 3 2 1 0 دستور زير يك آرايه يك بعدي شش عنصري از نوع floatايجاد مي‌نمايد. ‏float x[ ] = {2.4, 6.3, -17.1, 14.2, 5.9, ; }16.5 ‏x 16.5 5.9 14.2 -17.1 6.3 2.4 5 4 3 2 1 0 عدد اعشاري و مثبت را گرفته تشكيل يك آرايه ميدهد سپس مجموع عناصر آرايه را مشخص100 برنامه ذيل .نموده نمايش مي‌دهد #include <iostream.h> #include <iomanip.h> int main( ) { const int arrsize = 100 ; float x[ arrsize], tot = 0.0 ; for(int j=0; j<arrsize; j++) cin >> x[ j ]; for(j=0; j<arrsize; j++) cout << setiosflags(ios::fixed ios :: showpoint ) << setw(12) << setprecision(2) << x[ j ] << endl; for(j=0; j<arrsize; j++) tot += x[ j ] ; cout << tot ; return 0 ; } عدد اعشاري را گرفته تشكيل يك آرايه داده سپس كوچكترين عنصر آرايه را20 برنامه ذيل .مشخص و نمايش مي‌دهد #include <iostream.h> #include <conio.h> int main( ) { float x[20], s; int j ; clrscr( ) ; for(j=0; j<20 ; ++j) cin >> x[ j ]; s = x[0 ] ; for(j=1; j<20; ++j) if(x[ j] <s) s = x[ j ]; cout << s << endl; return 0; } .) بصورت صعودي مرتب مي‌نمايدBubble sort( ‌ عدد اعشاري را گرفته بروش حبابي100 برنامه زير #include <iostream.h> #include <conio.h> int main ( ) { float x[100] , temp; int i,j ; clrscr( ); for(i=0; i<100; ++i) cin >> x[i ]; for(i=0; i<99; i++) for(j=i+1 ; j<100; j++) if(x[ j ] < x[i ]{ temp = x[ j ] ; x[ j ] = x[ i ]; x[ i ] = temp ; } for(i=0; i<=99; i++) cout << x[ i ] << endl; return 0 ; } آرايه‌هاي دوبعدي (ماتريس‌ها) ماتريسها بوسيله آرايه‌هاي دوبعدي در كامپيوترنمايش داده ميشوند. ;]int a[3][4 ستون 1 ستون 0 ستون 3 ستون ]a[0][3 ]a[0][2 ]a[0][1 ]a[0][0 سطر 0 ]a[1][3 ]a[1][2 ]a[1][1 ]a[1][0 سطر 1 ]a[2][3 ]a[2][2 ]a[2][1 ]a[2][0 سطر 2 2 تخصیص مقادیر اولیه به عناصر آرایه : ; } }int a[3][4]={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12 3 2 1 0 4 3 2 1 0 8 7 6 5 1 12 11 10 9 2 int a[3][4]= { {1}, {2,3} , {4,5,6} } ; 0 1 2 3 0 1 0 0 0 1 2 3 0 0 2 4 5 6 0 int a[3][4]= {1, 2, 3, 4,5 } ; 0 1 2 3 0 1 2 3 4 1 5 0 0 0 2 0 0 0 0 در يك آراية دوانديسي ،هر سطر ،در حقيقت آرايه‌اي يك انديسي است .در اعالن آرايه‌هاي دوانديسي ذكر تعداد ستونها الزامي است. ;}int a[ ][4]={1,2,3,4,5 3 2 1 0 4 3 2 1 0 0 0 0 5 1 . را گرفته مجموع عناصر آن را مشخص نموده و نمايش مي‌دهد4*3 برنامه زير يك ماتريس #include <iostream.h> #include <conio.h> int main( ) { float x[3][4], total= 0.0; int i, j ; // generate matrix x. for(i=0; i<3; ++i) for (j=0; j<3; j++) cin >> x[ i ][ j ]; // calculate the sum of elements. for(i=0; i<3; ++i) for(j=0; j<4; j++) tot + = x [ i ][ j ]; cout << "total = " << total << endl; return 0 ; } فصل ششم توابع فهرست مطالب فصل ششم .1 .2 .3 .4 .5 .6 تعریف تابع تابع بازگشتی توابع درون خطی انتقال پارامترها از طریق ارجاع ) ( storage classesکالس های حافظه سربارگذاTری توابع تعریف توابع استفاده از توابع در برنامه‌ها به برنامه‌نويس اين امكان را مي‌دهد كه بتواند برنامه‌هاي خود را به صورت قطعه قطعه برنامه بنويسد .تا كنون كليه برنامه‌هائي كه نوشته‌ايم فقط از تابع ) (mainاستفاده نموده‌ايم. نوع مقدار برگشتي شكل كلي توابع بصورت زير مي‌باشند : لیست پارامتر ها جهت انتقال اطالعات از تابع احضار كننده به تابع فراخوانده شده ‏return-value-type function-name (parameter)list { ‏declaration and statements نام تابع } تعريف اعالن‌هاي تابع و دستورالعملهاي اجرائي .تابع زير يك حرف كوچك را به بزرگ تبديل مي‌نمايد نوع مقدار برگشتی پارامتری از نوع char نام تابع )char low_to_up (char c1 { ;char c2 ;c2 = (c1>=  a  && c1<=  z )?( A  + c1-  a ): c1 ; )return (c2 } .برنامه کامل که از تابع قبل جهت تبدیل يك حرف كوچك به بزرگ استفاده مي‌نمايد #include <iostream.h> char low_to_up(char c1) { char c2; c2=(c1 >=  a  && c1 <=  z )?( A  +c1 - a ) : c1; return c2; } int main( ) { char x; x=cin.get( ); cout << low_to_up(x) ; return 0; } x ‘d’ c1 ‘d’ c2 ‘D’ آرگومان تابع maximumدو مقدار صحيح را گرفته بزرگترين آنها را برميگرداند. )int maximum(int x, int y { ; int z ;z=(x >= y)? x : y ;return z } . جهت یافتن ماکزیمم دو مقدار صحيح استفاده می نمایدmaximum برنامه کامل که از تابع #include <iostream.h> int maximum(int x , int y) { int z ; z=(x > y)? x : y ; return z; } int main( ) { int a, b ; cin >> a >> b ; cout << maximum(a,b); return 0; } maximum ع1اب11هایت1گومان1 آرa, b a b 10 15 x y 10 15 z 15 اسامي پارامترها و آرگومانهاي يك تابع .مي‌توانند همنام باشند برنامه زير يك مقدار مثبت را گرفته فاكتوريل آنرا محاسيه نموده نمايش مي‌دهد. x!=1*2*3*4*…*(x-1)*x #include <iostream.h> long int factorial(int n) { long int prod=1; if(n>1) for(int i=2; i<=n; ++i) prod *=i; return(prod); } int main( ) { int n; cin >> n ; cout << factorial(n) ; return 0 ; } main درn 3 factorial درn 3 factorial درi 2,3,4 factorial درprod 6 وقتي در تابعي ،تابع ديگر احضار مي‌گردد بايستي تعريف تابع احضار شونده قبل از تعريف .تابع احضار كننده در برنامه ظاهر گردد اگ1ر بخواهی1م در برنامه‌ه1ا ابتدا تاب1ع main ظاه1ر گردد بايس1تي prototypeتاب1ع يعن1ي پيش نمون1ة تاب1ع ك1ه شام1ل نام تاب1ع ،نوع مقدار برگشت1ي تاب1ع ،تعداد پارامترهائ1ي را ك1ه تاب1ع انتظار درياف111ت آنرا دارد و انواع پارامتره111ا و ترتيب قرارگرفت1ن اي1ن پارامتره1ا را ب1ه اطالع كامپيلر برساند. در اسالید بعد مثالی در این زمینه آورده شده است. #include <iostream.h> #include <conio.h> long int factorial(int); // function prototype int main( ) { int n; cout << "Enter a positive integer" << endl; cin >> n; cout << factorial(n) << endl; return 0 ; } long int factorial(int n) { long int prod = 1; if(n>1) for(int i=2; i<=n; ++i) prod *= i; return(prod); } در ص11ورتي ك11ه تاب11ع مقداري بر نگردان11د نوع مقدار برگشت1ي تاب1ع را voidاعالن مي‌كنيم .و در ص1ورتيكه تاب1ع مقداري را درياف1ت نكن1د بجاي parameter- listاز voidي11ا ( ) استفاده ميگردد. در اسالید بعد مثالی در این زمینه آورده شده است. #include <iostream.h> #include <conio.h> void maximum(int , int) ; int main( ) { int x, y; clrscr( ) cin >> x >> y; maximum(x,y); return 0; } void maximum(int x, int y) { int z ; z=(x>=y) ? x : y ; cout << "max value \n" << z<< endl; return ; } .تابع مقداري بر نمی گرداند ) Call By Value ( احضار بوسیله مقدار #include <iostream.h> int modify(int) int main( ) { int a=20; cout << a << endl; modify(a) ; cout << a << endl; return 0 ; } int modify(int a) { a *= 2; cout << a << endl; return ; } main درa 20 modify درa 20 modify درa 40 : خروجی برنامه 20 40 20 احضار بوسیله مقدار ( ) Call By Value aدر main 20 aدر modify 20 aدر modify 40 در این نوع احضار تابع حافظه‌‌هاي مورد استفاده آرگومانها و پارامترها از هم متمايزند و هرگونه تغيير در پارامترها باعـــث تغيـــر در آرگومانهاي متناظر نمي‌گردد. >#include <iostream.h )int modify(int ) (int main { ;int a=20 ;cout << a << endl ; )modify(a ;cout << a << endl ; return 0 } )int modify(int a { ;a *= 2 ;cout << a << endl ; return } ه1ر زمان که نوع مقدار برگشت1ي تاب1ع int مي‌باش1د نيازي ب1ه ذك1ر آ1ن نیس1ت و همچنين نيازي به تعريف پيش نمونه تابع نمي‌باشد. تابع بازگشتي ()recursive functions توابع بازگشتي يا recursiveتوابعي هستند كه وقتي احضار شوند باعث مي‌شوند كه خود را احضار نمايند. نحوه محاسبه فاکتوریل از طریق تابع بازگشتی ‏n != 1*2*3*…*(n-1) *n ! f(n) = n اگر n=0 در غير اينصورت 1 )n *f(n-1 = )f(n ‏n!= 1* 2* 3* … *(n-2) *(n1) *n ‏n!=(n-1)! *n در اسالید بعد تابع بازگشتی مورد نظر پیاده سازی شده است. تابع بازگشتی محاسبه فاکتوریل #include <iostream.h> long int factorial(int) ; int main( ) { int n ; cout <<  n=  ; cin >> n ; cout << endl <<  factorial =  << factorial(n) << endl; return 0 ; } long int factorial(int n) { if(n<=1) return(1); else return(n *factorical(n-1) ) ; } نحوه محاسبه nامین مقدار دنباله فیبناکی از طریق تابع بازگشتی :د1ن1با1له ف11یبناکی … 0 , 1, 1, 2, 3, 5, 8, 13, 21 , 34, اگر 0 ‏n=1 اگر 1 ‏n=2 =) =fib(nجمله nام در غير اينصورت در اسالید بعد تابع بازگشتی مورد نظر پیاده سازی شده است. )fib(n-1)+fib(n-2 .) را مشخص و نمايش مي‌دهدfibonacci( امين مقدار دنبالة فيبناكيn برنامه‌زير #include <iostream.h> long int fib(long int); // forward declaration int main( ) { long int r ; int n ; cout <<  Enter an integer value  << endl ; cin >> n ; r = fib(n) ; cout << r << endl ; return 0 ; } long int fib(long int n) { if(n = = 1 || n= = 2) return 1 ; else return(fib(n-1) + fib(n-2) ) ; } .برنامه زير يك خط متن انگليسي را گرفته آنرا وارون نموده نمايش مي‌دهد #include <iostream.h> void reverse(void) ; // forward declaration int main( ) { reverse( ) ; return 0 ; } void reverse(void) // read a line of characters and reverse it { char c ; if(( c=cin.get( )) !=  \n ) reverse( ); cout << c ; return ; } استفاده از آرايه‌ها بعنوان پارامتر تابع مجاز است. در اسالید بعد به یک مثال توجه نمایید. . را بعنوان پارامتر مي‌گيردa آرايهmodify در برنامه زير تابع #include <iostream.h> void modify(int [ ] ); // forward declaration int main( ) { int a[5] ; for(int j=0; j<=4; ++j) a[ j ] = j+1 ; modify(a) ; for(j=0; j<5; ++j) cout << a[ j ] << endl ; return 0 ; } void modify(int a[ ]) // function definition { for(int j=0; j<5; ++j) a[ j ] += 2 ; for(j=0; j<5; ++j) cout << a[ j ] << endl ; return ; } 1 2 3 4 5 3 4 5 6 7 خروجی: در ص1ورتيكه آراي1ه بيش از ي1ك بع1د داشت1ه باش1د بعدهاي دومب1ه بع1د بايس1تي در تعري1ف تاب1ع و پيش نمونه تابع ذكر گردد. در اسالید بعد به یک مثال توجه نمایید. #include <iostream.h> void printarr(int [ ][ 3 ]); int main( ) { int arrl [2][3] = { {1,2,3}, {4,5,6} }; arr2 [2][3]= {1,2,3,4,5}; arr3 [2][3]={ {1,2}, {4} }; printarr(arr1); cout << endl ; printarr(arr2); cout << endl ; printarr(arr3); return 0 ; } void printarr(int a[ ][3] ) { for(int i=0; i<2; i++) { for(int j=0; j<3; j++) cout << a[ i ][ j ] <<  ; cout << endl ; } } : خروجی 1 4 1 4 1 4 2 5 2 5 2 0 3 6 3 0 0 0 توابع درون خطي ()inline كلمه inlineبدين معني است كه به كامپيلر دستور مي‌دهد كه يك كپي از دستورالعلمهاي تابع در همان جا (در زمان مقتضي) توليد نمايد تا از احضار تابع ممانعت بعمل آورد. اشکال توابع inline بجاي داشتن تنها يك كپي از تابع ،چند كپي از دستورالعملهاي تابع در برنامه اضافه مي‌شود كه باعث بزرگ شدن اندازه يا طول برنامه مي‌شود. بنابراين از inlineبراي توابع كوچك استفاده مي‌گردد. مثالی از توابع درون خطی #include <iostream.h> inline float cube(const float s) {return s*s*s; } int main( ) { float side ; cin >> side ; cout << side << cube(side) << endl ; return 0 ; } انتقال پارامترها از طريق ارجاع تاكنون وقتي تابعي را احضار مي‌كرديم يك كپي از مقادير آرگومانها درپارامترهاي متناظر قرار مي‌گرفت .این روش احضار بوسيله مقدار يا call by valueناميده شد. در انتقال پارامترها از طريق ارجاع در حقيقت حافظه مربوط به آرگومانها و پارامترهاي متناظر بصورت اشتراكي مورد استفاده قرار مي‌گيرد .اين روش call by reference ناميده مي‌شود . انتقال پارامترها از طريق ارجاع در اين روش پارامترهائي كه از طريق call by referenceعمل مي‌نمايند در پيش نمونه تابع قبل از نام چنين پارامترهائي از & استفاده مي‌شود.واضح است كه در تعريف تابع نيز بهمين طريق عمل مي‌شود. #include <iostream.h> int vfunct(int); // for void rfunct (int &) ; int main( ) { int x=5, y=10; cout << x << endl << vfunct(x) << endl << x << endl ; cout << y << endl ; rfunct(y) ; cout << y << endl ; return 0 ; } int vfunct(int a) { return a *= a ; } void rfunct(int &b) { b *= b ; } : مثال x y 5 10 5 خروجی: 2 . تغییر نمی کندx مقدار آرگومان 5 0 5 1 x y b 5 10 100 : ادامه خروجی 100 نکته : ‏call وقت111ي پارامتري بصورت by referenceاعالن مي‌گردد اي1ن بدان معن1ي اس1ت ك1هب1ا تغيير مقدار اي1ن پارامت1ر در تاب1ع احضار شده مقدار آرگومان متناظر نيز تغيير مي‌نمايد. . دو مقدار اعشاري را مبادله مي‌نمايدfswap برنامه‌زير با استفاده از #include <iostream.h> void fswap(float & , float & ); int main( ) { float a=5.2, b=4.3; cout << a << endl << b ; fswap( a , b) ; cout << a << endl << b ; return 0 ; } void fswap(float &x , float & y) { float t; t=x; x=y; y=t; } كالس‌هاي حافظه ()storage classes متغيرها بدو طريق متمايز مشخص مي‌شوند يكي بوسيله نوع ( )typeآنها و ديگري بوسيله كالس حافظه آنها .نوع متغير قب ً ال اشاره شده بعنوان مثال . . . ، int ، float ، doubleولي كالس حافظة يك متغير در مورد طول عمر و وسعت و دامنة متغير بحث مي‌نمايد. در اسالید بعد به انواع کالس حافظه می پردازیم. :بطور كلي كالس حافظه متغيرها به چهار دستة تقسيم مي‌گردد .1 .2 .3 .4 ‏automatic ‏static ‏external ‏register متغيرهاي automaticدر درون يك تابع تعريف مي‌شوند و در تابعي كه اعالن مي‌شود بصورت متغيرهاي محلي براي آن تابع مي‌باشند .حافظه تخصيص داده شده به متغيرهاي automaticپس از اتمام اجراي تابع از بين مي رود بعبارت ديگر وسعت و دامنة متغيرهاي از نوع automaticتابعي مي‌باشد كه متغير در آن اعالن گرديده است. متغيرهاي staticنيز در درون توابع تعريف ميشوند و از نظر وسعت و دامنه شبيه متغيرهاي automaticهستند ولي در خاتمة اجراي تابع ،حافظه وابسته به اين نوع متغيرهـــا از بين نمي‌رود بلكه براي فراخواني بعدي تابع باقي مي‌ماند. در اسالید بعد به یک مثال از کاربرد این نوع کالس حافظه می پردازیم. : مثال #include <iostream.h> // program to calculate successive fibonacci numbers long int fib(int) ; int main( ) { int n ; cout <<  how many fibonacci numbers? ; cin >> n ; cout << endl ; for(int j=1; j<=n; ++j ) cout << j <<   << fib(j) << endl ; return 0 ; } long int fib(int count) { static long int t1 = 1, t2=1; long int t ; t =(count <3) ?1 : t1 + t2 ; t2 = t1 ; t1 = t ; return(t) ; } بايستي توجه داشت كه اگر در توابع به متغيرهاي از نوع مقدار اوليه تخصيصstatic ندهيم مقدار صفر بصورت اتوماتيك براي آنها در نظر .گرفته مي‌شود متغيرهاي از نوع externalمتغيرهائ1ي هس1تند ك1ه در بيرون از تواب1ع اعالن ميشون1د و وس1عت و دامن1ه فعاليت آنه1ا كليه توابع1ي مي‌باش1د ك1ه در زي1ر دس1تور اعالن متغير قرار دارد. در اسالید بعد به یک مثال از کاربرد این نوع کالس حافظه می پردازیم. #include <iostream.h> int w; // external variable functa(int x, int y) { cout << w ; w=x+y; cout << endl << w << enld; return x%y ; } int main( ) { int a, b, c, d; cin >> a >> b ; c=functa(a, b) ; d=functa(w, b+1); cout << endl << c << endl << d << endl << w ; return 0 ; } : مثال بايستي توجه داشت كه اگر در توابع به متغيرهاي از نوع مقدار اوليهexternal تخصيص ندهيم مقدار صفر بصورت اتوماتيك براي آنها در .نظر گرفته مي‌شود وقت1ي متغيري از نوع registerاعالن مي‌شود از كامپيوت1ر عم ً ال درخواس1ت مي‌شود كه به جاي حافظه از يكي از رجيسترهاي موجود استفاده نمايد. کاربرد کالس register معمو ً ال از نوع رجيستر براي شاخص‌هاي دستور تكرار و يا انديسهاي آرايه‌ها استفاده مي‌شود .بايستي توجه داشت كه متغيرهاي از نوع رجيستر قابل استفاده دردستور cinنمي‌باشند سربارگذاري توابع ()function overloading در ++Cاين امكان وجود دارد كه دريك برنامه بتوانيم از چند توابع هم نام استفاده نمائيم مشروط بر اين كه پارامترهاي اين توابع متفاوت باشند( .از نظر تعداد پارامتر و يا نوع پارامترها و ترتيب آنها) : مثال #include <iostream.h> float addf(float , int); int addf(int , int); int main( ) { int a=5, b=10 ; float d=14.75 ; cout << addf(a , b) << endl; cout << addf(d , b) << endl; return 0 ; } int addf(int x, int y) { return x+y ; } float addf(float x, int y) { return x+y ; } فصل هفتم ساختار ها و اشاره گرها فهرست مطالب فصل هفتم .1 .2 .3 .4 .5 .6 .7 ساختارها ها Union ) ( Pointerاشاره گرها تعریف آرایه آرایه های دو بعدی و اشاره گرها ) newتخصیص حافظه بصورت پویا ( عملگر رشته ها و توابع مربوطه ساختارها ساختارها ش1بيه آرايه‌ه1ا بوده بدين صورت ك1ه يك نوع داده گروهي است ك1ه فضاي پيوس1ته از حافظ1ه اص1لي را اشغال مي‌نمايد .ام1ا عناص1ر س1اختار الزاماً از ي1ك نوع نمي‌باشن1د بلك1ه اعضاي ي1ك س1اختار مي‌توانن1د از نوع‌هاي مختلف1ه از قبيل char ، … ، int ، floatباشند. ر6تعريف ساختا نام ساختار struct time { int hour ; // 0 – 23 int minute ; // 0 – 59 int second; // }; اعضا ساختار :مثال { struct account ; int acc_no ;char acc_type ; ]char name[80 ; float balance ;} ساختار accountداراي چهار عضو مي‌باشد. acc_noش1مار1ه 1ح1ساباز ن1وع int acc_typeن1وع ح1ساباز ن1وع char م1شخصاتص1اح1بح1ساباز ن1وع ر1ش1تة 80ك11رك1تري ‏name balanceم1انده 1ح1ساباز ن1وع float : به دو صورت می توان اعالن یک متغیر از نوع ساختار را نمایش داد روش اول: struct account { int acc_no; char acc_type; char name[80]; float balance; } cust1, cust2, cust3; روش دوم: struct account { int acc_no ; char acc_type; char name[80]; float balance; }; account cust1, cust2, cust3; به ساختارها مي‌توان مقدار اوليه نيز تخصيص داد ;}account cust = {4236, r, Nader Naderi , 7252.5 دسترسي به عناصر يك ساختار . بمنظور دسترسي به عناصر يك ساختار از عملگر استفاده .مي‌گردد .عملگر .جزء عملگرهاي يكتائي مي‌باشد : مثال cust .acc_no = 4236 cust .acc_type = r cust . name = Nader Naderi cust . balance = 7252.5 نکته: .عضو يك ساختار خود مي‌تواند يك ساختار ديگر باشد struct date { int month; int day; int year; }; struct account { int acc_no ; char acc_typer; char name[80]; float balance ; date lastpay ; }; account x, y ; x.lastpay.day x.lastpay.month x.lastpay.year اگرداشته باشيم بوسيلهlastpay آنگاه عضو .مشخص مي‌گردد :نکته مي‌توان آرايه‌اي تعريف نمود كه هر عضو آن يك ساختار باشد و حتي به آنها مقادير اوليه تخصيص نمود. { struct struc1 ;]char name[40 ;int pay1 ; } ;int pay2 ‏strucl cust[ ]= {nader, 3000 , 40000, ‏sara, 4200, 6000, ‏susan, 3700, 25000, ;} saman, 4800 , 2000, دو عدد مختلط را مي‌گيرد و،برنامه زير هر عدد مختلط را بصورت يك ساختار در نظر گرفته مجموع آنها را مشخص و نمايش مي‌دهد. #include <iostream.h> int main( ) { struct complex{ float a; float b; } x, y, z; cout << enter 2 complex numbers << endl ; cin >> x.a>>x.b ; cout << endl; cin >> y.a >> y.b; z.a = x.a + y.a ; z.b = x.b + y.b ; cout << endl << z.a <<  << z.b; return 0 ; } x = a + ib i2= -1 كه1ي1طور11ب y = c + id x+y =(a+c) + i(b+d) union ‌ب11اشد .ب11اا1ي1نت11فاو1تك11ه unionاز ن11ظر س1اخ1تار1يش1بيه structم1ي ع1ضوهائ1يك11ه ت11شكيل unionم1يدهد ه1مگياز ح1اف1ظه م1شترك1يدر 1ن1س1تفاد1ه 1از unionب11اعث 1ي11ماي1ند .ب11نابرا1ي ا ك11ام1پيوترا1س1تفاد1ه 1م ‌ن 1ي11ردد. ص1رف‌ 1هج1وئ1يدر ح1اف1ظه م ‌گ مثال : ‏union id { ;]char color [10 ;int size ;} x , y ه1ر كدام از متغيرهاي xو yي1ك رشت1ه 10كركتري ي11ا ي11ك مقدار از نوع int مي‌باش1د وكامپيوت1ر ي1ك بلوك حافظ1ه ك1ه بتوان1د رشت1ه 10كركتري رادر خود جاي ده1د ،براي colorو sizeدر نظ1ر مي‌گيرد. : مثال union xpq { int x ; char y[2] ; }p; x بايت دوم y[1] بايت اول y[0] اشاره‌گرها ()Pointers داده‌هائ1ي ك1ه در كامپيوت1ر در حافظ1ه اص1لي ذخيره ميشون1د بايت‌هاي متوالي از حافظه بسته به نوع dataاشغال مي‌كنند. نوع داده حافظه الزم مقادير 2بايت 32767تا –32768 4بايت 2147483647تا –2147483648 1بايت يك كاركتر ‏char 4بايت 3.4e38ت11ا 1.2e-38 ‏float 8بايت 1.8e308ت11ا 2.2e-308 ‏int ‏long int ‏double اشاره‌گرها ()Pointers ب1ا داشت1ن آدرس داده در حافظ1ة اص1لي مي‌توان براحت1ي ب1ه آ1ن داده دس1ترسي پيدا نمود و از طرف ديگ1ر آدرس ه1ر داده در حافظ1ه آدرس بايت شروع آن داده مي‌باشد. ;int x = 613 0 1 2 3 4 5 6 7 613 نکته : در كامپيوتر آدرس‌ها معمو ً ال دو بايت اشغال مي‌نمايند .اگر آدرس xرا در pxقرار دهيم آنگاه مي‌گوئيم كه pxبه xاشاره مي‌نمايد. ‏x ‏px آدرس متغير xرا بوسيله & xنشان ميدهيم و عملگر & را عملگر آدرس مي‌نامند. ‏int x , *px ; px = &x :مثال ; int y , x , *px ‏x ‏px 26 حال اگر دستور العمل ; x += 10را بدهيم: ‏x ‏px 36 حال اگر دستورالعمل * ; px = *px + 7بدهيم. ‏x 43 ‏px ; x = 26 ; px = &x آرایه یک بعدی و اشاره گرها اولين عنصر آرايه بوسيله ] x[0مشخص مي‌شود. آدرس اولين عنصر آرايه بوسيله &] x[0يا بوسيله xمشخص مي‌شود. آدرس iامين عنصر آرايه بوسيله &] x[i-1يا بوسيله ) x(i-1مشخص مي‌شود. دو دستورالعمل زير با هم معادلند . از طرف ديگر اگر داشته باشيم دو دستورالعمل زير معادلند. ; x[ i ] = 82.5 *(; 82.5 = )x + i ];float x[10 ;float *p ]; p = &x[2 ; p= x + 2 0 26.5 x 1 24.7 2 5.8 3 -73.2 4 69.0 5 100.5 6 -13.24 7 424.3 8 187.8 9 358.2 ساختارها و اشاره گرها مي‌توان اشاره‌گري را تعريف نمود كه به اولين بايت يك ساختار ( )structاشاره نمايد. ‏struct ‏struc1 { ‏x ‏int ‏fl o at ‏ch ar ‏int ‏px ‏a ‏b ‏c ‏d ; int a ‏float ;b ‏char ;c ; int d ; } x, *px ; px = &x عبارت x.aمعادل pxaمعادل (* a.)pxمي‌باشد. آرايه‌هاي دوبعدي و اشاره‌گرها يك آرايه دوبعدي بصورت تعدادي آرايه يك بعدي مي‌توان تعريف نمود. اگر xيك ماتريس 5سطري و 4ستوني از نوع اعشاري باشد قب ً ال اين ماتريس را با ];float x[5][4 معرفي كرديم .حال با استفاده از اشاره‌گرها بصورت زير معرفي نمائيم: ;]float (*x)[4 آرايه‌هاي دوبعدي و اشاره‌گرها ;]float (*x)[4 آرايه يك بعدي اول ‏ ‏x آراي ‌ه يك بعدي دوم ‏ ()x+1 آرايه يك بعدي سوم ‏ ()x+2 آرايه يك بعدي چهارم ‏ ()x+3 آرايه يك بعدي پنجم ‏ ()x+4 عنصري از نوع5 در برنامه زير يك آرايهint ايجاد شده و مقادير عناصر آرايه را به چهار طريق نمايش مي‌دهد. #include <iostream.h> #include <conio.h> int main( ) { int x[ ]={12, 25, 6, 19, 100}; clrscr( ); int *px=x; //مايد11ي1 ه م ‌ن1ي1لآرا1نصر او1ه ع11 ب1ه1شار1سا1 ، ندي1ن1 دو ا11ه ب1ي1ام آرا1ن for(int i=0; i<=4; i++) cout << *(x+i) << endl; //the second method for(i=0; i<5; i++) cout << x[ i ] <<  \n; //the third method for(i=0; i<=4; i++) cout << px[ i ]<<endl; //the forth method for(i=0; i<=4; i++) cout << *(px+i)<<endl; return 0; } تخصيص حافظه به صورت پويا يا (عملگر )new از عملگ1ر newبراي تخيص1يص حافظ1هب1ه ص1ورت پوي1ا م1ی توان اس1تفاده نمود ،در ضم1ن مي‌توان براي بلوك1ي از حافظ1ه ك1ه تخص1يص يافت1ه مقدار اوليه تعیین نمود. براي تخصيص حافظه باندازه 20مقدار از نوع intكه اشاره‌گر ptxبه آن اشاره نمايد بصورت زير عمل مي‌شود. ;int *ptx ;]ptx = new int [20 ptxبه اولين داده از نوع intاشاره مي‌نمايد. 1ي11مايد. ptx+iب11ه i+1ا1م1ينع1نصر از ف11ضاي‌پ11يوس1تها1شار1ه 1م ‌ن سپس آنرا مقدار داده و مجموع مقادير، عنصري از نوع اعشاري در حافظه ايجاد نمودهn برنامه زير يك فضاي .رامشخص و نمايش مي‌دهد #include <iostream.h> int main( ) { int n; float *ptr, tot = 0.0; cout << enter a value for n  << endl; cin >> n; ptr=new float [n]; for(int j=0; j<n; ++j) { cin >> *(ptr + j); cout <<  \n ; } for(j=0; j<=n-1; ++j) tot += *(ptr + j); cout << tot ; // in order to free the space use delete[ ] ptr ; return 0; } . عنصري از ساختار را ايجاد مي‌نمايدn برنامه زير آرايه‌هاي #include <iostream.h> #include <conio.h> int main( ) { struct rec { float a; int b; } ; int n; rec *ptr; clrscr( ); cout <<  how many records? \n cin >> n ; ptr = new rec[n]; for(int i=0; i<n; ++i) { cout <<((ptr+i) b=i) <<  ; cout <<((*(ptr +i)).a = i+0.5) << endl ; delete [ ] ptr; return 0 ; } . جا‌به‌جا مي‌نمايدswap برنامه زير دو مقدار اعشاري را گرفته مقادير آنها را بكمك تابع #include <iostream.h> #include <conio.h> void swap(float *, float *); int main( ) { float a,b; cin >> a >> b; cout << a << endl << b << endl ; return 0; } void swap(float *px , float *py) { float t; t = *px; *px = *py; *py = t ; return; } رشته‌ها و توابع مربوطه رشته‌ها در ، ++Cآرايه‌اي از كركترها مي‌باشند كه با كركتر  \0ختم ميشوند. ‏char name[ ]=  ;sara ‏s ‏a ‏r ‏a \0 رشته و اشاره گر هر رشته از طريق اشاره‌گري به اولين كركتر آن در دسترس قرار مي‌گيرد .آدرس يك رشته ،آدرس كركتر اول آن مي‌باشد .به رشته‌ها مي‌توان مقدار اوليه تخصيص داد. ;*name =  sara ‏char . رشته در نظر گرفته آنها را بترتيب حروف الفباء مرتب نموده نمايش مي‌دهد5 برنامه ذيل پنج اسم را بصورت #include <iostream.h> #include <string.h> void sort(char *[ ]); int main( ) { char *name[5] = {sara, afsaneh, babak, saman, naser }; sort(name);// display sorted strings for(int i=0; i<5; ++i) cout << name[ i ] << endl; return 0; } sort(char *name[ ]) { char *t; for(int i=0; i<4; ++i) for(int j=i+1; j<5; ++j) if(strcmpi(name[ i ], name[ j ]> 0) {// interchange the two strings t= name[ i ]; name[ j ] = name[ i ]; name[ i ] = t ;} return ; } تابع )strcmpi(s1, s2 رشته‌هاي s1و s2را ب1ا ه1م مقايس1ه نموده (بدون توج1ه ب1ه حروف كوچ1ك و بزرگ) اگ1ر رشت1ه s1برابرب1ا رشت1ه s2باش1د مقدار ص1فر و اگ1ر رشت1ه s1كوچكت1ر از رشت1ه s2باش1د يك مقدار منفي در غير اينصورت يك مقدار مثبت بر مي‌گرداند. تابع ) strcmp(s1, s2 رشته‌هاي s1و s2راب1ا ه1م مقايس1ه نموده اگ1ر s1برابرب1ا s2باش1د مقدار ص1فر و اگ1ر رشت1ه s1كوچكت1ر از رشت1ه s2باش1د ي1ك مقدار منف1ي در غير اينص1ورت ي1ك مقدار مثبت برمي‌گرداند. تابع ) strncmp(s1, s2,n حداكث1ر nكركت1ر از رشت1ة s1راب1ا nكركت1ر از رشت1ة s2مقايس1ه نموده در ص1ورتيكه s1كوچكت1ر از s2باش1د ي1ك مقدار منف1ي ،اگ1ر s1مس1اويب1ا s2باش1د مقدار ص1فر در غير اينصورت يك مقدار مثبت برميگرداند. تابع (strcat(s1, s2 دو رشت1ة s1و s2را بعنوان آرگومان گرفت1ه رشت1ة s2را ب1ه انتهاي رشت1ة s1اضاف1ه مي‌نمايد .كركت1ر اول رشت1ة s2روي كركت1ر پايان1ي \0رشت1ة s1نوشت1ه مي‌شود ونهايت ًا رشتة s1را برميگرداند. تابع (strncat(s1, s2,n دو رشت ‌ه s1و s2ومقدار ص1حيح و مثب1ت nرا بعنوان آرگومان گرفت1ه ،حداكث1ر n كركت1ر از رشت1ة s2را در انتهاي رشتة‌ s1كپ1ي مي‌نمايد .اولين كركت1ر رشت1ه s2روي كركتر پاياني \0رشتة s1مي‌نويسد ونهايتاً مقدار رشتة s1را برميگرداند. تابع (strlen(s رشتة sرا بعنوان آرگومان گرفته طول رشته را مشخص مي‌نمايد. تابع (strlen(s رشتة sرا بعنوان آرگومان گرفته طول رشته را مشخص مي‌نمايد. تابع )strcpy(s1,s2 دو رشتة s1و s2را بعنوان آرگومان گرفته رشتة s2را در رشتة s1كپي مي‌نمايد و نهايت ًا مقدار رشتة s1را بر مي‌گرداند. تابع (strncpy(s1, s2,n دو رشتة s1 , s2و مقدار صحيح و مثبت nرا بعنوان آرگومان گرفته ،حداكثر n كركتر را از رشتة s2در رشتة s1كپي نموده ،نهايتاً‌ مقدار رشتة s1را برميگرداند. براي استفاده از توابع مربوط به رشته‌ها بايستي حتماً در ابتدا برنامه >include <string.h#را قرار دهيم. : مثال #include <iostream.h> #include <string.h> #include <conio.h> int main( ) { char *s1= happy birthday; char *s2= happy holidays ; clrscr( ); cout << strcmp(s1, s2) << endl; cout << strncmp(s1, s2, 7) << endl ; return 0; } : مثال #include <iostream.h> #include <string.h> #include <conio.h> int main( ) { char *s = sara; clrscr( ); cout << strlen(s); return 0; } . می باشدstrcmp تابع زیر معادل تابع کتابخانه int nikstrcmp(char s[] , char t[] ) { int i=0; while (s[i]==t[i] ) if ( s[i++]=‘\0’ ) return 0; return (s[i]-t[i]); } فصل هشتم برنامه نویس شی گرا فهرست مطالب فصل هشتم .1تعریف شی گرایی (polymorphism) .2چند ریختی .3خاصیت ارث بری (stack) .4پشته .5ایجاد شی .6ارث بری .7سازنده ها و نابود کننده ها .8توابع دوست .9کالس های دوست .10توابع سازنده پارامتر دار .11توابع سازنده یک پارامتری .12 .13 .14 .15 .16 .17 .18 .19 .20 .21 staticعضوهای کالسهای تودرتو کالس های محلی objectاستفاده از ها بعنوان پارامترهای تابع برگشت اشیاء انتساب اشیاء آرایه اشیاء اشاره گر به اشیاء اشاره گر this توابع مجازی و پلی مرفیسم تعریف شی گرایی برنامه نويسي شئ گرا يا oopيك روش جديد برنامه ي نويسي مي‌باشد كه در آن از ويژگ ‌ ساختيافته همراه با چند ويژگي‌هاي قوي جديد استفاده مي‌شود .زبان برنامه نويسي ++Cامكان استفاده از oop را به راحتي فراهم مي‌نمايد. تعریف شی گرایی در ، oopبطور كلي مساله به تعدادي زيرگروه قطعات مربوط بهم شكسته مي‌شود كه براي هر زير گروه code و dataتهيه شده و نهايت ًا اين زيرگروه‌ها تبديل به unitها يا واحدهائي مي‌شود كه ( objectsيا اشياء) ناميده ميشوند. نکته مهم : تمام زبانهاي برنامه نويسي شي‌گرا داراي سه خصوصيت مشترك زير مي‌باشند : الف( encapsulation :محصورسازي) ب( polymorphism :چندريختي) ج( inheritance:ارث بري) محصورسازی () Encapsulation محصورسازي مكانيزمي است كه codeو dataرا بهم وصل نموده و هر دوي آنها را از استفاده‌هاي غيرمجاز مصون نگه مي‌دارد .شي يك مؤلفه منطقي است كه dataو codeرا محصور نموده و code باعث دستكاري و پردازش dataمي‌شود. ي ( polymorphismچ6ند ر6يخت ) چند ريختي مشخصه‌اي است كه بيك وسيله امكان ميدهد كه باتعدادي .از سيستمها يا عميات يا دستگاهها ،مورد استفاده قرار گيرد 6ري ( inheritanceار6ثب) 6 ارث بري فرآيندي است كه بوسيله آن يك شي ( )objectمي‌تواند خاصيت‌هاي شي ديگري را دارا شود. پشته ()stack پشته ساختاري است كه داراي خاصيت last in first outمي‌باشد .پشته فضاي پيوسته در حافظه اشغال مي‌نمايد. عملياتي كــه روي پشته انجام مي‌شوند عبارتند از : الف ،push :كه باعث مي‌شود يك عنصر وارد پشته شده. ب ، pop :كه باعث مي‌شود يك عنصر از پشته خارج گردد. ايجاد شي ()object بمنظور ايجاد ي1ك ش1ي بايس1تي از كلم1ة رزروشده classاس1تفاده نمود class .از نظ1ر ظاه1ر ش1بيه س1اختار ي1ا structمي‌باشد .پشت1ه را بعنوان ي1ك objectمي‌توان در نظ1ر گرف1ت ك1ه dataآ1ن شام1ل ي1ك آراي1ه و ي1ك ، tosو عمليات1ي ك1ه روي اين objectانجام مي‌شود عبارتست از push، initialize ، popكردن پشته. در اسالید بعد مثالی از نحوه ایجاد شی آورده شده است. مثال : #define SIZE 100 // this creates the class stack. { class stack ‏private : ;]int stck[SIZE ;int tos ‏public: ;) (void init ;)void push(int i ;) (int pop بدي1ن معن1ي اس1ت ك1ه stckو tosبوس1يله توابع1ي ك1ه عض1و objectنباشن11د غير قاب11ل دس1ترسي هس1تند .و اي1ن يك1ي از روش‌هاي محص11ور س11ازي اقالم داده‌هاست. بدي1ن معن1ي اس1ت ك1ه بوس1يله س1اير قطعات برنام11ه قاب11ل دس11ترسي مي‌باشد. ;} نکته : فق1ط تواب1ع عض1و مي‌توانن1د ب1ه متغيرهاي عض1و از نوع private دس1ترسي داشت1ه باشند .بايس1تي توج1ه داش1ت ك1ه اگ1ر نوع عضوي مشخص نگردد آن عضو به صورت اتوماتيك privateمی باشد. نحوه تعریف تابع عضو یک کالس )void stack : : push(int i { { ) if(tos = = SIZE ;cout << stack is full. ;return } ; stck[tos]= i ; tos ++ } عملگ1ر : :مشخ1ص مي‌نماي1د ك1ه تاب1ع متعل1قب1ه كدام objectمي‌باشد .عملگ1ر : :عملگ1ر scope resolutionناميده مي‌شود. : stack برنامه کامل #include <iostream.h> #define SIZE 100 // this creates the class stack. class stack { int stck[SIZE]; int tos; public: void init(int i); int pop( ); void push(int i); }; void stack : : init( ) { tos = 0 ; } void stack : : push(int i) { if(tos = = size) { cout << stack is full. ; return ; } stck[tos] = i ; tos ++ ; } int stack : : pop( ) { if(tos = = 0) { cout << stack underflow. ; return 0 ; } tos - - ; return stck[tos]; } int main( ) { stack st1, st2; // create two objects st1. init( ); st2.init( ); st1.push(1); st2.push(2); st1.push(3); st2.push(4); cout << st1.pop( ) << endl; cout << st1.pop( ) << endl; cout << st2. pop( ) << endl; cout << st2. pop( ) << endl; return 0; } ارث بری ارث بري فرآيندي است كه بوسيله آن يك شي ( )objectمي‌تواند خاصيت‌هاي شي ديگري را دارا شود. در اسالید بعد مثالی از ارث بری آورده شده است. مثال: class building { int rooms; int floors; int area; public: void set_rooms(int num); int get_rooms( ); void set­_floors(int num); int get_floors( ); void set_area(int num); int get_area( ); }; // house is derived from building class house : public building { int bedrooms; int baths; public: void set_bedrooms(int num); int get_bedrooms( ); void set_baths(int num); int get_baths( ); }; .ت1ف گرديده اس1 تعريbuilding ا1اختمان ي1 اي بنام سobject در روبرو ا نيز1ر بن1طح زي1ه و س1 تعدادي طبق،اختمان داراي تعدادي اطاق1ر س1ه : از طرف ديگرتوابعي كه براي شي تعريف شده.مي‌باشد ا داراي1ه تنه1هن1ف مي‌نمائيم ك1 تعريhouse ديگري بنامobject حال ي1ه دارای دو اقالم داده اضاف1د بلك1 مي‌باشbuilding ي1تمام اعضاي ش ً ا عم1 دراينج.ي مي‌باشد1ع اضاف1و چهار تاب ي1 از شhouse ي1ال ش : ارث مي‌بردbuilding نکته : در مثال قب1ل buildingرا base classو houseرا derived classم1ی نامن1د .ش1ي houseتمام اعضاي buildingرا دارا اس1ت بعالوه اينك1ه داراي متغيرهاي عضوي اضاف1ي bedrooms ، bathsو همچنين تواب1ع عضوي )(set_baths()، set_bebrooms()، get_baths()، get_bedroomsنيز مي‌باشد. . سازنده‌ها و نابودكننده‌ها ()constructors and destructors 1ي1ن1جام 1ت1تومات1يكاز ط1ري1قت11اب1ع ا ي11ا م1قدار او1ل1يه داد1نب11ص1ور ا ‏Initialization ‌ش1ود ب11نام ت11اب1ع constructorي11ا ت11اب1ع س1از1نده .1ت11اب1ع س11از1نده 1ت11اب1ع م1ي ‌ب11اشد. 1ي1س1تك11ه ع1ضوياز ك11السب11ود1ه 1و ه1منام ب11ا ك11السم1ي م1خصوص ا سازنده‌ها و نابودكننده‌ها ()constructors and destructors تاب1ع نابود كننده ي1ا ، destructorعك1س عم1ل تاب1ع س1ازنده را انجام مي‌دهد .وقت1ي ك1ه شي‌اي از بين مي‌رود بص1ورت اتوماتيك تاب1ع نابود كننده آن فراخواني مي‌گردد. توابع دوست ()friend functions ب1ا اس1تفاده از كلم1ة friendاي1ن امكان وجود دارد ك1هب1ه تابع1ي ك1ه عض1و كالس نمي‌باش1د اجازه دس1ترسي ب1ه متغيرهاي privateكالس را داد .براي آنك1ه تابع1ي را دوس1ت اعالن نمائيم از كلم1ه friendقب1ل از تعري1ف تاب1ع اس1تفاده مي‌نمائيم. در اسالید بعد مثالی آورده شده است. #include <iostream.h> #include <conio.h> class myclass { int a,b; public : friend int sum(myclass x); void set_ab(int i, int j); }; void myclass :: set_ab(int i, int j) { a=i; b=j; } //sum is not a member function int sum(myclass x) { return s.a + x.b; } int main( ) {myclass n; clrscr( ); n. set_ab(5,8); cout << sum(n); return 0 ; } : مثال نکته : -1كالسي كه از كالس ديگر ارث مي‌برد ،توابع دوست آن كالس را به ارث نمي‌برند .بعبارت ديگر يك ، derived classتوابع دوست را به ارث نمي‌برد. -2توابع دوست داراي مشخصه نوع ذخيره نمي‌باشند يعني توابع دوست را نمي‌توان بصورت staticيا externalتعريف نمود. كالسهاي دوست ()friend classes اين امكان وجود دارد كه يك كالس دوست كالس ديگري باشد .در چنين وضعيتي تابع دوست به كليه اسامي privateتعريف شده در كالس ديگر دسترسي دارد. در اسالید بعد مثالی آورده شده است. #include <iostream.h> class coins { enum units {penny, nickel, dime, quarter, half_ dollar}; friend class amount; }; class amount { coins :: units money; public: void setm( ); int getm( ); } ob; void amount :: setm( ) { money = coins :: dime; } int amount :: getm( ) { return money; } int main( ) { ob.setm( ); cout << ob.getm( ); return 0 ; } : مثال توابع سازنده پارامتردار امكان انتقال آرگومانه1ا ب1ه تواب1ع س1ازنده وجود دارد .معمو ً ال از اي1ن آرگومانه11ا براي initializeنمودن ش11ي در زمان ايجاد آ11ن اس11تفاده ميگردد. در اسالید بعد مثالی آورده شده است. : مثال #include <iostream.h> #include <conio.h> class myclass { int x, y; public : myclass(int i, int j) {x = i; y=j; } void show( ) {cout << x << endl << y; } }; int main( ) { myclass obj( 3 , 5); clrscr( ); obj.show( ); return 0; } يك پارامتري6توابع سازنده #include <iostream.h> #include <conio.h> class myclass{ int x; public: myclass(int i) {x=i;} int getx( ) {return x;} }; int main( ) { clrscr( ); myclass obj=126; //ن11نتقلك1 مi 126 ه11را ب cout << obj.getx( ); return 0 ; } عضوهاي static اگر عضو داده‌اي بصورت staticاعالن گردد اين بدين معني است كه كامپيلر فقط يك كپي از متغير مذكور را نگهداري نموده و تمام object ها بايستي بصورت اشتراكي از آن كپي استفاده نمايند .براي اينكار مي‌بايستي از كلمه staticقبل از اعالن عضو استفاده نمود. در اسالید بعد مثالی آورده شده است. مثال: #include <iostream.h> class shared{ static int a; int b; public : void set(int i, int j) {a=i; b=j; } void show( ); }; int shared :: a ; // define a void shared :: show( ) { cout << static a:  << a << endl; cout << nonstatic b: << b << endl; } int main( ) { shared x,y; x.set(1,1); // set a to 1 x.show( ); y.set(4,4); // change a to 4 y.show( ); x.show( ); return 0; } ( nested classesك66الس6هايت66ودر6تو) مي‌توان يك كالس را در يك كالس ديگر تعريف نمود. اما بعلت اينكه در ++Cبراي كالسها خاصيت ارث بري وجود دارد نيازي معموالً به تعريف نمودن يك كالس در كالس ديگر نيست ي ( local classesك66الس6هايم6حل ) وقتي كه كالسي در درون يك تابع تعريف مي‌شود اين كالس فق1ط براي آ1ن تاب1ع شناخت1ه شده اس1ت و براي تواب1ع ديگ1ر ناشناخت1ه مي‌باشد .چنين كالس1ي را كالس محلي مي‌نامند. در مورد كالسهاي محلي رعايت نكات زير ضروري است : .1 .2 .3 تمام توابع عضو بايستي در درون كالس تعريف گردند. از متغيرهاي محلي ،تابعي كه كالس در آن تعريف شده نمي‌تواند استفاده نمايد. از متغيرهاي عضوي staticنمي‌توان استفاده نمود. استفاده از objectها بعنوان پارامترهاي توابع از objectها مي‌توان بعنوان پارامترهاي توابع استفاده نمود و مكانيز ‌م انتقال آرگومانها و پارامترها بصورت call by valueمي‌باشد. برگشت اشياء ()returning objects مقدار برگشتي يك تابع مي‌تواند يك objectباشد. در اسالید بعد مثالی آورده شده است. #include <iostream.h> class myclass { int i ; public : void set_ i(int n) { i=n;} int get_i( ) {return i;} }; myclass funct( ); // return an object int main( ) { myclass ob; ob=funct( ); cout << ob.get_i( ) << endl; return 0; } myclass funct( ) { myclass x ; x.set_i(1); return x; } مثال: انتساب اشياء ()object assignment در صورتيكه دو تا objectاز يك نوع باشند مي‌توان يك objectرا بديگري انتساب نمود. در اسالید بعد مثالی آورده شده است. : مثال #include <iostream.h> #include <conio.h> class myclass{ int i; public: void set_i(int n) {i=n;} int get_i( ) {return i;} }; int main( ) { myclass ob1, ob2; obl.set_i(126); ob2= ob1; // assign data from ob1 to ob2 clrscr( ); cout << ob2.get_i( ); retrun 0 ; } آرايه اشياء ()array of objects امكان استفاده از آرايه در مورد اشياء مي‌باشد. بعبارت ديگر مي‌توان در برنامه ها آرايه‌اي از objectها داشته باشيم. در اسالید بعد مثالی آورده شده است. مثال: #include <iostream.h> #include <conio.h> class myclass{ int i; public: void set_i(int j) {i=j;} int get_i( ) {return i;} }; int main( ) { clrscr( ); myclass ob[3]; int i; for(i=0; i<3; i++) ob[ i ].set_i(i+1); for(i=0; i<3; i++) cout << ob[ i ].get_i( ) << endl; return 0; } اشاره‌گر به اشياء () pointers to objects در مورد اشياء نيز از اشاره‌گرها نيز مي‌توان استفاده نمود. از عملگر در اين مورد استفاده مي‌شود. در اسالید بعد مثالی آورده شده است. : مثال #include <iostream.h> #include <conio.h> class myclass{ int i ; public: myclass( ) {i=0;} myclass(int j) {i=j;} int get_i( ) {return i;} }; int main( ) { myclass ob[3]= {1, 2, 3}; myclass *p; int i; p=ob; // get start of array for(i=0; i<3; i++) { cout << p  get_i( ) << endl; p++; // point to next object } return 0; } اشاره‌گر )this (this pointer ه ر تابع عضو يك كالس داراي يك پارامتر مخفي بنام this pointerمي‌باشد this .اشاره به object خاصي مي‌نمايد. در اسالید بعد مثالی آورده شده است. #include <iostream.h> class pwr { double b; int e; double val; public: pwr(double base, int exp); double get_pwr( ) {return val;} }; pwr :: pwr(double base, int exp) { this  b=base; this  e=exp; this  val =1; if(exp = = 0) return; for(; exp > 0 ; exp  ) this  val = this  val *this  b; } int main( ) {pwr x(4.0, 2) , y(2.5, 1), z(5.7,0); cout << x.get_pwr( ) <<  ; cout << y.get_pwr( ) <<  ; cout << z.get_pwr( ) <<  \n ; return 0; } : مثال توابع مجازي و پلي مرفيسم ()virtual functions تابع مجازي ،تابعي است كه در base classتعريف شد و بوسيله derived classتغير داده ميشود .براي اعالن يك تابع مجازي بايستي از كلمه virtualاستفاده نمائيم. تغير تابع در كالس مشتق روي تابعي كه در كالس پايه () base class تعريف شده انجام مي‌شود. در اسالید بعد مثالی آورده شده است. #include <iostream.h> class base { public : virtual void vfunc( ){cout <<  this is base s vfunc( ) \n ;} }; class derived1 : public base { public: void vfunc( ) {cout <<  this is derived1 s vfunc( ) " << endl ; } }; class derived2: public derived1 { public: /*vfunc( ) not overridden by derived2.In this case, since derived2 is derived from derived1, derived1 s vfunc( ) is used */ } ; int main( ) { base *p, b; derived1 d1; derived2 d2; //point to base p = &b; p  vfunc( ); // access base's vfunc // point to derived1 p=&d1; p  vfunc( ); //access derived1's vfunc( ) //point to derived2 p = &d2; p  vfunc( ); // use derived1 s vfunc( ) return 0 ; } : مثال

51,000 تومان