صفحه 1:
صفحه 2:
دانشگاه
RE cy
اطلاعات
صفحه 3:
صفحه 4:
:مقدمه
obj 2 یک زبان همه منظوره است.
دستورالعملهاى اين زيان بسيار شبيه
عبارات جبرى و نحو آن شبيه جملات
انگلیسی می باشد. این امر سبب
مىشود كه 0 يك زبان سطح بالا
ل Pre rl pei در آن آسان
eae oe |
صفحه 5:
1 ا fad 4S
را بهارث برده است. اما برترى فنى )0
دیگری هم دارد: 2 اكنون دشىكراء
است. میتوان با استفاده از این خاصیت.
برنامهدهاى شى كرا توليد نمود. برنامههاى
7
كردناندء به سهولت تغيير و بهبود مى يابند
و قابليت اطمينان و يايدارى بيشترى دارند.
صفحه 6:
: اهم مطالب این کتاب
جلسه اول: «مقدمات بر نامه نویسی با لبب»
۳ «انواع اصلی»
«جلسه سوم: «انتخاب
جلسه چهارم: «تکرارب»
«جلسه پنجم: «توابع
جلسه ششم : « آرایهها»
صفحه 7:
«رجلسه هفتم: «اشارهگرها و ارجاعها
ORCC a eee 001
جلسه نهم: «شبیگرايي»
eS)y ا
جلسه يازدهم: «تركيب و وراثت»
صفحه 8:
(۷
مقدمات بر نامهنویسی با +C
ne
صفحه 9:
آنچه در این جلسه می خوانید
ند
۲- تاریخچهةه )+
00007
۴- شروع 009
۵- عملگر خروجی
ع۶- لیترالها و کاراکترها
/ا- متغيرها و تعريف آنها
PAP Eee Rr 0
53
٠-عملكر ورودى
صفحه 10:
هدف كلى:
آشنایی با تاریخچه و مزایای زبان برنامهنویسی (++و
ا ا اا يت
Oy
صفحه 11:
:هدفهاى رفتارى
0 مىرود 2000 يايان این حلسه بتوانید:
- مزاياى زبان ()2++ رابر زبانهاى مشابه ذكر كرده و
تفاوت آن را با زبان ) بیان کنید.
PPE ET OST Se MEY Se oe ae Ee
رابيان كرده و مشكلات هر دوره را به اختصار شرح
دهید.
1 SMB ENP eI as bee
- اصول سهگانهةً شیگرایی را نام برده و هر یک را به
اختصار شرح دهد. >
صفحه 12:
000 Lege enn] Peay arene ned De OTe) pte Cena Ce
م SER Tepe Tey
PEL e Tew Ee 0 SUC NT TY Sy eas eae
برنامهها استفاده کنید.
- نحوهّ اعلان متغیرها و شیوهٌ مقداردهی به آنها را بدانید.
- سه موجودیت د«لیترال» «کاراکتر» و «عدد» را شناخته و فرق بین
آنها را شرح دهید.
- علت و شيوههاى افزودن توضيح به كد برنامه را شرح دهيد.
- علت و شيوةٌ معرفى ثابتها در برنامه را شرح دهيد.
صفحه 13:
مقدمه
در دهه ١917١ در آزمايشكاهدهاى بل زبانى به نام © ايجاد
شد. انحصار اين زبان در اختيار شركت بل بود تااين كه در
ا 2-0 Ree
زبان منتشر شد و به سرعت نظر برنامهنویسان حرفهای را
Ey aed
هنگامی که بحث شی گرایی و مزایای آّن در جهان نرمافزار
رونق يافت. زبان 0 كه قابليت شى كرايى نداشت ناقص به
نظر مىرسيد تا اين كه در اوايل دهة ١9/8٠١ دوباره شركت
as Cl at ata eds) Ce Renn INE) ل 0 0 ل
طراحی نمود
صفحه 14:
OTe SEB pacman ioe] ی
شیگ رلیین یز دلشتاز آتززمانبه بعد شر کهای
Fon aye pelle eer yan pn yh Te
وجود بیاید و از قابلب تس از گاربیو لنتقال] نک استه
2
شود.
به همين دليل در سال ۱۹۹۸ زبان ()++ توسط موسسة
ene eeo] Relet ل ل 0 0
يك يارجه درآمد.
صفحه 15:
1-جرا 0 ++؟
Obj SO obj” رت
<در این زبان عملگرهایی تعبیه شده که برنامهنویسی
سطح يايين و به زبان ماشين را نيز امكانيذير مىسازد
ا را(
اين زبان بسيار كوتاه است
صفحه 16:
< -زبان ) براي اجراي بسياري از دستوراتش از توابع کتابخانهاي
استفاده ميکند و بیشتر خصوصیات وابسته به سختافزار را به اين
۳ Se
برنامة مقصدي که توسط كامپايار هاي ) ساخته ميشود بسیار
فشردهتر و كمحجمتر از برنامههاي مشابه در ساير زبانها است.
۱ 0 0 ل ا ا Ole
بردم لست
< و سرانجام آخرین دلیل استفاده از ()++ ورود به دنياي #0 است.
صفحه 17:
"- قار يخجة 10+
در دهه ۱۹۷۰ در آزمایشگاههای بل زبانی به نام © ايجاد
es ewe noe) weve eae) ا Pe Oye) ey
ا 0۱۰۱ Pere
SRE AB ا ae eee تا
ا ا ا Been RCS Ce eno fe Roe
ee Tee eee ROMKS) Sm nC ST SBS.) Dee) d
نداشت ناقص به نظر میرسید تا این که در اوایل دهة ۱۹۸۰
دوباره شر کت بل دست به کار شد و ©18[3112
۱
صفحه 18:
ب+ ترکیبیاز دو نبان ۵ و ان بود و قابلیهای
شجريئنيز دلشطز تنزمانبه بعد شركهائزيادى
كاميايلرهايىبرلى 0 ++ طرلحمىكرهند ليزلمر سبب
شد ت-فامهایی یب ا دن
بيايد و از قابليحتسانكابىو لنتقلل]-نكاسته شود.
به هميرجليزدر سلل99! نبان0)++ توسط موسسةً
لستانداردهاىملى]مريكا (00081©) به ش كإ[يستاندارد
ويتمابيه درآمد كاميايلزهاىكنونى به لين
لستاندارد يايبندند كتابهاضر نيزبرمبتاىهمين
لستاندارد نكابشيافته لست
صفحه 19:
2
اإيى «برنامه» دستورالعملهاى متوالى است كه مى تواند
توسط يك رايانه اجرا شود. براى نوشتن واجراى هر
dob به یک «ویرایش گر متن» و یک 9 احتیاج
داریم.
۱
نمونههای جالبی از محیط مجتمع تولید برای زبان /)++
به شمار میروند.
صفحه 20:
0 —F
ار را لستيعني8) و ه- 7 Oi
يكونمدلند Vy
مثال : اولین برنامه
۱ oars MLN pment)
Bree
NNN eS eee mcecharsid
م9
SI ce ee UR ara cca AN } م
aN acd 0
{
صفحه 21:
اولین خط از کد بالا یک «راهنمای پیشبر دازنده»
ا ار
-١ * كاراكتر # كه نشان مىدهد اين خطء يك راهنماى
پیش پردازنده است. این کاراکتر باید در ابتدای همةٌ
خطوط راهنماى يبش يردازنده باشد.
0
> نام بى دفايل كتابخانهاى» كه ميان دو علامت < >>
ین(
صفحه 22:
اين خط به كاميايلر ميكويد كه «بدنة اصلي برنامه» از كجا شروع
ميشود. اين خط داراي اجزاي زير است:
aul +4+O كت" | ew ed)
1۳ OM Ke ل ا nr rep rere!
Re Re hr rep ea Ors RECT) Ib Bertier)
صفحه 23:
خط آخر برنادء. «بدثة اصلى . . را تشکیل میدهند
دستورات برنامه از خط سوم شروع شده است.
دستور خط سوم با علامت سميكولن : يايان يافته است.
صفحه 24:
توضيم
<توضیم. متنى است كه به منظور راهنمايى و
درک بهتر به برنامه اضافه مى شود و تاثيرى
در اجرای برنامه ندارد. . کامیایلر توضیحات
ری ۶۱
< استفاده از توضیم سبب میشود که سایر
افراد كد برنامة شما را راحتتر درك کنند.
صفحه 25:
به دو صورت میتوانيم به برنامههای ++ توضیمات اضافه کنیم:
bill Sal cure 99 jl old La - >
متتی که بعد از دو علاهت اساش بیلید تا بایان
همان سطر یک توضیح تلقی میشود .
هر و ۳
علامت /: شروع شود و با علامت */ پایان
یابد یک توضیح تلقی میشود.
صفحه 26:
۵- عملکر خیوجی
علامت << عملكر خروجى در 0+ ناه دارد (به كن عملكر
درج نيز مىتويند).
ee] ا ا ا 6 م2
۳
Os ری مت مر نی خرس
|
[oe haa ye
مقدار ۶۶رابه خروجی اجه میفرستد که انح معمولا به
صفحهنمايش اشاره دارد. در نتيجه مقدار *؟ روى صفحه نمايش
درج مى شود.
صفحه 27:
2000
يك « »© رشتداى از حروف. ارقام يا علايم جايى استحد كه
ميان دو علامت نقل قول " ' محصور شده باشد.
GY > »یک هرف. رقم یا علامت قابل هاب است كه
ميان دونشانة '' محصور شده باشد. پس 7 و ۲۲و ۱ هر
کدام یک کاراکتر است.
به تفاوت سه موجودیت عدد» و «کارکظر» و «لیترال
رشتهاى» دقت كنيد: » يك عدد اسح '' يك كاراكتر اسحءدو
Neetu 52
صفحه 28:
/ - متغيرها و تعريف آنها:
«متغير» مكانى در مافظه است كه مهار مشخصه دارد:
202020602020606 .وقتى متغيرى را تعريف
مىكنيم. ابتدا با توجه به نوع متغير. ادرسى از حافظه
در نظر كرفته مىشود. سيس به آن آدرس يك نام
تعلق میگیرد.
صفحه 29:
در ++ قبل ازاين كه بتوانیم از متغیری استفاده ی
1
نحو اعلان یک متغیر
ANON She ۱۷
عبارت عمرةنوع متغير را مشخص مى كند. نوع
متغير به كاميايلر اطلاع مىدهد كه اين متغير جه
ل ال OE Ae eee
روی آن انجام داد.
صفحه 30:
عبارت حححه نام متغیر را نشان میدهد. این نام مداکتر
مىتواند اللا كاراكتر باشد. نبايد با عدد شروع شود. علايم
رياضى نداشته باشد و همهنين «كلمة كليدى» نيز نباشد.
مقداردهی اولیه
عبارت عدداندةاه: عبارت «مقداردهى اوليه» نام دارد. با استفاده
ازاين عبارت مىتوان مقدار اوليداى در متغير مورد نظر قرار
۰
دستور زير تعريف يك متغير صحيح را نشان مىدهد:
5 لك 10
صفحه 31:
- مقداردهی او لیه به متغیرها
در بسیاری از موارد بهتر است متغیرها را در همان محلی که اعلان
میشوند مقداردهی کنیم. استفاده از متغیرهای مقداردهی نشده
ممکن است باعث ایجاد دردسرهایی شود.
دردسر متغيرهاى مقداردهى نشده وقتى بزركتر مىشود كه سعى كنيم
متغير مقداردهى نشده را در يك محاسبه به كار ببريم. مثلا اكر »درا كه
مقداردهى نشده در عبارت © + ,د > بر به كار ببريم. حاصل برغير
قابل بيشيبينى خواهد بود. براى اجتناب از ينين مشكلاتى عاقلانه است
كه متغيرها ر! هميشه هنكام تعريف. مقداردهى كنيم.
a
۷ 209:
:جره
صفحه 32:
-٩ ثاتها
در بعضی از برنامهها از متغیری استفاده میکنيم که فقط یک بار لازم ۱ i
مقداردهی کنیم و سپس مقدار آنن متغیر در سراسر برنامه بدون تغییر باقی
میماند. مثلا در یک برنامعٌ محاسبات ریاضی. متغیری به نام ۱<) تعریف
مىكنيم و لن را با عاا.نا مقداردهى مىكنيم و مىخواهيم كه مقدار اين متغير در
TN ا ل ا ا ل ل 0ك
يك .يك نوع متغيراست كه فقط يك بار مقداردهى مىشود
د 1ن آن در ادامة برنامه ممكن نيست.
تعريف ثابتها مانند تعريف متغيرهاست با اين تفاوت كه كلمه
كم = shila ا ل 0
صفحه 33:
مثال تعریف ثابتها:
fot wuia()
I oo INN CoN AAU ACH
Daca haan miele eet ca
رت م۱ ROU A Aer noel تک
Pract ras MODOC ONC جر ار
ات ما
)۳۱29 9
retura OD;
0
ل لك
صفحه 34:
CS Bee
براي اين كه بتوانيم هنگام اجراي برنامه مقاديري را وارد کنیم از
SESE D TIS Arts 0
3
od دور << واو
حاطنس.: ناه يكستغير لست
صفحه 35:
ات تن
مس
ا Peek (one
ا
Ma كعدوا ۳ >> انوس
صفحه 36:
عملگر ورودی نیز مانند عملگر خروجی به شکل جریانی
رفتار میکند. یعنی همان طور که در عملگر خروجی
میتوانستیم چند عبارت را با استفاده از چند عملگر <<
|
میتوانیم با استفاده از چند عملگر >> چند مقدار را به
|
Faye)
abies ا ا
ae bead ا لل ل ل ا 0
ee ee eel el eee ا ا ل يي لل د
Mere pen) ل ال 0 ا اال 1
IDE Tey ae econ nee 1
صفحه 37:
مثال ١ - ١١ جند ورودى روى يك خط
1۳ ل On eae see Le
از ورودی گرفته و همان اعداد را دوباره در خروجی نمایش
مى دهد:
رم
صفحه 38:
(0
صفحه 39:
صفحه 40:
آنچه در ابن جلسه می خوانید
(- انواع دادةٌ عددی
1 متیر کب eee
le محاسبات اعداد صحيح
ا 0
3- عملكرهاى مقداركذارى مركب
7- انواع مميز شناور )ا
صفحه 41:
|
اا 0
book oy 2, ~'
Ns a زرا
ا 2 سر مرس
200101117
>?
صفحه 42:
با 0
| - سرريزى عددى
0 RCTs) rena)
-|١7 حوزة متغيرها
صفحه 43:
امعرفیر زواع Te) Ria 0
ا ا مشحیح در +برانام ببریدو
شعت اا ل هارا اه ار رك
ie ل ل ا ال 00
Se ne BNL era) ال لا لل ۱
- نوع بولین را تعریف کرده و متغیرهایی از این
۱ ل Sl
<<<
صفحه 44:
ed oD) eh Sie ۱۳ ازاين نوع
را در برنامهها به کار ببرید.
- مفاهیم «تبدیل نوع» و «گسترش نوع» را شناخته
Fa pe cee eI 1
rues Cee ا ا UPPER SERPENTS
رادانسته و بتوانيد محل وقوع آنها را كشف كنيد.
- عملكرهاى حسابى وافزايشى و كاهشى و
Be uCe ECB) ENT) ۱
صفحه 45:
مقدمه
ل ا ا لت
مى كنيم: اعداد . تصاويرء. نوشتهها يا حروف الفباء
صداهاء بوها و ... . بايردازش اين دادهها
el ET ا ا 2
SES) oon) ا الت ا Fae LD
قراراست همين كاررا انجام ات
دادههايى را بكيرند. آنها رابه شكلى كه ما تعيين
مى كنيم يردازش كنند و در نتيجه اطلاعات مورد
صفحه 46:
(-انواع دادهة عددی
در ()++ دو نوع اصلى داده وجود دارد: «نوع
صحيح و «نوع مميز شناور». همة انواع ديكر
FOO a at lt idee ERC Ce EL
دقت كنيد).
ساب
صفحه 47:
نوع صحبح
2 براى نككهدارى اعداد
صحيح (اعداد ٠ و ١ و " و...) استفاده
Ces ee nee et Tee)
به کار میروند و دامنه محدودی دارند.
صفحه 48:
صفحه 49:
نوع ممی شناور بای نگهداری اعداد اعشاری اسستفاده میشود.
اعداد اعشاری بیشتم برای اندازه گیمری دقیق به کار میروند و
دامته بر رگاتری دارند. یک عدد اعشاری مفل ۳6۲/۱۸۷ را
میتوان به شک[ ۷۳۹۳/۱۸۱۰ ۳۹۳/۱۱۰۱۲ ۸۷ ب۱"
۰ ۰ و با ... نوشت.
به این ترتیب با کم و زیاد کردن توان
عدد ۱۰ ممیز عدد نیز جابهجا میشود. به
همين دليل است كه به اعداد اعشارى
«اعداد ore 9 0 كويند.
صفحه 50:
عتغیر عدد صحیح -6
7 ey DSS per rary Se fe ا
| eee ele ah ee
محدودةٌ مقاديرىواسمنكه هر كدام ميتولنند
دلشته باشند
این ا eR EST Se SEES
ee ae BIS ere RCL Re arn) سا
عامل دارد. يعنى ممكن است روى يك رايانه, نوع
ا دو بايت از حافظه را اشغال كند در حالى كه روى
رايانهاى از نوع ديكر نوع ابه جهار بايت حافظه
520030006
صفحه 51:
حداكثر مقدار قابل | حداقل مقدار قابل ۳
روم و رگ گرگ 2 ۶5
وقتى برنامهاى مىنويسيد.ء توجه داشته باشيد
000 ron pera cer Ser ree ete)
FOOWOnE DEES STE NEU ep ESE Ope
للاراهدر ندهيد. لام
1ك wy ك1 1۳1۳۳1
999
APP Pose =
0 93
FS
صفحه 52:
۳ RY fe On Eee
)++ مانند اغلب (بانهاى
برنامهنویسی برای محاسبات از
عملترمان مسع (ج) ر تفریق (-) ر
ضرب )4( ess s )7( ر بافیداندد
استفاده میکند.
صفحه 53:
eS g nt 551 cla Klos — F
براىدستكارىمقدار متغيرهاىوصحيح دو عملكر ++)(
ما ار
اما هر کدام از این عملگرها دو شکل
متفاوت دارند: xe » PSS
000 1
a KS
RUS WORE ies Teen pee Tee eH
صفحه 54:
ذر شكل ر زر اند منعیر ماس
i eae
CUP (oly yaks aed yl
ورگ عاذ همل شوه : 1 =
سل 7227 انتذا مقدار متعبر در
محاسبات به کار میرود و بس از ان
مقدار متقی ر بتک واه و افزای ش را
کاهت م باند.
صفحه 55:
++ عملكرهائديكرئدارد كه مقداركذارئدر
ا الس ل ا ال
عملكر +- موتولنيم هشر واحد به ب لضافه
end rend ا لا
Local, gtd Jolee UL poi
این تفاوت که کوتاهتر است. به عملگر +- «عملگر
- مرکب» میگویند زیرا ترکیبی از عملگرهای + و
08
صفحه 56:
عملگر هایقدل رکنلووع رکب 5
قبلا از عملكر - براى مقداركذارى در متغيرها
استفاده كرديم. )++ عملكرهاى ديكرى دارد كه
مقداركذارى در متغيرها را تسهيل مئنمايند.
م ار
| 0
صفحه 57:
نحوة عمل اين عملكرها به شكل
ل
||
sw
صفحه 58:
0 ta
eee eT Poa UOe 7 | re ere ECs
7 7 ree Bam a)
رایانه ذخیره شود. ابتدا باید به شکل دودویی تبدیل شود:
199.۳9 < 0000.00 001
۱
سمت راست ممیز منتقل میکنیم. البته با هر جابجایی ممیز. عدد
حاصل باید در توانی از ۲ ضرب شود:
499.9 2 *
OY Ur sie cae nl Levy edo le
39,20 48S en al 93 59) Wg
صفحه 59:
در Cos aw ٠ ممیز ناور وود دارد:
انواع ممیز شناور
نوج acer ea
عدد استفاده میکند.
2
ار
صفحه 60:
جدول تخصيص حافظه براى متغيير هاى مميز شناور
تعداد بیت برای ذخیرهسازی
الا سس ۳ اس ۳ سس
فوع متغیر
ها بیتی
double OF
(Cre
صفحه 61:
Tee Se eee |
ام
od ام
lm Acie
double x,y=O;
صفحه 62:
اعداد مميز شناور به دو صورت در ورودى و خروجى
نشان داده میشوند: به شکل.«ساده» و به شکل
«علمی».
.۲ ۳ علمى- ©
1 9997
مشخص است كه ا
دادن اعداد خيلى كويت و همينين siacl
ا |
35
صفحه 63:
٩ - نوع بولین اس
این نوع فقط میتوانند مقدار ۲۶ با ۳۵۲
vec ae eee) 0
معنى نادرست است.
اما اين مقادير در اصل به صورت ١ و - درون
رايانه ذخيره مى شوند: ١ براى 057و ١ براى
Pate
صفحه 64:
وق یت
یک کاراکتر بک حرف. رقم با نشانه است که یک
شمارهة منحصر به فرد دارد. به عبارت عامبانه. هر
کلیدی که روی صفحه کلید خود میبینید یک
کاراکتر را Olas, میدهد.
مثلا هر یک از ae 0 تا ابا و ر ‘a تال و هر
یک از اعداد "۰ تا 54 هی نا
روی صفحه کلید را یک کاراکتر =a
صفحه 65:
1 ne epee
کلیدی 2۵7 استفاده میکنيم. یک کاراکتر باید
درون دو علامت آپستروف 7
باشد. پس () یک کاراکتر است؛ همچنین ۸"
ار( ره را
یک عدد صحیح است .
Ue,
thar 7 2007
صفحه 66:
0002
يك نوع شمارشى يك نوع صحيح است كه توسط
poe ws س ترد تسر تتريت بك نرق
شمارشی به شکل زیر است:
TNT ار در ره
on eed pened ۰ ۶
ee eS Cay Way ee 2 TINA ett
رم ل
صفحه 67:
به عنوان مثال به تعريف زير دقت كنيد:
0301١ , 60707 , 026007 POC OEO MIND, ERT, ره( مسمم
امه اف دب ای Pia
59 جدبد ر.زا) و محدوده Sor ر
ی من تس aoe مت رت
> ۱
کر از نوع ر را تعریف شدهاند. آنگاه ار
بامقدار 700200 2و2 ا DAD DE
مقداردهى شده است.
صفحه 68:
میتوان Presb) fence elo كم رابه شمارشكرها
نسبت داد:
Ow
همچنین دو یا چند شمارشگر در یک فهرست
میتوانند مقادیر یکسانی داشته باشند:
(0,00-0- :1:00:00 4- 00ج ٠ ()- ا نا را(ز):), (0- 0 ()) وسح 9 «سحم
ااانا
DODO, POE, OEO, PLY, CR} راف
> ee ee ee ee eee Y oe ee ۱۳ | | ee rs
۳۳۲۲۳ 7 re
صفحه 69:
نحوةٌ انتخاب ناموشمارشكرها آزاد است اما بيشتر
ا ا ا
| - برای نام ثابتها از حروف بزرگ استفاده
ناکنشمارشگر باید معتبر باشد-
eye sere Te een ag
۷ ا
21000005
eed ا ال
صفحه 70:
شمارشگرهای :ام تباید در محدودههای
مشترک استفاده شوند. برای مثال تعر یفهای زیر
را در نظر بگیرید:
eau )سرت 69۱۵۵, ,00[
pun Croup, B,C}
دو تعريف بالا *.ر :از است زيرا شمارشكر 00 در
ا 0
صفحه 71:
ا eae للم
DIC) ا ا ا ا PE
به توضيحات اضافى نداشته باشد.
مثلا تعاريف زیر مررر هستند زیرابه راحتی
تام و نوع کاربرد و محدوده مقادیرشان درک
مى شود:
ORPOGE) اه
۱ ۱(
۹( ی
pon Dorney o (۳07۱/۷ ۱۸۱۱۷
pre Brak {OOLE,PEOOLE}
صفحه 72:
وا
در محاسباتی که چند نوع متغیر وجود دارد.
جواب همیشه به شکل متفیری است که دقت
بالاترى دارد. يعنى اكر يك عدد صحيح رابا
سک عدد مسر اور عم 0 با
pe ream ere age pe 2 00
شناور را به نوع صحیح تبدیل کنیم از عبارت
0 0 نوع
گفته می شود
صفحه 73:
مثالهاى زير تبديل نوع و كسترش نوع را نشان مىدهند.
مثال گسترش نوع
پرنامةً زیر یک عدد صحیح را با یک عدد ممیز شناور جمع میکند:
اسمن
double udue: 0 ا اي 100
۸۰۶ 7
:9.0 2 م بل
تشه
pou << "pH" <<p <<" qe" << << pod
Peake
صفحه 74:
۳- برخی از خطاهای برنامهنویسی
«فطای (مان کامپایل»
an Oo re ار
ل ال رلك
آنها را رفع نمود.
«خطاى زمان اجرا»
کشف اینگونه خطاها به راحتی ممکن نیست و
keer tee eee Lely 2
خطاهای زمان اجرا سبب میشوند که برنامه به طور
با رت تر برس
صفحه 75:
-١6 سرريزى عددى
0 ا KUT peo) treed e
آن متفیر بیشتر باشد. اگر سعی کنیم در یک
۱۹ eo متغير
متغير فراتر باشد. متغير «سر ريز» مى شود.در
جنين حالتى مىكوييم كه خطاى سرريزى رخ
دادة است.
صفحه 76:
مثال ۱۳ - ۲ سرریزی عدد صحیح
۱
مر
۳ «گردانیده» میشود
ا از ۱
سرريز شود., نماد “ا به معناى
بىنهايت رابه دست مى دهد.
صفحه 77:
صفحه 78:
eowa aye 2ك
اصطلاح «بلوک» در ()++ وایه مناسبی است
که میتوان به وسيلة آن حوزة متغير را
مشخص نمود. یک بلوک برنامه. قسمتی از
برنامه است که درون بک جفت علامت
كروشه 1 محدود شده است.
eee a ee oz
ما
صفحه 79:
|02 nn Sle
میشود وتا پایان همان بلوى ادامه مى يابد.
خارج از لن بلوى نمى توان به متغير دسترسى
داشت. همچنین قبل از این که متفیر اعلان
شود oll Pel Spe را استفاده نمود.
مى توانيم در يك برنامه. جند متغير متفاوت با
1 يك نام داشته باشيم به شرطى كهدرا
صفحه 80:
يايان جلسه دوم
صفحه 81:
<¢ aa 5 اد
صفحه 82:
آنچه در این جلسه می خوانید
-دستور “ا
aa aT ee
ام 00 رت
ا 0
اا كت
-ارزیابی میانبری >>>
صفحه 83:
/- عبارات منطقى
4 - دستورهاى الك تودرتو
ا ا oa
اا د
۱ ۱- عملگر عبارت شرطی
(- کلمات کلیدی
صفحه 84:
koa ناه نی تکار وشيوة
یت e: زرا شناخته و آمن را در برنامهها به کار
Pee 0 noe ri پیچیده استفاده کنید.
Ferre AES Yer UCIT Ua Pee BEAU Toe Se
25
- بلوک دستورالعمل را تعریف کنید.
a WT Ome IAF BCS ete ال ا
شرطى به كار ببريد.
- از شرطهاى مركب استفاده كرده و ارزيابى ميانبرى را شرح دهيد.
- «كلمة كليدى» را تعريف كنيد. <<<
صفحه 85:
مقدمه
همه برنامههایی که در دو جلسه اول بیان شد. به
شکل ترتیبی اجرا میشوند. یعنی دستورات برنامه به
ترتیب از بالا به پایین و هر کدام دقیقا یک بار اجرا
eS bee) Oe Orne ge] Ey oP) 00
ا pete
Sis له
صفحه 86:
de) Ins
ره رم 000 ۴
رب_ ریگ که شرط ناسیده میشود بک عبارت
صحیح است (عبارتی که با یک مقدار صحیح برآورد
eel 7 eet eye IP) ۱
با ۳ اس اد در 3
ردم ری مقدار عبر صفر داشته باشد. دفت کنید که
شرط باید درون پرانتز قرار داده شود.
صفحه 87:
۲- دستور صاد. .1
دستور Rebbe مى شود بسته به اين كه
Ber) ل ل الل ا 37
اجرا گردد. این دستور به شکل زد
فرعى اجر! كردد. نإو اين «ستوع بع ۱۳2
9 9 1 7۳*۳77
فرمانهایقابل جرا هستند اگر مقدار شرط غیر
صفرباشد !..... . لجرا خولهدشد
وگرنه 6
صفحه 88:
۱ | Re Sens |e
70[
:0 لک 1
ا ا ا ا ال
e << و << بر
ا ل ا ل لضا
رس Sr of ere ie 5
صفحه 89:
ی
در (++ شش عملگر مقایسهای وجود دارد:. و
Se مد کت ارات و هر بت ازااین
شش عملكر به شكل زير به كار مىروند:
« کوچکتر از بلستتا بت«
بزر-گتر از 7 لستا/ ۸
« کوچکتر یامساویر لستاا رت :
«< بزر گر بامساویب لست// ,۰ -.-..:
> سات كا PAY Heal py
> مساووعبانیسار ح1 .:
صفحه 90:
اينها مى توانند براى مقايسة مقدار عبارات با
هر نوع ترتیبی استفاده شوند. عبارت حاصل به
عنوان يى شرط تفسير مىشود. مقدار اين
شرط صفر است اگر شرط نادرست باشد و غیر
pe wee y Rasen ge o) ۱
عبارت برابر باصفرارزيابى
مىشود.ء به اين معنى كه اين شرط نادرست
است.
صفحه 91:
عتغیر عدد صحیح -6
7 ey DSS per rary Se fe ا
| eee ele ah ee
محدودةٌ مقاديرىواسمنكه هر كدام ميتولنند
دلشته باشند
این ا eR EST Se SEES
ee ae BIS ere RCL Re arn) سا
عامل دارد. يعنى ممكن است روى يك رايانه, نوع
ا دو بايت از حافظه را اشغال كند در حالى كه روى
رايانهاى از نوع ديكر نوع ابه جهار بايت حافظه
520030006
صفحه 92:
دقت کنید که در ++ عملگر با
عملگر eee Slee mS EE
يك مساوى تكى " -"است ولى عملكر
برابری. دو مساوی " - - " است.
مثلا دستور DO = «۶ مقدار ۳۳را در JS x
میدهد ees) 00 99 ا الك
OSE ee ed oe ames wee ay
تفاوت اهمیت زیادی دارد.
صفحه 93:
۴- بلوکهای دستورالعمل
يك بلوك دس تورالعمل زنجيرداى از
دستورالعملهاست که درون براکت }{ محصور
شده. مانند :
} مها ۱
may
1 = tevop
۱
و 00 مانند 256 By
صفحه 94:
(QS تسم 4 Wl
ee)
00 ال رو زا ۱۳9۳
0 ات ان Sees cae
(مر< 6 ۸
1 Wan eae ncn 89a
له >> رر >> ۲ > ۲ >> و ک> ام
0
صفحه 95:
int wain()
- EPR
A ih ا ا
۱ 2
7 0
۲7۲ << ۲
زلجج >> و >> 2۲ و >> ابرم 1
۱ ا ا لي
صفحه 96:
Tea ae aa)
شرطهايى مانند و re) لت ا
oe لت ا ل ل لات
ازعملگرهای منطقی ری و فك (wot)
oe DSc ee REDE Te Rasy ۱
EE
درسنلستلاگر و تنهااگر هم وهم هر دو درسساشند
ا ا ا ا ا 0ك
درست است اگر و تنها اگر نادرست باشد
يز 2 0
اكر 900 براير صفر و كوجك تر از ب باشد.
صفحه 97:
Spe Pear و معمولا با
استفاده از جداول درستى به كونة زير بيان مى شوند:
©! م Ply و م +88۵ و م
تس 2 ۱ ۳ 4 4۳ ۳ TD Ay
cay 0001
۳ کر &€ ٩۳۲۹
طبق جدول = ز 2
ابه ماس © نا
درست است.
صفحه 98:
0 SS a
به دو عملوند نیاز دارندتا ۳
درستی «dd مقايسه راروى آنن د سم
ا ل عم حالت گفته شده. يا ارزيابى
عملوند اول به سرعت نتیجه معلوم میشود. این
کار . ...7 نامبده میشود.
صفحه 99:
fier.) bere) By Pe oad
یک عبارت منطقی شرطی است كه يا درست است
ال ee DEP اا ك6
معنای نادرست و هر مقدار غیر صفر به معنای
درست است. به عبارات منطقی هم
مى كو يند.
صفحه 100:
چون همه مقادیر صحیح ناصفر به معنای
تغيير قيافه مىدهند. براى مثال دستور
وقتى غير صفر است عبارت را
چاپ میکند زیرا عبارت منطقی وقتى
مقدار . غیر صفر است به عنوان درست تفسیر
رک ری
صفحه 101:
کد زیر را نگاه کنید:
ل ان جارج ب اج جز ب" >> انون ( 200
دستور خروجى فقط وقتى كه ناصفر
ا ۰( وقتى ناصفر
ممكن است فراموش كنيم كه عبارات منطقى
مقادير صحيح دارند و اين فراموشى باعث
ايجاد نتايج غير منتظره و نامتعارف شود.
صفحه 102:
یک خطای منطقی دیگر. این برنامه خطادار است:
( )ددص int
00 11 2
Prat A (ran ا
۱ woo
LOS eal wee) a Sen UH
i
منشأ خطا در برنامة بالا اين اصل است كه عبارات
منطقى مقدارهاى عددى دارند.
صفحه 103:
دستور ها عنتخابتودیتو 6۰
دستورهاى انتخاب مىتوانند مانند
دستورالعملهاى مركب به كار روند. به اين
ا 0 000
اين روشء جملات تودرتو مى كويند.
صفحه 104:
Ws
وقتی دستور -حا..:به شکل تو در تو به
کار مییود. کامپایلر از قانون زیر جهمت
تجزیه این دستورالعمل مر کب استفاده
نس تاد
.هر حطو با آخرین جفت مى شود.» 1
صفحه 105:
phe P bly —4
ee TCD ee at ا | ee
مجموعهای از حالتهای متتاوب یاموازی به
ebe rang Or مىرود. در این حالات فقط 01
شامل دستور بعدی خواهد بود. این قبیل
ا ل ا ا
صفحه 106:
ا 0 000
برنامة زير يك نمرةٌ امتحان را به درجهٌ حرفى معادل تبديل م ىكند:
)0 با
مت ۱۱
ied A ا De atk ce
(Sore > (00) cou << "Crm: the sore & out oP range”;
be P (sere >= OO) cout << "You wate & 00 @." << ead;
eee (sare >= CO) cout << "You gate & ©." << pod;
(Gere >= TO) rot <5 "Your gk & 1 0.” << ead;
BO) cout << "Your yates & oO." << ead => ۱
tiated) Doo nce A SS ۱
vat << "Cro: tot score ts vu DP raaw.")
صفحه 107:
er) id یر
دستور ,.... , میتواند به جای ساختار , ,, , برای
۱
به كار رود. نحو دستور . . . به شكل زير است:
صفحه 108:
ابن دستور ابتدا تسووومووو را براورد می کند
ay
عبارت یک عبارت اختیاری است.
ا 70 آن راقید Tene)
نكنيم. -20200 بايد به شكل يك نوع
هابايد 2 ١ صحيح ارزيابى شود و
9 تها کار ۳
ثابتهای صحیح باشند ,
cap ene)
fo a هاء. سم val
اس
صفحه 109:
۱ دستور
قرار بگیرد. بدون این دستور. اجرای برنامه
پس از این که مربوطه را اجرا کرد از
دستور وت نمیشود. بلکه همةً
های زیرین را هم خط به خط میپیماید
و دستورات مقابل آنهارا اجرا میکند. به
۱
PAPAS SNC e aer ae OR 1
صفحه 110:
1- عملگر عبارت شرطی
3 2
عبارت برابر با مىشود واكر
2 اا yr)
= میشود. 7
نشانههاى 12و ' كل زير استفاده مى كند:
ل ل لك
صفحه 111:
مثلا در دستور انتساب زير:
Qxiv } ركم ) = wia
اگر W992 ly glade WAL 2<<y نت قرار
میدهد واكر ر>:. نباشد مقدار .ب را درون
als <i مىدهد. يعنى به همین سادكى و
اختصار مقدار کمینة ::و :درون متغير
SESS قرار میگیرد.
صفحه 112:
ا Pp
Pe ar cen an Comer a Cone
أيك كلمة كليدى در يك زبان|
إبرنامهنويسى كلمهاى است كه از قبل |
اتعريف شده و براى هدف مشخصى |
sw! dud 7
با آمعراع ی 77 نوع۲ تن[ لک 7337777
صفحه 113:
qtr
كاد ال
Dust
dodouble
delete
صفحه 114:
اه
۲7۷
:
نله
ادن
wit
Dr
eprotevted
سم سم مس رها
منود
ost _ اد
اه
PROE
۱1199 ۰
صفحه 115:
rigid
صفحه 116:
دو نوع كلمة کلیدی وجود دارد:
۱
00
ك5 كلة رررو كد : كليةاى است كه رى دستور
Bere ا اك ا ان 2 ام
م ا 20077
يك شناسة استاندارد كلمهاى است كه یک نوع دادةٌ
استاندارد از زبان را مشخص مى كند. كلمات كليدى
إددطا و شناسههاى استاندارد هستند
صفحه 117:
پابان جلسه سوم
صفحه 118:
صفحه 119:
: آنچه در این جلسه می خوانید
کر را
'!- خاتمه دادن به يى حلقه
NPA ae
eae yee ae ie
OE eee) وا
7- دستئور 7712
۷- دستور 1۳۳
- تولید اعداد شبه تصادفی
صفحه 120:
re 0 ا از مطالعة این جلسه بتوانید:
-شخاخستینانلواع! فناخاخهاز های اتکیوار وتنهتوآکها و
ares Byte te ایک واگ ر| شناخته و تفاوت آن با دستور
while را بیان کنید.
- نحو دستور را شناخته و با استفاده از آن حلقههای
گوناگون بسازید.
- حلقههای فوق را به یکدیگر تبدیل کنید.
- علت استفاده از «دستورات يرش» را ذكر كرده و تفاوت
سه دستوز ا ل ل ل
- اهميت اعداد تصادفى را بيان كرده و نحوةٌ توليد «اعداد
شبه تصادفى» را بدانید.
صفحه 121:
dovio
"را احرای بی در بی یک دستور بابلوکی از
دستورالعملها در يك برنامه است. با استفاده از
تكرار مى توانيم كنترل برنامه را مجبور كنيم تابه
200 0 ا ل SPCC ce yee.
ب+ دارلیسه دستور تکرار لستدستور ...۰
gid 9 gw ۳۲
به علرمطبيعرجر خهمانند شا حلقه نيز ناميده
6
تست رت
صفحه 122:
el oer
به جای .یک شرط قرار میگیرد و به جای
دستورى كه بايد تكرار شود قرار مى كيرد.
سر مر ی 0
eG ۳3 بعد از
صفحه 123:
ا 000
اين برنامه مقدار ١ 7۰ 7۰ بر -.,- را براى عدد ورودى > محاسبه مى كند:
سم زر
Scns ies
0 (onc eh ee casi e ee
۳
0 7(
(۰ > طابر
00
Pe Nessa ed ec SSS en creo
<< an;
صفحه 124:
00
| eo 7 eC
اي لت ا سب
لك 001 cae
تنفاده اد
) ۶ )< a) breck;
ا ae
i
Pr Noe aan one ee ل
1
صفحه 125:
ese ee ea ee
۱ ارت ررق پا OPCS
معادلههای زیر تعر یف میشوند:
| اور تا وتا لا ۱
مثلا براى 1-2 داريم:
F,=F,,+F,,.=F,+F,=0+1=1
يا براى 1-3 داريم:
F,=F,,+F,,.=F,+F,=1+1=2
و برای 1-24 داریم:
F,=F,,+F,,=F,+F,=2+1=3
صفحه 126:
1 OTe D
ا 0
4 ا
7 سین 3 ay
ارات
se <<" << bound << ":\n0, 1"; نت
long f0=0, 4
raat .)1۳۷6(
f2 = f0 + fl; {
nt acl.) ل fe
eee ۰ 2
fl; زا
2۶۳ < ۲1
ی 1
صفحه 127:
odie (0) Pep ese YUL)
Pre ee Se ore eRe SE NON NE Mle pats EE SOND. 18 (0) 1
بلافاصله اجراى كل برنامه را يايان مىدهد:
اس
iat
Pea Sone ence Vcd ot ee
۱ arate nce
Dea BAS Coens ا oN SOD
بسا ۳۵۶۵, ۳2۵:
{ loo PO = PO + FA;
P (PO > bowed) ext(O);
pout <<", "<<PO;
PO = Pd;
بهم د مم (
صفحه 128:
متوقف كردن يك حلقة نامتناهى :
با فشردن کلیدهای 0۳۱*0) سیستم عامل یک
برنامه رايه احبار خاتمه مىدهد. كليد 001 را Perle)
نكّه داشته و کلید ()روى صفحهكليد خود را فشار
O 000
صفحه 129:
| را
۱
ات ال
AS ASA اهلد
م
اين دستور ابتدا 25-7264 را اجرا م ى كند و 7
شرط درست بود حلقه دوباره تكرار مى شود
و
و
1
صفحه 130:
دستور عالانب..ع مانند دستور علاربه است.
rae اين
Gale 45 Cowl lp Soda ١
هميشه بدون توجه به مقدار ٩<..بنطلاع
Soe eed) eee ا Bes
ماما حلقةٌ حانطار میتواند اصلا اجرا نشود. . ۰
ز نم رون
آن تنظتم 3p
صفحه 131:
و
eee ore Pee ence 1
مر
ل 0 1
Vice a ae ا A Cohn
صفحه 132:
PO Pppec Ce kes ee Wo
FREE ااا
زير تعريف مى شوند:
0۲-4 , ۱ - ارمیه
برای مثال. به ازای < « در معادلةٌ دوم داریم:
7ك 1010
همچنین برای 2 داریم:
2) 99
0
6۱ - 5) 5 215055 5
صفحه 133:
برنامةٌ زیر همةّ اعداد فاکتوریال را که از عدد داده شده کوچکترند. چاپ
میکند:
6
سا
Von oc لانن
joi >> bout
۱
۳
2
mews ۲
رسک ۲
i
white (P< bourd)
{
صفحه 134:
عبارت 05ص دبراى ييش-بردن متغير كنترل
حلقه به كار مىرود. اين عبارت يس از اجراى
210۷ ارز یابی می گر دد.
صفحه 135:
بنابراین زنجيرة وقايعى كه تكرار را ايجاد میکنند
عبارتند از:
| - ارزیابی عبارت له
۳ -بررسی شرط .._.. .اگر نادرست erie)
ee ا ري يد 7
a صهلبعبارتهای اختیاری هستند. یعنی
مى تواني آنها را در حلقه ذكر ذ awe
صفحه 136:
eer See Ree oe meen a Cael on heen Mele)
اين برنامه همان تأثير مثال ١-ه را دارد:
الا
{ فش
۱ ی
كا eaten
foag su=O;
<=
regen pene 7 als Fae rye e ا ال
ey as مىشود (مانند ادر مثال بالا) حوزةً آلن متغير به هان
ا متا ocd eee eC
۳ نتبجة دیگر این است که میتوان از نام مشابهی در خارج از حلقةً
0000 dy soe cep eee Te eT pe)
صفحه 137:
مثال ۱۲ Ie و
برنامة زير ده عدد صحيح مثبت مثبت را به ترتيب نزولى جاب مى كند:
صفحه 138:
۱
دارد: Oe SIDE CLIPS a et tie
اه نز
Por (at w=OS, v=, w%u > O; w -= 9, ot +) {
ل Sy ا ل 0
/
صفحه 139:
م ل PPPS
ا ل 1م
|
صفحه 140:
35
et) ا
وقتى دستور و درون
فا
روی حلقهای که مستقیما درون آن
|
حلقههاى بيرونى بدون هيج تغييرى
ai
دهد.
صفحه 141:
332 سا ها
دستور Oa تورهای درون بلوک
حلقه را نادیده گ این دستور بیرون
57 این 2 م
رالغو كرده و اجراى دور
۹ بعدى حلقه را آغاز م ىكند.
صفحه 142:
ST Eee A neem Ed دمم يما
ST eee TE eel] 10
iat wuin()
۳ ویر {
Ne ao
Por(; rt )
SS ee ESE
ا rout
vin >> ۳
م۱
میت
i
زو ا يي ل لا يي
Mi
صفحه 143:
۷- دستور اس
۱9 eee BC es Rey aren
تزسط مت برحسب ee) است, متسه
معين مى شود.
برجسب شناسهاى است كه جلوى آنن علامت
eated ا ل ا ل
مى كيرد.
یک مزیت دستور ۰۲7 این است که با استفاده
ee reais | را زر
شد و به مكان دلخواهى در برنامه يرش نمود.
صفحه 144:
۱ سل از رم رت را
ist c7aini()
7
ار یا
cal Osi Os enim)
{ Por (ist K=O; K<@; K++)
iP (FARO) pte esr;
fee ar a ا
ارو
1
ا تا
j
i
صفحه 145:
2000 Reo ere
ee LD oe) en SSS) ne ee)
«شبیهسازی» سیستمهای دنیای واقعی است.
تحقیقات و توسعههای بسیار پیشرفته به این
راهکار خیلی وابسته است. به وسيلة شبيهسازى
میتوانیم رفتار سیستمهای مختلف را مطالعه
کنیم بدون این که لازم باشد واقعاانهارا
پیادهسازی تماییم. در شبیهسازی نیاژ اسست
G توسط رایانهها توليد شود FEE ey اعدا
نادانستههاى دنياى واقعى مدلسازى شود.
صفحه 146:
رايانهها «ثابت كار» هستند يعنى با دادن دادههاى
مشابه به رایانههای مشابه. هميشه خروجی یکسان
ل ا ل ل يت
كرد كه به ظاهر تصادفى هستند؛ اعدادى كه يه طور
یکنواخت در یک محدودة خاص گستردهاند و برای
ploS qu الكوى مشخصى وجود ندارد. ۳
Peel Ree DL heed De MP ETD De |
صفحه 147:
ar} توليد اعداد شبه تصادفى
اين برنامه از تابع 4-(() براى توليد اعداد شبهتصادفى استفاده مى كند:
#include<cstdlib>//defines the ۳۵۳۵ 0
RAND_MAX
#include <iostream>
int main(),
{ // prints pseudo-random numbers:
for (int i = 0; i < 8; i++)
cout << rand() << endl;
cout << "RAND MAX =" << RAND MAX << endl;
}
هر بار که برنامة بالا اجرا شود. رایانه هشت عدد صحیح
2 تولید میکند که به طور یکنواخت در فاصلةً ۰ تا
)1٩61201(6(_۷ گسترده شدهاند. 629 _606060) در این
رابانه برایر با ۲:۱۲۴۷,۴۸۳:۶۴۷ است.
صفحه 148:
هر عدد شبهتصادفی از روی عدد قبلی خود ساخته
میشود.
اولين عدد شبهتصادفى از روى يك مقدار داخلى
که« . . گفته میشود ايجاد میگر دد.
هر دفعه که برنامه اجرا شود. هسته با یک مقدار
:10000
براى حذف اين اثر نامطلوب كه از تصادفى بودن
اعداد مى كاهدء مى توانيم با استفاده از تايع sraad()
خودمان مقدار هسته را انتخاب كنيم.
صفحه 149:
۳3 دعر له Vanes.) | طور
محاورداى
اين كه مىتوان هستة توليدكنندةٌ اعداد
تصادفى را به شكل محاورداى وارد نمود:
صفحه 150:
پابان جلسه جهارم
صفحه 151:
صفحه 152:
آنچه در ابن جلسه می خوانید
۳ توابع كتابخانهاى ()++ استاندارد
'!- توابع ساخت كارير
۳ برنامةً آزمون
۳- اعلانها و تعاریف تابع
کامپابل جداکانة توابع
7 یرس محر تایه نی
صفحه 153:
را
توارع بولق
ا ا 46
-١ ارسال به طريق ارجاع (درس)
۱ - ارسال از طریق ارجاع ثابت
1
)>
صفحه 154:
Eee ee le
0 كك ني
00 to) a
صفحه 155:
هدفهای رفتاری؛
ا ا 7
neu «تعريف» ee را بدانيد و خودتان توابعى را ايجاد
PolPen prem ip ISS arr I OVEN RpCarer Septal DiTUye ey Oper
peer ben) مفهوم دآ ركومان» -
- تفاوت ارسال به طريق ى «ارجاع» و ارسال به طريق «مقدار» و
ارسال به طريق «ارجاع ثابت» را بيان كنيد و شكل استفاده از هر
يكد را بدانيد.
200
صفحه 156:
- «تابع ی را شناخته و نحوةٌ معرفى bol
۳
- جندشكلى توابع را تعريف كنيد وشيوة آلن را
بدانید.
- طریقة به کار گیری آر گومانهای پیشفرض را
صفحه 157:
( سرتررد
برنامههای واقعی و تجاری بسیار بزرگتسر از
برنامههايى هستند كه تاكنون بررسى كرديم.
برای این که برنامههای بزرگ قابل مدیریت
باشند. » gi dol 7 7
a TP ed Le BB] بندى مىكنند. اين
زيربرنامههها «تایسع» Pewee) مى شوند. توابع ۳
ree) ا 0
lado» y> ل ا 0 ا
SS
صفحه 158:
وراه ردان زارد
1ه © استاندارد» مجموعهاى است كه
eerie) ل |
برنامه است. این توابع و عناصر از طریق «... »
قبلا برخی از آنهارا استفاده کردهایم: ثاببت
"1011-١1 كهدر < ١ > تعريف شده.
تابع ()021< كه در < 20١ > تعريف شده است
wed
صفحه 159:
200 نسدد
00 ERC-Tul eke OMT E RC TES) ريشة دوم
تابع 20000 كاملء داراى روند ورودى -
پردازش - خروجی است هرچند که پردازش.
مرحلهاى ينهان است. يعنى نمىدانيم كه تابع روى
عدد ۲ چه اعمالی انجام لي كي رك إل رسن كنا
حاصل میشود.
صفحه 160:
برای اجرای یک تابع مانند تابع اجح() کافی
reese ae a eel fr noe |
00 ا ESL oe USER TONG Ces py eery
p=sqnt(x);
صفحه 161:
م تاییع» با اخضار تابعة گفته
ye Tee) ا ال ا ل 1ت
6 فراخوانی میگردد. عبارت درون پرانتز
Reel nae pe pC 7 OSL ETC
et ll oe RR al DEE ed
«مقدار» به نت فرستاده مى شود. BY} وقتى )
است, با اجراى كد ()1»< تابع 0<() فراخوانى
شده و مقدار ۳ به لن فرستاده میشود. تابع مذکور
نيز حاصل 2-2 رابهعنان ياسسخ
برمى كرداند...
صفحه 162:
ا 0
رم نج
5
متغيرهاى « و بر در تابع ۵() تعریف شدهاند. مقدار « که برابر
با ااست به تابع #4() فرستاده مىشود و اين تابع مقدار
۵ .را به تابع ل ا ا 000
را نشان مىدهذ به رنك تيره است, به اين معنا كه فرايند داخلى و
ا 5 05957
صفحه 163:
۱ ا any]
اين برنامه هم از سرفايل <21ك> استفاده مىكند. هدف اين
است كه صحت رابطة +«وم0.م:8) 6-,:92ج:8) به شكل تجربى
بررسى شود.
سم
Por Poa x=O; x < S; x += O.C) {
rout << x << "WW" << (G*x) << "WF"
>>( رم 2۳ >>
صفحه 164:
io لان
0 0
خروجى نشان مىدهد كه براى هر مقدار
ا DNC
>ود 708510 برابر است.
0
۷
ده تا
سر ۳۱۱۱۹
جاب میکند. ORE ۳
act
0
ری
ae
9
۳9
صفحه 165:
i a Sc م Tee
ریت شده است. بعفيى إن لين ae
را ee
00 ا ل
asin(x) 1, 0.201358
aie سينوس معكوس + ابه راديان)
(8830)0.2 مقبار
atan(x) 1, 0.197396
بر تنزانت معکوس (بهرادیان)
ceil (3.141593)
ceil(x) 0 aie
5 0 cos (2)
cos (x) 1,0.416147
در رط کسینوس (به رادیان)
suis exp (2)
صفحه 166:
floor(x مقدار كف (كرد floor(3.141593)
مقدار 3.00 را برمیگردلند شده) )
۳۹
0.693147 ,| لگاریتم طبیعی عد (در و۱0
بسرمیگردلند پایه ع)
rere jus Log (2) لك
۹ [
pow(x,p 1, 8.0 ,vi pow(2,3)
جردا نه «به تولن )
صفحه 167:
7 ay Spee Corser EES
lee eae ea eee SD نوع
تابع فرستاده شود, قبل از اين كه تابع ان را يردازش
yl 3 ۳ ۳۳ eS میدهد.
صفحه 168:
۵
0 بع" ,عي :۶
715۳5
این سرفايلها از كتابخانة ) استاندارد gee
شدهاند. استفاده از آنها شبیه استفاده از
سرفایلهای )++ استاندارد (مانند
> >> ) الست. براى مثال اكر
بخواهیم تابع اعداد تصادفی له را از
سرفایل <2ت> به کار ببریم. باید
دستور پیشپردازندةٌ زیر را به ابتدای فایل
برنامةً اصلی اضافه کنیم:
۸ ۸۱ | ۸
<vstdlib> مش
صفحه 169:
رد تب نات در
كرجه توابع بسيار متنوعى در كتابخانة HHO
استاندارد وجود دارد ولى اين توابع براى بيشتر
وظايف برنامهنويسى كافى نيستند. علاوه بر اين
برنامهنویسان دوست دارند خودشان بتوانند
توابعی را بسازند و استفاده نمایند.
صفحه 170:
eat eo Ole
Pye Cgoes rt eas Sane | oy
tat دك )عطي
1 00 ate eS
ca ed
return کرک
صفحه 171:
یک تا
بع سا< 3
خت کاربر دو ق
لح
0 ee Sirs) ers
3 چم
| 0
من
صفحه 172:
رم روص و۲۳ ae عمده 1
اجراء ل 35 ل * اه م 5 1 ae 0
نها eee 7 ور
pq استفاده eh» et oe od
اصلى» را تعريف مى كند. نوع باز كشتى
اين تابع از نوع 9 است. نام آلن 5د
ا ا كه
ست؛ يعنى هيج يارامترى ندارد. وع
سس
= 3 Ass
صفحه 173:
بسرنامة Paygasd
تنها هدف این برنامه. امتحان
كردن تابع و بررسی صحت
بر = - 2
برچسبها و راهنماهای خوانا - را لحاظ کنید.
صفحه 174:
مثال ۵-۴ یک برنامهةً آزمون برای تابع علح()
Pome elmer SIKH SEN) AC en eee EC?
tot mube(int x)
برنامهً حاضر اعداد صحیح
رااز ورودى Eyre)
مكعب انها راجاب بر و
ف كلد شااكن كه كارير
مقدار ٠ را وارد كند. ict coin)
aco O Osc Cac 0000
20 ۱
white (a |= O)
eras
rat << "\imube(" << a <<") =" << pube(a) << eo); }}
صفحه 175:
هر عدد صحیحی که خوانده میشود. با استفاده از
( به تابع Orbe فرستاده مى شود.
۱ 0 ام ان و ۰ 52
دقت كنيد كه on Fan EO AC ar تعریف
RO eee et ce Cae CLs Tees
رودء كاميايلر (00++ بايد در بارةٌ آن اطلاع حاصل كند.
main() cube()
ع 5
۳ ۳ ۰ بین لتك ا آل
aly a تصور نمود:
صفحه 176:
(eed ae eer aL A pene ee WO
تابع زير دو بارامتر دارد. اين تابع از دو مقدار فرستاده شده به آن مقدار بزركتر را برمى كرداند:
سوت سم ها
را EN ea ee
2
Sl tel Coe
2 ما
صفحه 177:
رت
(شبیه دستور . . )زیرااجرارابه
ee و ی اگرچه
معمولا ١ 2020202 درانتهاى تابيع قرار
95۱ 9
دیگری از تابع قرار داد.
صفحه 178:
۵- اعلانها و تعار بف تابح
به دو روش ميتوان توابع را تعريف نمود:
ا ال تن
مربوطه اورده شوند.
اه دیگری که بیشتر رواج دارد این گونه
1
0
قرار بكيرد.
صفحه 179:
لد لا تسایس ات مه لس اد
اعلان تابع شبیه اعلان مد رس
pe aid ole! مس
در انتهای آن قرار دارد.
ایک متغیر زر زر رب ور برن ردب ۱
.اعلان شود. تابع هم همین طور است یا این فرق
که متعیر (۱ در هر جایی از برفاعه میتوان اعلان
ترد انا تابم را باب قبل از برنامة اصلی اد رد
نمود.
صفحه 180:
te ae oly فقط Mahe oir
1 rene pee cape FL Pe Con peg Seen
كاميايل برنامه را آغاز كند. سيس در زمان اجرا
به تعريف بدنة تابع نيز احتياج مى شود كه اين
بدنه در انتهاى برنامه و يس از تابع 5ه<ت() قرار
می گیرد.
صفحه 181:
BC ee renee.
) متفیرهایی هستند که در فهرست
يارامتر يك تابع نام ا 6
See) ا ی
مىشوند؛ يعنى فقط در طول اجراى تابع وجود
۳
آ رگومانها متغیرهایی هستند که از برنامةً
اصلى به تابع فرستاده مى شوند.
صفحه 182:
:كارا )عدت لها
لمان
a
0-1
{ زو << مه << وو
rout << "\eax(" << 7 << ")"<< a >> "-"
CA >> الس (
صفحه 183:
۱ ترابع بهارساند 3 ۱2٩ eee) oe
پیادسازی شدداند ر سای كا یکی از آن. als را
در برناناءمايتان به كاز م بريد اند نش برر
راسشدای پیش بردازندد: ثایل آلبن توابع رابه
برتادا-تان بیدا کید
0 ع fe
صفحه 184:
۱- اولین مزیت «مخفیسازی اطلاعات» است.
۲-مزیت دیگر این است که توابع مورد نیاز را مینوان قبل
از این که برنامة اصلی نوشنته شود. جداگانه آزمایش
نمود.
۳سومین مزیت این است که در هر زمانی به راحتی
میتوان تعریف توابع را عوض کرد بدون این که لازم
باشد برنامة اصلی تغییر یابد.
۴-چهارمین مزیت هم این است که میتوانید یک بار یک
تابع را کامپایل و ذخیره کنید و از تن پس در برنامههای
مختلفی از همان تابع استفاده بیرید.
صفحه 185:
رت
صفحه 186:
حال کافی است <tochide <test.cppHi he را به
اول برنامه اصلى وقبل از ١ اضافه كنيم:
ber acd cee Rec ee
اه ز
:مصتعصخا wax() ۱۱
00000
2
۱
--" |
<< wax(w,a) << eo;
صفحه 187:
rang vont eer erence en ye
كت TN el rent See ence)
POE 0 Dede ol ot cer PEED] Darr)
و ذخیره Jools DLL رادر فايلهايى از نوع
0 2020 yy etc wpe)
مینمایند. فایلهای بابلا رابه دو طریق ایستا و
1۳ 7 ener)
بيشتر بافايلهاى ,ارا(ا) به مرجع ويندوز و
كاميايلرهاى (0++ مراجعه كنيد.
صفحه 188:
ا د ی
متغيرها فقط در دا<
يارامترهاى تابع
محلی برای آن تابع هستند.
صفحه 189:
۱
011101111 11 1 0 BENIN OP ecL EI
(6()©()0)..(هم) رمم" - اه
BR Pe re SCAN ele eT
ta BS]
{ Mretures a! = o*(oHl)*(r-@)*...*(C)*(0)
P (a< ©) retro O;
۷ < :
۱
PAS or;
ca
صفحه 190:
Bee Pepe ye oom ercmy ee) باشند تن
باشند.
1 Sl Ree Mey oS © geen ee eS
oa eve we elke ree eee Bee eee alee BES a
ساخت. به مثال زير نكاه كنيد.
0000 Te
Polar ا ل ا ا ا r Y
- مىكند كه به جند طريق مىتوان >اعنصر دلخواه از يك مجموعة
7 ۰
استفاده مى شود:
صفحه 191:
SE. EY otro oe رل
ا ۳
شرط به کار رفقته در دستور *برای محدود کردن
Tene ا ا ال ل ا ا ا 0
تابع مقدار ٠ را برمى كرداند تانشان دهد كه يك ورودى
اشتباه وجود داشته است.
Desc RA LD)
SY eNews Gl CA) ene cee Se et emcee ee
F(a <Q) [| k<O || k> 5) retro O;
retura Pact(a)/Pact(e-k);
صفحه 192:
POMBE ac ent pers Aes
TA ee
امد
Oe tonne
"20 0
۱
aT oC)
pout << eed; } 7
۱ ۵9
صفحه 193:
۷- تایع اب
ا ا Meee 0 000
مشخص كردن جنين توابعى از كلمة كليدى لاصمابه عنوان نوع
باز كشتى تابع استفاده مى كنند
S) از ۱
از آنجا که یک تابع لس مقداری را برنمی گرداند. نیازی به دستور 9
reser SBIR eee eee ele Sec Crowe
به شکل تنها استفاده کنیم بدون این که بعد از کلمةٌ نم تم .۶
دیگری بیاید:
۳۳2
CSW ال NaN ay re Ren caus] a)
صفحه 194:
peut omy te BSW se rope ۳
استفاده مى شود بسيار مفيد است. ere
رت ا ee
5 را ی را
۱ et Se re ie ed Oo ا owe ters]
صفحه 195:
مثال ۵-۱۰ تابعی که اول بودن اعداد را بررسی میکند
كد زير یک تابع بولی است که تشخیص میدهد آیا عدد صحیح ارسال شده به آن, اول است یا خیر:
زاس مها
P ais prive, Pause vihenwise! 010
a) موی مسا
OCR Rear ccd لي ۱
[CO od 9 oe the Pret prives ۱
PF (a%C == O) retura Poe} // © is the vy eves prive
(cme cela a He tad) يكنا
(QM SO) ae Nal ean esas
retura fru; USN aaa aa es cece
صفحه 196:
۳0( توابع ورودق /خروجی -٩
بح 1۱۳
به هدف اصلى برنامه مربوط نيست را مىتوان به توابع سيرد. در
چنین شرایطی سودمندی توابع محسوستر میشود.
Seer NES ا cere الم
كرددايد كه سوابق تحصيلى دانشجويان را نكه مىدارد. در اين
نرمافزار لازم است كه سن دانشجو به عنوان يكى از اطلاعات يروندة
دانشجو وارد شود. اكر وظيفة دريافت سن را به عهدةٌ يك تابع
.۰ جزيياتى از قبيل كنترل ورودى معتبرء يافتن سن
از روى تاريخ تولد و ... را در اين تابع ييادهسازى كنيد 0
از مسير برنامة اصلى منحرف شويد.
صفحه 197:
۱۱ Cr wen ec
ا ا لل ان ل
SO ear ls) فقط براى جاب
إن نات بات إن تولبع خروجی . -. یعنی توابعی که
فقط برای le نتایج به کار میروند و هیچ مقدار باز گشتی
ندارند.
اا .سا یز به همین روش کار میکنند اما در جهت
ا ا ا ا لت اال
ا ا ل ل ل a ل
ندارند.
صفحه 198:
rent) مثال ۵-۱۱ تابعی برای دریافت سن کاربر
رس عفص ارسي ا ع سي 007
7
PEE bo5) cruelgs y2 4 Se DE ede eel CaN eae ok SED
1۱ Ot ga thea 1 ee eRe er Caen | cacy
مى ين ست
زه << ميو
PF (a < O) wu ل ا wt
be vexnive.";
ebe F (oc > (CO) pou << “lalou coud wot
aa el
eee 5
"م اميه بوايادا" >> تنوم
صفحه 199:
fom eM AN Brel bn ener pear eres A eres
اسف
مب
{ Mess the رات
)صم د سم
م ا وال ی ام
و7779
00 مه سا بو له توب
تسم
0
سنطكيوكه صط اص للنوص جكب عسويو نا
ماده بصا
512101011116
امس ا
0
صفحه 200:
تااين لحظه تمام يارامترهايى كه در توابع ديديم به
طریق ارسال شدااند. يعنى ابتدا مقدار متغيرى
ROO ES TEES er Scene eer cy
TE RCE ae NC Bers) ew Ee gs]
Pee E Se ware te) mee pC EE cy
سيس اين مقدار به متغير محلى > در تابع فرستاده
را آغاز میکند. در Te Oe ne! is Pee Ey TP)
طی اجرای تابع ممکن است مقدار « تغییر کند اما چون
۰ محلی است هیچ تغییری روی مقدار « نمی گذارد.
صفحه 201:
پس خود به تابع نمیرود بلکه مقدار آن درون تابع کپی میشود.
ee Oe ee See ae an eS SEE eer ee ne Leer)
به اين ترتيب تابع مى تواند مقدار »ارا بخواند اما نمى تواند مقدار »درا
تغيير دهد.
به همین دلیل به « یک پارامتر «فقط خواندنی» میگویند.
SS as Re rer Se reap Coed eRe, eer NU BC)
استفاده كرد.
ا ال ا ا ل ا ان 5
ات مور مات ما 0
۱
آن مقدار به تابع فرستاده میشود.
صفحه 202:
۰ ارسال به طریق )5 !2 (آدرس)
ا ا ل ا ا
con ped es) peer Ov OS ا 00
eel ee
و Pen اوقات عمدا میخواهیم این اتفاق رخ
دهد. یعنی میخواهیم که تابع بتواند محتویات
7 فرستاده شده به ol را دستکاری کند. در
زا
میکنیم.
صفحه 203:
براى اين كه مشخص كنيم يك يارامتر به طريق ارجاع
ارسال مىشود. علامت رابه نوع يارامتر در فهرست
پارامترهای تابع اضافه میکنیم. این باعث میشود که تابع
Pe Cree ee melt ic ann ۳
خود آرگومان محلی را به کار بگیرد.
به این ترتیب تابع هم میتواند مقدار آر گومان فرستاده
شده را بخواند و هم میتواند مقدار آن را تغییر دهد. در
اين.حالت آنن يارامتر يك يارامقر 22000
ص۳۰۳
صفحه 204:
هر تغييرى كه روى يارامتر ا 7
مستقيم روى متغير برنامة اصلى اعمال مى شود. به مثال زير نكاه كنيد.
0 ena oe
تابع كوج زير در مرتب كردن داددها كاربرد فراوان دارد:
votd swap(Ploot& x, Ploot& (مر
۱0/۳ و مت مر
هدف این تابع جابجا کردن دو عنصری است
rr cae ل ree 1۱
پارامترهای >«و مربه صورت پارامترهای
۱
ماما سنا
صفحه 205:
ee SIE Re ee Tee Sa eae pees ارسالی
econo) ا Pow
ed) مد
وت رم رات رت
تیمک
ntsc, ca |
Ha biel oleh oil ol wlohe)
eek ee <a ee |
صفحه 206:
وقتی فراخوانی ا میشود. »<به "اشاره
|
1
۹۳ ا ا ل
فى كيرد و آنگاه»هقدار as ۳(
crow 06 2 2
جابجا مى eye) . شکل ne نشان مى دا
جابجايى ae a oe 5500006
1
float&
float&
لت
float
صفحه 207:
00
ای سد لصا oan oO ears 9)
اين اعلان شامل عملكر ارجاع © براى هر يارامتر است.
برنامهنويسان 4 ۳۹ ا و6 ۳ به
عنوان پیشوند نام 0
1
است (مثل »« مها
1
د
صفحه 208:
۲ Beebe ENO ato)
eat ed RCM Cape y eNO ee FCO ل
كه nn}) poe wot eee) ا CA ))
27 Rye EY ل S| era eo
AR eee dma
۳ OS |
Pb)
wou << "a= "<<u<<"\b="<<b << ocd
ارت وت
eS SE eR >> للج >> ط
0 7( 2و 99,۲۶۶
2606 ات
6 ۱
صفحه 209:
00 RIN Cod
Cha Rae pear ced
۲)(
۳ 22
10
cane
صفحه 210:
در جدول زير خلاصة تفاوتهاى بين ارسال از طریق مقدار و ارسال
7
00
jint x
Cee wee
*مترادفبا آركومازلست
| و
آ رگومان ارسال شده از طبریق ارجاع فقط باید
يك متغيس باشد
آركومان نواندنى- نوشتنى است
a اه
Pah a 4
eee Pee.
Cee Pe sen
CORP Ar Sia io wer)
آركومان ارسال شده از طبریق مقدار میتواند
يك ثابته يك متغيس یا یک عبارت باشد
آركومان فتط خواندنى است
صفحه 211:
يكى از مواقعى كه يارامترهاى ارجاع مورد نياز
هستند جايى است كه تابع بايد بيش از يك مقدار را
باز گرداند.
اا ۰۳ ۱ میتواند یک مقدار را
2
بنايراين اكر بايد بيش از يك مقدار بر كشت داده
eye) اين 067 0 پارامترهای ارجاع انجام مى دهند.
صفحه 212:
۷ FY ea av OME?
ae At PP ee dee SNCS Pe Be ioc
جح أمس جوج (محيط و مساحت) براى دايرهاى كه شعاع آن عدد
مفروض «است:
arcu, double& vircucPereue, ل ب 0
ام
۸/۱ ان Ne AS ahh ane ee oats
Pac tg
رت ارت بت ره رت رت ره یت لا ل
Cod baat ال
ماس ات تس مت المع
1
صفحه 213:
برنامة آزمون تابع فوق و يك اجراى آزمايشى آن در شكل زير نشان
داده شده است:
double) گت مس مگ رز
oF a circle wits // ام لعن يا يس يدا
مه
هط
۱
Pe oe ain id
He AC ata
صفحه 214:
7 5 4 5
الوسداز طميؤلوجاع تلبت 06
ارسال يارامترها به طريق ارجاع دو خاصيت مهم دارد:
BC Srp pr ele SUNT SPC PP ek ie
ان كه از إشتال بى دورد حافظه 1
SES) ل ل اك
.اين روش مانند ارسال از طريق
ارجاع است با اين فرق كه تابع نمى تواند محتويات يارامتر ارجاع
nel Ment) Cromny By 1 ۱
براى اين كه يارامترى رااز نوع ارجاع ثابت اعلان كنيم بايد
es ا ا 0
صفحه 215:
مثال ۵-۱۵ ارسال از طریق ارجاع ثابت
و ا ل
Dee En tn 2(
تک
تصش
Peet ee ee I eo Sd
لو >> >>
صفحه 216:
۱
FR eH
امین
ea anaes acd
CO lc FE ado lar
Peet he ed a
وت 1 eC SRT Cre
Seay | ل CRE be Ser
سس« Rs aR ۰
3 Se PILES Tee)
CO Re we. wikis eerie)
EIT OO Tae See beatae)
روى آركومان طهم تاثير مىكذارد زيرا ط
از طريق ارجاع به تابع فرستاده شده.
صفحه 217:
ارسال به طریق ارجاع ثابت بیشتر برای توابعی
استفاده مىشود كه 0
eeC ep ا ا ا Pee age) Ce
Lanes ام ل eee
كه pes Re. Wee) eee We Oe
ee De net Te ele BES) ا لت
Yoy ren epre ل ا 50
صفحه 218:
تسولبع بسپلسطه -19
تابعی که به شکل بیواسطه تعریف میشود. ظاهری شبیه به تولبع
معمولی دارد با این فرق که عبارت ۲ در اعلان و تعریف آنن
قبد شده است.
ها
اين همان تابع ۱
اس مرا
Race A aes
خم
ار ها تما
صفحه 219:
0 SHS
امه
۱
ار وه سس
داشته باشد. مثلا اگر یک تابع بیواسطه مات
۰ خط کد باشد و این ey ۳
مختلیف ابو نامه اصیلی فراخوانی شوه هنگلمت.
phi reser A
رت ۲
9 تلف کاهش د
صفحه 220:
چندشکلیسوایع -46
در + میتوانیم چند تابع داشته باشیم که
همگی race) دارند. در اين حالت coer ee)
تابع مذکور چندشکلی دارد. شرط این کار آنن
CE ane eS Omer ror
تفاوت داشته باشد. يعنى تعداد يارامترها متفاوت
باشد يا دست كم يكى از يارامترهاى متناظر هم
نوع نباشند.
صفحه 221:
مثال 0-11 جندشكلى تابع >5 ()
۱ Same) oe)
9 eee Ee i ee Ray) cea)
میگیریم:
رسمه
000 0
DR te
رسمه
تور 0
(66.6 .)وس >> ۲۰
i
صفحه 222:
tat cax(tet 2, tot v)
) | یه the wontkour oP the tty qed iiexers:
vets (x < مر 2? x tp);
}
it wardtat x, toy, tz)
:وه مورف oP he tere موم the بو | )
(ى, بای دص دجم عم
rea (z> a 22: w);
}
۳ es ae eae
eis etiersd Ose xin nay ae MERE xe
vehed Geet xt),
۷
صفحه 223:
1
ات مر
1
0
0 م ا م ا مر BED es
00 > tat 7-۳ ارسال ا نسخهای که دو
يارامترهايش دارد فراخوانى مىشود. اكر اين نسخه
وجود نداشته باشد. کامپایلر #اهارابه عطط ارتقا
میدهد و سپس نسخهای که دو پارامتر عاط دارد را
فرا میخواند.
صفحه 224:
(kod تابع -۴
Fee EC ل ل Rey om ا eine Celt gs)
۳۳۳7 MONA
ا ا Pe tp Pee eel
مر ۳
در حقیقت هر برنامه کامل, از یک تابع 2-5 () به همراه
توابع دیگر تشکیل شده است که هر یک از این توابع به
شكل OL SIO Li er ce rece ات هرا
abe, 0
صفحه 225:
خود برنامه با فراخوانی تابع ۵۳() شروع میشود.
چون این تابع یک نوع باز گشتی ۱ دارد. منطقی است که بلوک
ا eS
از كاميايلرهاى 0++اين خط اجبارى نيست و مىتوان آن را
ذكر نكرد.
مقدار صحیحی ا ل ا ل برمی گردد
م ا |
به این معنا که برنامه بدون خطا پایان گرفته است.
oy ee el Te a gy mere DL mec) a)
Peer Se Cee U eer Bers
صفحه 226:
مثال 0-١ استفاده از دستور هؤْه: براى يايان دادن به يى برنامه
اماد
۱
Casey oe) ل ل 30 :لك ره ها
SSCs res res pC Fa 530000
3
که اجرای دستور ا لضن
owe ره << و << ويم
feed) hata kOe ۱
d << "=" << dd << ocd << تا
i
نت يمد ين
تت
صفحه 227:
6 که بتوا epee yer
به شك mA
۳ ۱
a 7
je که اجر aes ی بر
ree 5
دج ۳
رش وجوه ee
رود 5 ;
cee ل از این تمه
oe :
a) بلوک اصلی برسد) خا
دهیم:
ستفاده از دستو ۱
90
-١ اه اد ها
صفحه 228:
مثال ۵-۱۹٩ استفاده از تابع ۳۳4 برای پایان دادن به برنامه
تمس Se OO دس رز
pout bbe و
Re a a
دراين برنامة اكر كاربر عدد ٠ را و ی
وارد كند. تابع كدص عدت )(١ خاتمه مم
مییابد و برنامه بدون هیچ مقدار :» عاططط )
ا ا << و
:(0)سمواطجر >> لحو
}
buble reviprovd (double x) — Cxvepion
RN A haa a es
م ل الس سان dd ara acd
م00 یمس +
صفحه 229:
توكومارهائه يثؤ رض 08
در (0)++ مىتوان تعداد ۱۳ يكد تابع را در زمان اجرا به
دلخواه تغيير داد.
BO per eR TS Rests oer co sore ee ger |
امکانپذیر است.
9 SON SOG we Bee ROSE neve iC be
فهرست پارامترهای تابع و جلوی پارامتر مربوطه به همراه علامت مساوی
۱
Ore Rey TP rd nl ee) nd a PORES De ا
BMP res econ on el SIT ael Op cs
صفحه 230:
Bee ER URN be ذا
سم
١ 5 0-7
برنامة زير حاصل جند جملهاى درجه سوم را بيدا eos
اين مقدار از الكوريتم هورنر استفاده شده. به ی برأى كرأ
بیشتر. محاسبه به صورت نوی نود
داس ل ما
part << "p(x,P,Q) =" << p(x,P,O) << euch
ont << "p(x,P,O,9) =" << p(x,P,O,9) << edd
mnt << "p(x,?,98,5,F) =" << p(x, ?,9,S,€) << ead;
0
علط =O, الط ,420 الط oral تیا
2-0
1 || جصموور oD + ol*x + O*%O + WO*O: 2-7
rete WD + (ol + (GO + WO*K)*x) "x; ری
۱ ی = 66.0060 —
1 يا
©0106 د ( ۱۳
صفحه 231:
دقت كنيد كه يارامترهايى كه مقدار يب شفرض دارند بايد در فهرست
ل ل ا ل ل
OM // ال اي الي P( tata, tab, ةا
void u(tat a, tot b=O, tat o=P, tad, tot =O); // GRROR
Seep Ree See BoE NC. ely OL a Les ter Boece
Seen Be Ore ل لل San Oe ee TP RO rere Rec y)
لاسرم Peep ee een) FEE ee) ارا سار
Fer Oe Ney ۰
صفحه 232:
پایان جلسه پنجم
صفحه 233:
صفحه 234:
آنچه در این جلسه می خوانید
- يردازش آرايهها
- مقداردهی آرایهها
- ایندکس بیرون از حدود آرایه
- ارسال آرایه به تابع
oreo OTe ۱۳
-مرتبسازی حبابی 21:1
Ce ye ee 0
صفحه 235:
0 on ae
تعریف انواع -
1
صفحه 236:
هدف هاى رفتازی:
ا ام ا 00
ا ل ا 0
- آرايههاى ديك بعدىء و «جندبعدى» را تعريف كنيد.
ا ا ا ا 1
- طريقة ارسال آرايه به توابع را بدانيد.
- دجستجوى خطى» و «جستجوى دودويى» را به اختصار شرح دهيد.
- «مرتبسازى حبابى» را به اختصار شرح دهيد.
صفحه 237:
وال ههد
در برنامههايى كه دادههاى فراوانى را يردازش مى كنند
ا ar ل معمولى کار tee ات زيرا
بسیا
et یر
صر ce) يرو Sere زر شود. به
Neem eA) See EI ogee)
تدارک دیده شدهاند.
صفحه 238:
ا ا 0 0 د
یک نوع هستند.
به اين متغيرها 0١١ مىكويند.
eC ل ا ا Orage)
شماره « » پا « » مى كويند
عناصر يك آرايه در خانههاى يشت سر هم در حافظه
ذخیره میشوند. به این ترتیب آرایه را میتوان بخشی از
ص ey ca at
مساوی تقسیم شده و هر قسمت به یک عنصر تعلق
دارد.
صفحه 239:
1
عنصر [2]0 حاوى مقدار 11.8 وعنصر [2]1 حاوى 19.0 وعنصر
|
صفحه 240:
پسردلزشآپلیدها -6
۱
برنامة سادة زير يك آرايةٌ سه عنصرى را تعريف مىكند و سيس مقاديرى رادر
0
استفاده كرد. با اين تفاوت كه آرايه يك ملافيبر "
مرکب است و برای دستیابی به هر یک از خال ایآ
er ۱ 000 0
-]0[ > 9
لمج >> [0]ه >> " - [00]ه" >> نوم
اد اس
لمم >> [8]ه << "= mat << "o[C]
}
صفحه 241:
نحو کلی برای اعلان آرایه به شکل زیر است:
اس ماس رم سر
تبارت ۷۳۶ تز2 حناعر آرایه را مشخص میکند.
1 ل لت
EC Raa: as ا لت
a ree re OLD EC CH) ۳
بايد داخل كروشه | قرار بكيرد.
صفحه 242:
neew roe OME) ا ا ا
3
Ha al] = 66 66 666
به این ترتیب مقادیر داخل فهرست به همان ترتیبی که چیده
بر 00
EEL See ae) Dea) له
يس همين خط مختصرء آرايهاى از نوع وبانام وبا تعداد
ی رها هی ااا
فهررست. ترس مى كند.
0 ۵9
4
68.8
صفحه 243:
مثال ۶-۳ مقداردهی آرایه با استفاده از فهرست مقداردهی
ESS CHE SOCAL: 0 1
int main()
float al] = { 22.2, 44.4, 66.6 }; {
int size = sizeof(a)/sizeof(float);
for (int i=0; i<size; i++)
ceed NN ga (eee) ee) eer > الاو
endl;
y ره
صفحه 244:
هنكام استفاده I براى اعلان آرايه.
مى توانيم تعداد عناصر آرايه را هم به طور صريح ذكر
كنيم. در اين صورت اكر تعداد عناصر ذكر شده از تعداد
عناصر موجود در فهرست ۳ پیشتر باشد.
خانههای بعدی با مقدار صفر پر میشوند:
float a[7] = { 55.5, 66.6, 77.7 };
ol Secor nas ah Gig oa a a Ica SS aS
دك سكي وفيس رس تعن سو سي ارو و ل
اش 9
float a{3] = { 22.2, 44.4, 66.6, 88.8 }; // ernon: too many &
یی
ون 5
۵.00 م
صفحه 245:
یک آرایه را میتوائیم به طور کامل با صفر مقداردهی اولیه کنیم.
برای مثال سه اعلان زیر با هم برابرند:
float a[ ] = { 0, 0, 0, 0, 0, 0, 0, 0, O };
float a[9] = { 0,0};
float a[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
Lee مسد ye wee RCN Que! لاسي هس با و کت
امتفاده نشود.
درست مثل یک متفیر معمولی. اگر یک آرایه مقداردهی اولیه
yee Sear lip een arse tel ew nye)
صفحه 246:
مثال ۶-۵ یک آرايةٌ مقداردهی نشده
برنامةً زیر آرایةً 8 را اعلان میکند ولی مقداردهی نمیکند. با وجود
اين: مقادير موجود 00 راجاب مىكند:
int main()
{ const int SIZE=4; // defines the size N for 4
elements
float a[SIZE]; // declares the array's elements as
float
for (int i=0O; i<SIZE; i++)
cout << "\ta[" << i << "] =" << afi] <<
صفحه 247:
آرايهها را مى توان با استفاده از عملكر جايكزينى مقداردهى
:کرد اما نمیتوان مقدار آنها را به یکدیگر تخصیص داد
ا تك ا نر
;} .7° رس
Ain HR C(O acca et
همچنین نمیتوانیم یک آرایه را به طور مستقیم برای
مقداردهى به لا در رن Pred
ارق فونه ميهف د إسادونة
Pou bP] = uj ۱ نتب orreps coset be wed ow carers!
صفحه 248:
۴- ایند گس بیرون از حدود آرابه
1
نمیتواند از محدودهٌ تعریف شده برای آن بیشتر باشد.
۳ ۳3 در پاسکال اگر آراية با تعداد ينج عنصر
تعریف شده باشد و آنگاه [ 7 ]3 دستیابی شود. برنامه از
این سیستم حفاظتی در وجود ندارد.
مثال بعدی نشان میدهد که ایندکس یک آرایه هنگام
دستیابی میتولند بیشتر از عناصر تعریف شده برای OF
باشد و باز هم بدون این که خطایی گرفته شود. برنامه
ادامه یابد.
صفحه 249:
مثال ۶-۶ تجاوز ایندکس آرایه از محدودةّ تعریف شده برای آن
7 یک خطای o ley] 0
ی
Ea)
{ woost ct GILE=4;
pa Ama) ee oe)
pes وت
صفحه 250:
سا ره ۳ ۲
ep OE Ree EOr RAE Cree yo Se Oe TS Meee bBo Hse
متغير به طور ناخواسته تغيير كند:
۱
const int SIZE=4;
float al] = { 22.2, 44.4, 66.6 };
float x=11.1;
صفحه 251:
بعد از اعلان شده. يس يى سلول جهاربايتى
بلافاصله بعد از دوازده بایت آرایه به آتن تخصیص مییابد.
بنابراين وقتى برنامه تلاش مى كند مقدار 88.8 را در [3]3 قرار
دهد (كه جزو آرايه نيست) اين مقدار به شكل ناخواسته در
[Sus 0 00
منبع خطا را كشف كنيم. حتى ممكن است به
اين روش دادههاى برنامههاى ديكرى كه در
pea ees ca 1
x 88.8 7 erm e i -corecde <a Re) a
میگویند. این وظيفةٌ برنامهنویس
۱
ی ۱
رس
۲ ۶۶۶
صفحه 252:
مثال ۶-۸ ایجاد استثنای مدیریت نشده
مه نر ا ا ا a) ل اك ae
۰0
vost et OVLO=P; {
Poa of] > ) 69.6, 660.62, 69.6
:200.0 مراع
mat << "x=" << x << ocd;
صفحه 253:
وقتى اين برنامه روى رايانهاى با سيستم عامل ويندوز
اجرا شود. یک صفحهٌ هشدار که در شکل نشان داده شده
Syl etwas) و
این پنجره بیان میکند که برنامه تلاش دارد به نشانی
06 از حافظه دستیابی کند. این مکان خارج از
reat ol pene) tt pen a reer] py vere a etc |
بنابراين سيستم عامل برنامه را متوقف مى كند.
صفحه 254:
صفحه 255:
ارسل[آیلیه سه تسلبع 5۰
۱
كاميايلر مى كويد:
۱-اين که نام آرایه 3 است
۲- عناصر آرایه از نوع 1031] هستند.
سمبل 3 تشانی حافظة آرایه را ذخیره میکند, ارم 2 برد
ا ا ا ا
Tee) ا ا
..یعنی فقط نوع آرایه و نشانی حافظةً
آن به عنوان پارامتر به تابع فرستاده میشود.
صفحه 256:
ا ا ل ل
int sum(int[],int);
int main()
int al] = { 11, 33, 55, 77}; {
int size = sizeof(a)/sizeof(int);
cout << "sum(a,size) = "<< sum(a,size) << endl;}
ee Cae) PD)
4 نو 0>-طاناد ام[
for (int i=0; i<n; i++)
اب ده :111 <+ با
اناك اناعم
صفحه 257:
هنكام فراخوانى تابع نيز از عبارت SuM(a,SIZE)
استفاده شده كه به تابع ارسال شده.
نام آرایه در حقیقت نشانی اولین عنصر آرایه است (یعنی
ات
تابع از این نشانی برای دستیابی به عناصر آرایه استفاده
مى كند. همجنين تابع مى تواند با استفاده از اين نشانى,
يس ارسال آرايه به تابع شبيه ارسال متغير به
طريق ارجاع است.
صفحه 258:
3/۰ ی
CAB ا er) 0 در این برنامه از تابع
COIN ese Sema Ups ne ney eS CAD
ساب د شرك
void read(int[],int&;)
void print(int[],int);
int main()
{ const int MAXSIZE=100;
int a[MAXSIZE]={0}, size
Pa
صفحه 259:
void (int a[], int& n)
cout << "Enter integers. Terminate with 0:\
5
۲۱ < 0:
do
{ cout << "a["<<n<<"]:";
cin >> a[n];
{ while (a[n++] !=0 && n < MAXSIZE);
--n; // don't count the 0
صفحه 260:
7010 (صغصا ,[]ه غما)
for (int i=0; i<n; i++)
we >> []ة 22 نوه
جون ١ يك متغير است, براى اين كه تابع [30©() بتواند
مقدار كن را تغيير دهد اين متغير بايد به شكل ارجاع ارسال
شود.
همجنين براى اين كه تابع مذكور بتوائد مقادير داخل آرايه
3 را تغيير دهد. آرايه نيز بايد به * طریق ارجاع ارسال شود؛
1 ۱
صفحه 261:
Cr Sy Pe SAH DP OOS) HID Ieee he eto D ICH Sires OMB)
استفاده میشود: ۱ soa orga) bee
oes)
تعداد
نوع
تابع با استفاده از اين سه عنصر مىتواند به تىك تى
pecan ome Fl pd rr 4
صفحه 262:
آدرس اولين خانة آرایه. همان نام آرايه است.
پس وقتی نام آرایه را به تابع بفرستیم آدرس اولین خانه
Pee ay
ye Weay) tae Snes Be BES Ep] Ere
بتابراین با این دو مقدار, تابع میتواند به آرابه دسترسی
داشته باشد.
صفحه 263:
1 eM Oe LE ond E>)
1 owe a ern Se Sco Mp SNES oI Oe
میکند:
{ int al] = { 22, 44, 66, 88 };
cout << "a =" <<a <<endl; // the address of
2]0[
cout << "a[0] =" <<a[0]; // the value of a[0]
صفحه 264:
۶- الگورینم جستجوی خطی
آرایهها بیشتر برای پردازش یک زنجیره از دادهها به
لاد 2
اغلب لازم است كه بررسى شود آيا يك مقدار خاص
mee uey yn) ا 2 0 0220000 32
ا ل ا ا 6
همة عناصر آرايه را جستجو نماييم تا بفهميم كه مقدار
مورد نظر در كدام عنصر قرار كرفته. به اين روش
ا ا میگویند.
صفحه 265:
سل امس
برنامةٌ زير تابعی را آزمایش میکند که در این تابع از روش جستجوی خطی برای
یافتن یک مقدار خاص استفاده شده:
int index(int,int[], int);
int main()
{ int al] = { 22, 44, 66, 88, 44, 66, 55};
cout << "index(44,a,7)
endl;
cout << "index(50,a,7)
endl;
"<< index(44,a,7) <<
"<< index(50,a,7) <<
KS)
صفحه 266:
تابع سه يارامتر دارد:
0 ل ا ل By
ا ا ل تن
برابر باشد ایندکس آن عنصر باز گردانده شده و تابع خاتمه "
مییابد.
صفحه 267:
1 ا eed
مقدارى خارج از ايندكس آرايه بازكردانده مىشود كه به
این معناست که مقدار در آرابةً ۱
PN eae SCC De 2 eS Te Se
واقع است و در اجرای آزمایشی دوم مشخص شده
ا ا ا ۱
ا ل ه فقط تا 0000
عنصر داردء مقدار /ا نشان میدهد كه ٠ در ارايه موجود
نیست).
صفحه 268:
حونبسازمیهبلبی- 7
۱
است.
ses Steel by ا ل |
در هر مرتبه بزرگترین عنصر موجود به سمت بالا
Bey ا ا ا ۱
مرتبة بعدى يكى كاسته مى شود.
در يايان همة يويشهاء آرايه مر تب شده است.
صفحه 269:
1
.١ اولین عنصر آرایه با عنصر دوم مقایسه میشود.
۲ اگر عنصر اول بزرگتر بود. جای این دو با هم عوض میشود.
۳ سپس عنصر دوم با عنصر سوم مقایسه میشود.
۴ اگر عنصر دوم بزرگتر بود. جای این دو با هم عوض میشود
۱
۳ Leer Ee nee Tees nee pI
05 ان تااات محدوده جستجو یکی کاسته میشود
1 ۱
ey ا ال اا ا ا ل 000 اذام مى يابد تا اين كه
الا ا |
صفحه 270:
ات
int main()
{float a[]={55.5,22.2,99.9,66.6,44.4,88.8,33.3, 77.7};
print(a,8);
sort(a,8);
print(a,8);
صفحه 271:
void sort(float af], int n)
{ // bubble sort:
for (int i=1; i<n; i++)
// bubble up max{a[0..n-i]}:
for (int j=0; j<n-i; j++)
if (a[j] > alj+1]) swap (alj],alj+1]);
/ANVARIANT: a[n-1-i..n-1] is sorted
صفحه 272:
تابع :5011() از دو حلقة تودرتو استفاده میکند.
-١ حلقه 101 داخلى زوجهاى همسايه را با هم مقايسه
میکند و اگر آنها خارج از ترتیب باشند. جای آن دو را
ped) کون میکند:
وقتی ۲0۲ داخلی به پایان رسید. بزرگترین عنصر
موجود در محدودهٌ فعلی به انتهای آن هدایت شده است.
۲-سپس حلقةً ۲ بیرونی محدودهٌ جستجو را یکی کم
"میکند و دوباره ۲0۲ داخلی را راه میاندازد تا
بزرگترین عنصر بعدی به سمت بالای آرایه هدایت
شود.
صفحه 273:
۸- الگور بتم جستجوی دودویی
nL م ا
ا 2 ااا لل 2
تقسیم میشود.
”مقدار مورد جستجو با . . . . . بخش پایینی
۳
oe ee SLs ie ae EE reece
بالايى به دنبال آن كشت.
صفحه 274:
دو بخش تقسیم میگردد و
سرانجام محدودةٌ جستجو به یک عنصر محدود
میشود که پا آن عنصر با مورد جستجو برابر است
و عنصر مذكور يافت شده و يااين كه آن عنصر با
ame a ل ا
صفحه 275:
مثال ۶-۱۴
Pee Cee ae roe ee onl ل Oley Pep yee ee)
زير آمدهاز روش جستجوى دودويى براى يافتن مقدار درون آرايه
استفاده مى كند:
int index(int, int[],int);
int main()
{ int a[] = { 22, 33, 44, 55, 66, 77, 88 };
cout << "index(44,a,7) = " << index(44,a,7) <<
endl;
cout << "“index(60,a,7) = " << index(60,a,7) <<
endl;
p
صفحه 276:
int index(int x, int a[], int n)
{_ // PRECONDITION: a[0] <= a[1] <= ... <= a[n-
1];
// ۵۱۳۵۲۷ 6۵۲1
int lo=0, hi=n-1, i;
while (lo <= hi)
5 1 < )۱0 + (2۶ /{ the average of lo and |
if (a{i] == x) return i;
if (ali] < x) lo = i+1; // contint و
else hi = i-1; // continue searct ۳۵
a
3 Be
صفحه 277:
Fenn es pee CBT ا organ Pp
yes 2 cles) index(44,a,7
وقتی حلقه شروع میشود. ۰ ۰ رو ۱۱2و ۱050 I
است.
ابتدا مقدار .. . . رامیگیرد.پس عنصر . عنصر
DNS cul Lyle lao cael UIT aang
مقدار بزرگتر است. پس در نيمه بالایی نیست و جستجو
FPO eee ee) ۱۳
مى شود و حلقة تكرار مى كردد.
صفحه 278:
Ve 9 است و دوباره عنصر وسط آرايةٌ
oh) ep) ۱
با است که کوچکتر از میباشد. پس این دفعه .
٠ we bal میشود.
در سومین ec aed akontres 952 است. پس عنصر
ay ees که همان ۱۰ است با . مقانسه
میشود. . برابریا . است کهبا برابر است. پس
مقدار باز گشت داده میشود؛ یعنی ۰ مورد نظر در
5۳21 وجود دارد.
صفحه 279:
144
44
44
ues
aie
55
33
44
fix
cng
to
صفحه 280:
ص 1
2 2 ا ل 0 00
2 و اشلت al0..6) Col a es 520
۰ است که از . کوچکتر است. پس ۰ برابر
oe ey oe ۳
بت وع۱ا۳ر ors eS lO=4 رر ۰۳۰
al 4..6] ی ٩151277 رست کر رتر از X
میباشد. Pr ot اا تغییر مییابد و دوباره حلقه
س 010 ohl=4 10-4 ست ودر
5-7 رگ ۰-۵۱4 ۱8۱4[2660 " 1
بزرگتر از ۲ میباشد. لذا به کاهش
5-0
صفحه 281:
0 6 3 55 < 60
4 5 77 > 600
ار 66 4 4
اكنون شرط حلقه غلط مىشود زيرا
ay eee cee | م ل ۳
يعنى عنصر مورد نظر در آرايه موجود نيست.
صفحه 282:
در تابع فوق هر بار که حلقه تکرار میشود. محدودةٌ
جستجو /05١٠ كوجكتر مى شود. در آراية عنصری.
روش جستجوى دودويى حداكثر به تت
تت ل ا Be
۱ [eo
است.
صفحه 283:
تفاوتهاى جستجوى و فظی
Sg © ازجستجوی است.
gees Ber ال ا ا ا ۱0|
مقادیر یکسانی باشند. آنگاه جستجوی خطی هميشه
7 ا ان ل ee 0 لك
جستجوى دودویی را گفت 4s کدام ایندکس
0 4
صفحه 284:
| Cee eS SONG ee on INE
و
7 220
bool isNondecreasing(int a[], int n);
int main()
int a[] = { 22, 44, 66, 88, 44, 66, 55 }; {
بلس ک>( )مهس >> ۲ ع ( )وله > لو
DOUE<"sOouderreustr((a,?) =" << eQ@paderreusty(a,?) << ral:
1
صفحه 285:
bool isNondecreasing(int a[], int n)
1 // returns true iff a[0] <= a[1] <=... <=
a[n-1]:
for (int i=1; i<n; i++)
if (ali]<a[i-1]) return false;
return true;
}
صفحه 286:
این تابع یک بار کل آرایه را پیمایش کرده و زوجهای
۵11-11 و [3]1 را مقايسه م ىكند.
اگر زوجی یافت شود که در آن [211[>]1-1 باشد.
مر تب نیست.
ببینید که مقادیر ۲۱16و ۲۵156 به شکل اعداد )9 +
در خروجی چاپ میشوند زیرا مقادیر بولی در حقیقت به
شکل اعداد صحیح در حافظه ذخیره میشوند.
صفحه 287:
ree eae oe پر نت نون رنه
ار ]
بل یر اب رت تشر برس رت
ركشت . . میتوان اجرای یک
برنامه را به يى شرط وابسته كرد.
PES Se ا ل ا ee
و teat باشد. برنامه را خاتمه داده و موضوع ۳
به سیستم عامل گزارش میکند. اگر مقدار آر گومان
باشدء برنامه بدون تغيير ادامه مى يابد.
eave) <Cassert> 15-5 08551 4!
شاد است.
صفحه 288:
ات۱ :1ك رات
کردن یک پیششرط
برنامة زير نسخة بهبوديافتهاى از تابع ١ مثال
1١-ء را آزمايش مىكند. در اين نسخه.ء از تابع
۲۵۵ 1ف ذا ]|0 نثال 16كء استفاده كوه
7 00
نتيجه اين تابع به تابع ١ ارسال مىكرددتا
ا ا 0
صفحه 289:
#include <cassert> // defines the assert()
function
#include <iostream> // defines the cout object
using namespace std;
int index(int x, int af], int n);
iat Tl)
{ int a[] = { 22, 33, 44, 55, 66, 77, 88, 60 };
cout<<"index(44,a,7) = " << index(44,a,7) <<
endl;
cout<<"index(44,a,8) = " << index(44,a,8) <<
endl;
cout<<"index(60,a,8) = " << index(60,a,8) <<
صفحه 290:
bool isNondecreasing(int a[], int n);
int index(int x, int a[], int n)
{ assert(isNondecreasing(a,n));
int lo=0, hi=n-1, i;
while (lo <= hi)
{ i= (lo + hi)/2;
۱۱) فا
if (a[i] < x) lo = i+1;
2) آط - 1-1: ١
return n;
ااا 000 1
صفحه 291:
لك لك ل ا 990000
| ل 00 ا 000
فراخوانی(۱۱۵6)44,3,7 تب ان در ev
232-20 ارسال مىكند و برنامه ادمه مىيابد.
اما در دوس فراجواتى 22 41-40 ch مر شود
ا مقدار رابه تابع
Qassert ارسال کند که DP) این تت برنامه 20
میشود tT) CUD) Arey hen a ye eT Bere) |
صفحه 292:
ملستفاشت ازبافولع شسمایشوور آرلیه -9
صفحه 293:
به خاطر بیاورید که انواع شمارشی به شکل مقادیر عددی ذخیره
میشوند.
اندازة آرايه. 581-21 است زيرا 58:7 مقدار صحيح ع را
پا FS)
ترا 19
استفاده از انواع شمارشى در برخى از برنامهها باعث مى شود كه
Jlio yo Vio ogc Mol oS ۶-۱۷ کنترل حلقه به
JESS
باعث میشود که هر بینندهای حلقةٌ ۴0۲ بالا را به خوبی
صفحه 294:
| ا
pe een OC pecs
یک نوع جدید به نام تعریف میکند که متفیرهایی از این نوع میتوانند
UBLUE UGREEN LYELLOW LORANGEL sp. wl
A al eee Oe oni ee ere Clete Bay
مر و ای Poa per
BEDE; BLUE ,RED ,GREEN os 54 زر ۱
BL Sh cote ba یدای etl ts
pais VIOLET+1
OER RT TTI aah pe (10102
01
صفحه 295:
1 EY) eon ree) re
يك نام مستعار براى يك نوع 0
استاندارد موجود تعريف مى كند.
نحو استفاده از آن به شكل زير است:
تحت typedef
كه یک نوع استاندارد و 21135 نام مستعار برای
wl Ol
صفحه 296:
jllon~ "اس
عبار اكر دستور رابه شكل زير بكار بارت
ل ا 00
لقع تعريف كنيم:
لومي اد
]لا
4 بود
Inte
soe) frequency[64]
صفحه 297:
دستور ۱
به یک نوع موجود نام مستعاری را بت میدهد.
1
00 ا
FAC] Re] poy ee Se بكار اك
Eran) hp ee Se) ee 0
erro) PRE Seep OU pTS DEN Tee] ever ne yc)
در تابع +20 به كار رفته است:
صفحه 298:
typedef float Sequence[];
void sort(Sequence, int);
void print(Sequence, int);
int main()
{ Sequence a = {55.5, 22.2, 99.9, 66.6, 44.4,
88.8, 33.3, 77.711
print(a,8);
sort(a,8);
print(a,8);
I
صفحه 299:
void sort(Sequence a, int n)
{ for (int i=n-1; i>0; i--)
for (int j=0; j<i; j++)
if (alj] > alj+1])
swap(alj],alj+1]);
صفحه 300:
آملیههایچند بسعدی-1 1
ل ا ۱
Ap Cap evowr) ا ا
ie تعريف كنيم كهاز نوع آرايه باشد.
يعنى هر خانه از آن آرايه. خود يك آرايه باشد.
t—t«éi wT eS pl 0
يك آراية دو بعدی آرایهای است که هر خانه از آن» خود
یک آراية يك بعدى باشد.
يك آراية سه بعدى آرايهاى است كه هر خانه از آن يك
ارابة دو بعدی باشد.
صفحه 301:
صفحه 302:
[۱ ee torte el 7)
Bye Ie SS TOT Ren ee Sete ens
void print(int a[][5]);
int main()
{ int a[3][5];
read(a);
print(a);
صفحه 303:
void read(int a[][5])
{ cout << "Enter 15 integers, 5 per row:\
nt
for (int i=0; i<3; i++)
{ cout << "ROW" <<i<<":";
for (int j=0; j<5; j++)
صفحه 304:
void print(const int a[][5])
{ for (int i=0; i<3; i++)
{ for (int j=0; j<5; j++)
cout <<" " << alil[j];
cout << endl;
}
1
صفحه 305:
صفحه 306:
1۳ On Pome nge s oNN) Ee ا ا s)
pee] gee eee BCBS)
مثال ١٠٠-ع يردازش يك آراية دوبعدى از نمرات امتحانى
const NUM_STUDENTS = 3;
const NUM_QUIZZES = 5;
typedef int Score[NUM_STUDENTS]
[NUM_QUIZZES];
void printQuizAverages(Score);
rintClassAv
صفحه 307:
int main()
{ Score score;
cout << "Enter " << NUM_QUIZZES
<< _" quiz scores for each student:\
3
read(score);
صفحه 308:
)
{ for (int s=0; s<NUM_ STUDENTS;
5++(
{ cout << "Student "<<s <<":
1
1
for(int q=0; q<NUM_ QUIZZES;
(++و
cin >> score[s][q];
صفحه 309:
void printQuizAverages(Score score)
{ for (int s=0; s<NUM_STUDENTS; s++)
{ float sum = 0.0;
for (int q=0; q<NUM_QUIZZES; q++)
sum += score[s][q];
cout << "\tStudent "<< s << '";"
<< sum/NUM_QUIZZES
<< endl;
3
صفحه 310:
{ for (int ۱00۱۳۵۵20 عن +(
{ float sum = 0.0;
for (int s=0; s<NUM_STUDENTS; s++)
sum += score[s][q];
cout << "\tQuiz "<< q << '":" <<
sum/NUM_STUDENTS << endl;
/
صفحه 311:
7 eae)
ات۱۱۱۱ ۱۳ دوبعدى 0*7 نام
انتخاب شده. این باعث 6 ace
د که توابع خواناتر باشند. هر تابع از دو
تودرتو استفاده كرده كه حلقة 07 ۳۹
بيرونىء بعد اول را ييمايش مىكند و حلقة
SO Eee ey SPC ELE
printQuizAverages تلبع
هر سطر از نمرات را محاسبه و چاپ مینماید و
printClassAverages =
میانگین هر ستون از نمرهها را چاپ میکند.
صفحه 312:
|
اين برنامه تعداد صفرها را در يك آراية سه بعدى مى شمارد:
1۳ (int afJ[4][3], int n1, int n2, int
n3);
int main()
i tle شاك St {5,02}, {0,0,9},{4,1,0},
1 1 £3,0,0}, 85,0},
10/00, 12,0,9( ۳
cout << "This array has " <<
numZeros(a,2,4,3)
<<" zeros:\n";
صفحه 313:
۱18۱771۱ int
n3)
{ int count = 0;
for (int i = 0; i < n1; i++)
for (int j = 0; j < n2; j++)
for (int k = 0; k < n3; k++)
oe ۳ 5-55
صفحه 314:
توجه كنيد كه آرايه چگونه مقداردهی شده است. این
قالب مقداردهى به خوبى نمايان مى كند كه آراية مذكور
يى آرايه دو عنصرى است كه هر عنصرء خود يى آراية
میباشد. پس این آرایه در مجموع ۲۴ عنصر دارد. لك
۱-۱ ۱19۳-۳4
و یا مانند این
int 2004131 = {{5,0,2,0,0,9,4,1,0,7,7,7},
{3,0,0,8,5,0,0,0,0,2,0,9}};
هر سة اين قالبها براى كاميايلر یک مفهوم را دارند اما با
نگاه کردن به دو قالب اخیر به سختی میتوان فهمید که
کدام عنصر از آرابه. کدام مقدار را خواهد داشت.
صفحه 315:
یار خلسة سسم
صفحه 316:
9 ۰
رز
«اسساه ام
ارب
555
,اشارهكرها و ارجاعها ؛
صفحه 317:
آنجه در این جلسه می خوانید
۱-عملگر ارجاع
7
۳
- مقداريابى
ا 0
- بازكشت از نوع ارجاع
es Fp) lea ۱۳ >>>
صفحه 318:
7- عملگر New
delete jstc__
- - آرایههای پویا
- اشارهگر ثابت
ا ا
-اشارهكرى به اشارهكر ديكر
-اشارهكر به توابع
. ۱
صفحه 319:
هدف کلی:
آشنایی با اشاره گرها و نحوةٌ کار با آدرسهای حافظه
هدفهای رفتاری:
انتظار میرود پس از پایان این جلسه بتوانید:
1 ee En om eee ne vee res
- «اشاره گر» 7 1ك
مختلف ايجاد كرده و آنها را مقداريابى كنيد.
>> >»
صفحه 320:
- «چپمقدارها» و «راستمقدارها» را تعر یف كرده و آنها را
از یکدیگر تمیز دهید.
- باز گشتهایی از نوع ارجاع ایجاد نمایید.
- طريقة استفاده از عملكرهاى الا © و ©]0)©|©1 و وظيفة
هر يك را بدانيد.
|
آرایههای ایستا ذکر کنید.
- آرایههای پوبا را در برنامههایتان ایجاد کرده و مدیریت
۳
-ثفاهت ب- الالا هه إن ا دهد
صفحه 321:
2
حافظة رايانه را مىتوان به صورت يى آراية بزرك
»bs yo 23,5 ا ا 9500007
60 در حقيقت حاوى آرايهاى بهاندازة
a ل ا 2 رك 1۱7
خانه یک بایت است.
این خانهها دارای ایندکس صفر تا ۲۶۸۰۴۳۵۰۴۵۵
هط
صفحه 322:
آدرس-های حافظه را با اعداد شانزدهدهی نشان
0 اكه مذکور دارای محدوده آدرس
4[ تا 000۲۲۲۲۲۲ میباشد.
هر وقت كه متغيرى را اعلان مىكنيم, سه ويزكى
اساسی به آن متفیر نسبت داده میشود: : «نوع 0
دنام متغیر» و «آدرس حافظه» آن.
ل ال ا لل ات
صفحه 323:
n
Oe) ااا ل
10
الا ات ل |
۱ در بالاى جعبه است و ادرس متغير در سمت جب
crag 0 و PROS heel eee
در بيشتر رايانهها نوع :]11 جهار بايت از حافظه را اشغال
ا ل ا 1 ان
داده شده است. متفیر ۲۱ یک بلوک چهاربایتی از حافظه
را اشغال میکند که شامل بایتهای 000506060
تا 000506063 است. توجه کنید که آدرس شی.
آدرس اولین بایت از بلوکی است که شی در آلن جا
ذخيره شده.
صفحه 324:
A esto PN CoP Ete See 01[ مقداردهى اوليه
شود. آنگاه Sy eel ee ae Deedee Sa
میشود.
0x0050cdb8
0x0050cdb9 ا |
int
clita: (on
0x0050cdc2
0x0050cdc3
000506064
0x0050cdc5
صفحه 325:
ل ا ا Be
عملگر ارجاع ۱ 4 استفاده نمود. به این عملگر «علمگر
آدرس» نیز میگویند. عبارت آدرس متغفیر ۳۳9
دست مى ذهد. int main()
{ int n=44;
صفحه 326:
خروجی نشان میدهد که آدرس- 1۱ در این اجرا برابر با
3 است. مى توان فهميد كه اين مقدار
ا ل Been SSS Se Ce pee
داده شده. اعداد شانزدهدهى را از روی علامت *0
مىتوان تشخيص داد. معادل دهدهى عدد بالا مقدار
۹ میباشد.
صفحه 327:
لرجاعها -3
|
نحو اعلان یک ارجاع به شکل زیر است:
type& ref_name = var_name;
022 6
ا د الل ل
ار 0 كت 1 Orne Cree Yeu] Capua
int& rn=n; // ۱5 asynonym for n
7 ey may leer ane
۱
صفحه 328:
هميشه مقدار بکسانيدارند اگر کاسته شود.
So ee ee eee poe] 1
نيزلفزليشيافته لست
صفحه 329:
a teed ieeerlcey ۳ باید هنگام اعلان مقداردهی
اوليه شوند با اين تفاوت كه مقدار اولية يى ارجاع. يىك
متغير است نه يك ليترال. اشتباه
/۱ ۲۴۵۴: 44 ۱6 ۱0۵۲ 2 ۷۲۵0۱
۱
بدانند ولی با نشان دادن یک هشدار اعلام میکنند که یک
متفیر موقتی ایجاد شده تا ۰ . به حافظةٌ آن متغیر. ارجاع
داشته باشد.
صفحه 330:
زد متغیر نیست.
یک متفیر. فضای ذخیرهسازی و نشانی مستقل دارد.
AE COSCON PCO Cmaa hy eo 1
Soe ee ate es
صفحه 331:
مشلل!-۷ ارجاعها متفیر های» ستقل:یستند *
int main()
{ int n=44;
int& rn=n; // rn is a synonym for n
cout <<" &n="<< &n <<", &n=" << &n <<
endl;
alka dada // rn2 is another synonym
= ین
0x0064fde4, روت
صفحه 332:
n Pe TOME ES PES CS ا STE On eeae
.دنتسها١ است. (1او 102و 13 ارجاعهايى به
۲03 خروجی نیز تایید میکند که آدرس ۲ و ۲02و
با آدرس ۲۱ یکی است.
ارجاعها pew) برای ساختن پارامترهای ارجاع در توابع
به ۷1 میروند. تابع میتواند حون 57 0 را كه
tin ee ند اواك ar را
تنها فرق اين است كه دامنة 7 fel ee.)
Bear oie لت
۳
صفحه 333:
7 ee eo
مىدانيم كه اعداد صحيح را بايد در متغيرى از نوع int
نكهدارى كنيم و اعداد اعشارى را در متغيرهايى از نوع
float
| DNC Ser Pel Meh D1 eee ean de]
Fee وف ا ا
bool - |
صفحه 334:
عملگر ارجاع 6 آدرس حافظة یک متغیر موجود را به
OMA Ke) ee Ee Rene) آدرس 00
Byer oe
متغفیری که یک آدرس در آن ذخیره میشود
ناميده مى شود
براى اين كه يك اشارهكر اعلان كنيم., ابتدا بايد
مشخص کنیم كه آدرس Ep te دادهای قرار است در
آن ذخیره شود. سپس از عملگر اشاره * استفاده
م ىكنيم تا اشارهكر را اعلان كنيم.
صفحه 335:
برای مثال دستور :
- آدرس يك شى از نوع BESS epee SAL
اشارهكرى از نوع * ذخيره كرد و آدرس
يك شوازنوع 93]6]رافقط مىتوان در
اشارهكرى از نوع yee no ل ل ام
CIETY ل RON
اده
4S نوع متغيرهايى است كه اين اشاره كر آدرس
ا ا ۳
اشارة كر owe
صفحه 336:
۱۳ Cee a EE
برنامة زير يك متغير از نوع 1118 به نام 19 و يك اشاردكر از نوع 1131*
به نام 013 را اعلان مىكند:
n= 44, &n = 0x0064fddc
pn = 0x0064fddc
۱۳ الا ® con = ox0064fdeo
int main()
Couey SY Sa) ee sa کی ۲ ح
&n << endl;
int* pn=&n; // pn holds the address
of n
cout <<" pn =" << pn << endl;
RS Le epee BAN | رم er eR) | سر رد ی ere د 3 ل و fl
صفحه 337:
متغیر ۲۱بامقدار ۴۴ مقداردهى
ree) آدرس ۱ 3
db ,0 Ox0064fddc
درس ]١ مقداردهى شده. يس
ا وه ۱۳
020064100 است (خط دوم
خروجى اين موضوع را تاييد
00064100
صفحه 338:
اما یک متفیر مستقل است و آدرس مستقلی دارد.
كلدل SN ۳ ناك سك دده كما سوم
وقتی میگوییم.. ۱۳۳5 .
به اشاره میکند»
g pn یعنی درون
5 دارد. eC oP
صفحه 339:
قدلیبلبید
فرض كنيد ١ دارای مقدار ۲۲ باشد و 0۲۱ اشاره گری به ۲۱
باشد. با این حساب باید بتوان از طریق 0۲۱ به مقدار ۲۲
رسید. با استفاده از * میتوان مقداری که اشارهگر به آن
اشاره دارد را به دست آورد.
صفحه 340:
|
این برنامه همان برنامهة مثال ۷-۴ است. فقط یک خط کد بیشتر دارد:
int main() |
ا اك
cout << "n="<<n <<", &n =" << &n<<
endl;
int® nn—f.n- Inn halide tha addracs
۳ ا ل است زيرا
هر دو یک مقدار دارند.
صفحه 341:
{ int n=44;
cout<<" n="<<n <<endl;
cout<<" &n=" << &n << endl;
int* pn=&n; _—// pn holds the address of n
cout <<" pn =" << pn << endl;
cout <<" &pn =" << &pn << endl;
cout <<" *pn =" << *pn << endl;
int** ppn=&pn; // ppn holds the address of pn
cout <<" ppn =" << ppn << endl;
cout << " &ppn = " << &ppn << endl;
cout << "*ppn =" << *ppn << endl;
cout << "**ppn = " << **ppn << endl;
صفحه 342:
فا iy
در برنامهٌ بالا متغیر ۱ از نوع ]1۲ تعریف
شده. 0۲۱ اشاره گری است که به ۲ اشاره
دارد. پس نوع 0۲ باید ]0]* باشد. 001۱
اشارهگری است که به ۵۲۱ اشاره میکند.
پس نوع 00۲ باید ]0]/:* باشد. همچنین
چون 00۲ به 0۲۱ اشاره ye dul
0 مقدار 0۲۱ را نشان میدهد و چون
7 به ۱ اشاره دارد. پس *0۲۱ مقدار 10
- لا
&n
0x0064fd78
pn
0x0064fd78
&pn
0x0064fd7c
*۵0 < 4
ppn
۱ ۹۹
&ppn
0x0064fd80
صفحه 343:
عملگر مقداریابی * و عملگر ارجاع 6۷ معکوس یکدیگر
رفتار م ىكنند. اكر اين دو رابا هم تر كيب كنيم: يكديكر
sep) ا ل ا 2 ا
esa ا ا 0
مقداری که در آدرس n& قرار كرفته رابه دست آورد.
Sey ee ea eyed ee pei come pees ۱
0 یک اشاره گر باشد. *0 مقداری که 0 به آلن اشاره
دارد را مىدهد. از طرفى بااستفاده از عملكر نب
Ste ae SEN ee Te) ا 0
آوریم. پس ABIlg> P 99> L ply Px& )139 5
قرار گرفتن اپن عملگرها مهم است. یعنی */۷6 با
owl ile Cad pl nx& ۱
صفحه 344:
عملكر * دو كاربرد دارد. اكر يسوند يى نوع
pers ا ل ل ل
تعريف مىكند و اكر ييشوند يك اشارهكر
باشد (مثل *0]) آنگاه مقداری که 0 به آتن
دو كاربرد دارد. اكر يسوند يك نوع باشد
(مثل 6»1108) یک نام مستعار تعریف میکند
و اگر پیشوند یک متفیر باشد (مشل 06۲)
Petre ne orl) تا
صفحه 345:
يى دستور جايكزينى دو بخش دارد: بخشى كه در سمت
جب علامت جايكزينى قرار مى كيرد و بخشى كه در سمت
راست علامت جایگزینی قرار میگیرد. مثلا دستور < n
Heys) متفیر ٩ در سمت چپ قرار گرفته و مقدار ۵۵ در
سمت راست. این دستور را نمیتوان به شکل ۵۵ - 7۲۱
7 ثابت است و نمى تواند مقدار
بكيرد. يس هنكام استفاده از عملكر جايكزينى بايد دقت
كنيم كه جه جيزى رادر سمت جب قرار بدهيم وجه
حيزى رادر سمت راست.
صفحه 346:
۱۳ re ie eee aad
۳ ۰ Ce) Ee rte) قرار بگیرند
چیزهایی که میتوانند در سمت راست جایگزینی
۱ قرار بكيرند
(و به طور کلی اشیا) چپمقدار هستند و لیترالها
7 ("ABC" ۱۱۰۳۵
صفحه 347:
یک ثابت در ابتدا به شکل یک چپمقدار نمایان میشود:
const int MAX = 65535; // MAX is an
value
1 are) eee ae) epee eee pe ved] |
استفاده کرد:
MAX = 21024; // ERROR: MAX is
constant
به این گونه چپمقدارهاء چپمقدارهای «تغیبر ناپذیر» گفته
میشود. مثل آرایهها:
int a[] = {1,2,3}; //O.K
صفحه 348:
1 7 fel fre) Pe OMe See ee
پذیر نامیده میشوند. هنگام اعلان یک ارجاع به یک چپمقدار نیاز
داریم:
int& r =n; //O.K. nis an ۱۷۵۱6
eer be lend Mo eB ا anc
int& r = 44; // ERROR: 44 is not an Ivalue
int& r = n++4; // ERROR: n++ is not an
lvalue
int& r = cube(n); // ERROR: cube(n) is not
an lvaluel-—L_values 2- R_values
ا eer ۱
میتوان تابع را به یک چپمقدار تبدیل کرد.
صفحه 349:
بایکشاز نوعلیجاع -7
۱
رد ۳ دیدیم. این دو شیوةٌ تبادل در مورد باز گشت از
ا
توابعى كه تاكنون ديديم بازكشت به طريق مقدار داشتند.
ee 2) ات الم ا ل ا 00
مى توانيم تابع را طورى تعريف كنيم كه به جاى مقدار,
pees re ا ل را
را بازكشت دهد., يك ارجاع به 117 را بازكشت دهد.
صفحه 350:
خواهد بود زیرا مقدارهالیترال هستند و لیترالها
راست مقدارند. به اين ترتيب تابع رافقط در سمت راست
یک جایگزینی میتوان به کار برد مثل:
m = f();
وقتی باز گشت به طریق ارجاع باشد. تابع یک چپمقدار
py ee ارجاعها جب مقدار eel DP ye ecene.) حالت
تابع ۳ میتوان در سمت چپ یک جایگزینی قرار داد مثل.
f() = m;
صفحه 351:
7 Pen oes ae ae nb) ere Meco
ارجاع را به عنوان يسوند نوع باز كشتى درج كنيم.
Fee ل
int& max(int& m, int& n)
{ return (m>n?m:n);}
int main()
{ intm = 44, n = 22;
max(m, ,۱( >> عع" معدم عع » <a Mas بل
صفحه 352:
تابع 1 از بين و !! ۱۳7۳50 بيدا کرده
و سيس ارجاعى به آن را باز مى كرداند.
(11376)133,10 آدرس 1179 را برمى كرداند.
يس وقتى مىنويسيم 55 > (1113))118,11: مقدار
0 در حقيقت درون متغير !11 قرار مى كيرد (اكر
۱ < باشد).
7۳۱۳۱ کر Repel re car en Ore
Ayre) eee ee eae
صفحه 353:
اخطار:
وقتی یک تابع پایان میبابد. متغيرهاى محلى آنن نابود
ee cede Rear het eed oc ae Reed ald
بازذكشت ندهيد زيرا وقتى كار ۱
متغيرهاى محلىاش غير معتبر مى شود و ارجاع بازذكشت
داده شده ممكن است به يك مقدار غير معتبر اشاره
داشته باشد. تابع 11937() در مثال بالا یک ارجاع به ۲
یا 0 را بر میگرداند. چون ۲ و 9 خودشان به طریق
ارجاع ارسال شدهاند. يس محلى نيستند و بازكرداندن
tulir Fapae S| ل 1
صفحه 354:
e ات۳
۱ beeen kee ee Bl Eee
یک ارجاع درآمده است.
صفحه 355:
float& component(float* v, int k)
و۱2
int main()
{ float v[4];
for (int k = 1; k <= 4; k++)
component(v,k) = 1.0/k;
for (int i = 0; i < 4; i++)
(fella <q AV ee عت ۱۱ کر < اب یت
endl;
7
صفحه 356:
تابع و ۳
۱
يكى» تغيير كند. بنابراين (0111201111)1/,3©
الل ا ا
eS] 0
صفحه 357:
آيليدها ولشليدكرها -8
027 ا eB LC SCE ee SCs
از اعمال حسابى را مىتوان روى اشاره كرها انجام داد.
حاصل این میشود ا دیگری از حافظه
FN oe Pee Sea cP SL
افزايش و يا كاهش داد و مىتوان يك عدد صحيح را به
0 ten vy)|
کاهش اشاره كر بستكى به نوع دادهاى دارد كه اشاره كر
به آن اشاره شابن
tis lon ۷-۱۰ مثال
صفحه 358:
int main()
{ const int SIZE = 3;
short a[SIZE] = {22, 33, 44};
cout << "a =" <<a << endl;
cout << "sizeof(short) = " << sizeof(short) << endl;
short* end = + SIZE; converts SIZE to
1ه is e ot 7
wry
*p = 33
۲۳
۶ < او 5۳0۲
for (short* p = a; p < end; p++)
{ sum += *p;
8 ۳ ۰۱۴ >> دم
cout << "\t *p
sizeof(short) = 2
۱۳ نگ He)
Wines
p = Ox3fffdic
sum = 55
oT ee ی ها
صفحه 359:
0 ا ل eae Conga
ا 1 رت PCa SBC Prue ip) RCo see
ا اشاره گری به
cute L pl» Sizeof(double) ت۰۵
بايت باشدء. هر كاه كه 0 يك واحد افزايش يابد,
ا اه ات ا ل ا ات
صفحه 360:
: مثلا كد زير
float a[8];
float* p =a; //p points to a[0]
++); // increases the value of p by sizeof(float)
صفحه 361:
PRC 1 prtoe Fa al a (oy~ | ey
درون 0 را“ بايت افزايش مىدهد و 5 -+ م
بايت افزايش میدهد. با استفاده ٠١ مقدار درون (] را
از خاصيت مذكور مىتوان آرايه را ييمايش نمود: يك
اشارهكر را با آدرس اولين عنصر آرايه مقداردهى
کنید. سپس اشاره گر رايى در يى افزايش دهيد. هر
افزایش سبب میشود که اشاره گر به عنصر بعدی
0 ere ear gc hee reece wha PBT |
CCN beep pee oY Tce Bc
صفحه 362:
Pre اا
float* p = a; // p points to a[0]
و ن // now p points to
a[5]
یک نكتهةّ ظریف در ارتباط با آرایهها و اشاره گرها وجود
دارد: اكر اشاره كر را بيش از ايندكس آرايه افزايش
دهيم: ممكن است به بخشهايى از حافظه برويم كه
هنوز تخصيص داده نشدهاند يابراى كارهاى ديكر
تخصیص ا دادن مقدار این بخشها باعث
پروز خطا در برنامه و کل سیستم میشود. هميشه باید
و و و
صفحه 363:
SCS تن ne eho at Se Ree eee
float a[8];
float* -ام al7]; // points to last element in the
الريك
last ۱۰ 0 ره رید
إغمع دمعاء
ا ل ا Si
مثال بعدی نشان میدهد که ارتباط تنگاتنگی بین آرایهها
واشارهدكرها وجود دارد. نام آرايه در حقيقت يك
لل ل ا ا pee
همجنين خواهيم ديد كه اشارهكرها را مانند هر متغير
|
صفحه 364:
[0 Be ieee elem a
int main()
{ short a[] = {22, 33, 44, 55, 66};
عب هو کب ۲ < ۰:2۵ ۲ که و کب ۰ < ۱2۵ کع> الا60
endl;
for (short* p = a; p <a +5; p++)
a = Ox3fffd08, *a = 22 Fa #p <<
PROS TiCc(1s ar awed cS
p = Ox3fffd0a, *p = 33 0
p = Ox3fffdOc, *p = 44
p = Ox3fffd0e, *p = 55
p = Ox3fffd10, *p = 66
p = Ox3fffd12, *p = 77
صفحه 365:
۳ |
:302 اشاره مى كنند و هر دو داراى مقدار
8 سستند. اما 2 یک اشاره گر ثابت است و
ee ere LA CEC NEM CC Be ere 1
ل FLOP 1
at5) > 0) حلقه را خاتمه مىدهد. 2+5 به شكل
زير ارزيابى مى شود:
Ox3fffd08 + 5*sizeof(short) = Ox3fffd08
Ox3fffd08 + Oxa = Ox3fffd12 = 5*2 +
پس حلقه تا زمانی که 03۲۴۴012 > 0۵ باشد ادامه
مییابد.
صفحه 366:
عملگر زیرنویس [] مثل عملگر مقداریابی * رفتار میکند. هر دوی
Bead os ee ep EE pI ae eel Cea gel
alO] == *a
a[1] == *(a + 1)
a[2] == *(a + 2)
صفحه 367:
Fae a a Oy
22 در این مثال, تابع 0106 در میان 91 عنصر اول آراية 81 به دنبال 92 عنصر اول آراية
CREE eS eee VC CRC See Mere ا ا SCI
۳ 6 Batre)
short* loc(short* al, short* a2, int n1, int n2)
{ short* endl = al +n1;
for (short* p1 = al; pl <end1; p1++)
if (*pl == *a2)
{ for (int j = 0; j < n2; j++)
if (p1[j] != a2[j]) break;
if (j == n2) return pl;
}
return 0;
صفحه 368:
int main()
{ short al1[9] = {11, 11, 11, 11, 11, 22, 33, 44, 55};
short 22]5[ - 11, 11 11,22, رو
cout << "Array al begins at location\t" << al << endl;
cout << "Array a2 begins at location\t" << a2 << endl;
short* p = loc(al, a2, 9, 5);
if (p)
{ cout << "Array a2 found at location\t" << p << endl;
for (int i ناد عن
صفحه 369:
Ox3fffd12 مماغوعها غة را رواد
Array a2 begins at location Ox3fffdos
Array a2 found at location Ox3fffd16
Ox3fffd16: 11 Ox3fffd08: 11
Ox3fffd18: 11 Ox3fffd0a: 11
Ox3fffdla: 11 Ox3fffdOc: 11
Ox3fffdic: 22 Ox3fffd0e: 22
Ox3fffdle: 33 Ox3fffd10: 33
صفحه 370:
kg و
وقتی یک اشاره گر شبیه این اعلان شود:
0 (۱17
AT ١
ee 57 جهاربايتى به ]| تخصيص داده مىشود (معمولا
۱ ا ل ۱
اما به هيج جايى اشاره نمى كند زيرا هنوز آدرسى 3917 تن
قرار نگرفته. به چنین اشاره گری اشارهگگر س رگردان
مى كويند. اكر سعى كنيم يك اشارهكر سركردان را
مقداریابی یا رجاع کنیم با خطا مواجه میشویم.
صفحه 371:
۱7 ار
*0 < 3.14159: // ERROR: no storage
has been allocated for *P
A caer we Hen S) MSP ICN Des Beaices
را كجا ذخيره كند. براى رفع اين ta Cee ether
111111111111119
11081 7۷ < 0 ۱۱۷ cintains the value 0
float* p = & // now p p
0-00 415 WE
صفحه 372:
در اين حالت مىتوان به «0] دستيابى داشت زيرا حالا 2] به كا اشاره
م ىكند و آدرس آنن را دارد. راه حل ديكر اين است كه يك آدرس
eed ا ل 0
خارج مىشود. اين كار با استفاده از عملكر /الا©19 صورت مى يذيرد:
float* p;
p = new float; // allocates storage for 1
float
*p = 3.14159; // O.K. assigns this value to that
صفحه 373:
با این دستور, اشاره گر 0 از نوع :7103+ تعریف میشود
و سپس یک بلوک خالی از نوع 1031] منظور شده و
ل او rere ل PE eee
89 ."در آن آدرس قرار مى كيرد. اكر عملكر
لالا١! نتواند خانة خالى در حافظه بيدا كند. مقدار صفر را
برمى كرداند. اشارهكرى كه اين جنين باشد. «اشاره كر
تهىء يا |-الالاا مینامند.
صفحه 374:
با استفاده از کد هوشمند زیر میتوانیم مراقب باشیم که
اشارهكر تهى ايجاد ل
double* p = new double;
if (p == 0) abort(); // allocator
failed: insufficent memory
else *p = 3.141592658979324;
در اين قطعه كد. هر كاه اشارهكرى تهى ايجاد شد.ء تابع
الل ا Bye
صفحه 375:
تاكنون دانستيم كه به دو طريق مىتوان يك متغير را ايجاد و
مقداردهى كرد. روش اول:
allocates // ؛
named memory
و روش دوم:
/ (9
allocates unnamed memory
صفحه 376:
0616186 عملكر Do
عملكر -. . . ..عملى برخلاف عملكر ١... دارد. كارش اين است
كه حافظة اشغال شده را آزاد كند. وقتى حافظهاى آزاد شود. سيستم
Tee oc ا ا ا 000
CCE Fae ا | لل ل 3
كار برد كه با دستور الا ©19 ايجاد شدداند. وقتى حافظة يك اشاره كر
ال ا ا ل ا ا دوباره اين
حافظه تخصیص یابد:
float* p = new float(3.14159);
delete p; // deallocates q
Be) oer M18) Femi cele ar
deallocated
صفحه 377:
وقتى اشاره كر (] در كد بالا آزاد شود. حافظهاى كه توسط
۷ به آن تخصیص يافته بود. آزاد شده و به میزان
(512601)103 به حافظة آزاد اضافه مىشود. وقتتى
|
که مقداردهی نشده. ا اشاره گر سر گردان
میگویند.
اشاره كر به يكد شىء ثابت را نمىتوان آزاد كرد:
const int* p = new int;
delete p; // ERROR: cannot delete pointer to const
objects
علت اين است كه «ثابتها نمى توانند تغيير كنند».
صفحه 378:
per ats ead ات
bey ese] |S) Rover 3017
اشتباه غير عمدى زير مى شود:
// x contains the value
3.14159
// p contains the address of x
// WARNING: this will make x
صفحه 379:
آيليمهاوبويا -11
خر Pe iv
تخصيص داده مى شود:
نام آرایه در
//a is a const pointer to a block of 20
floats
م5 50//
ل ل ا So nee eee
ل |
iyo Teor ا ا ل ۱
Bey ed ل ا ا ا ا كه
یافت حتی اگر از آن هیچ استفادهای نشود.
صفحه 380:
۹ Leonie re)
ever ea pes te eRe P Ee Tony RESTO eter Rarency
يابد:
700 ا ل العلل cor elena Eeyore)
02000 2 0 ا ا ل BCs
م Bp ree heer Se rin ل Lie
بستهیندی پویا۳ یا «بستهبندی زمان جرا» می گویند.
صفحه 381:
0
۱
پایان اجرای برنامه, حافظةً تخصیصی به آسن مشغول
آراية يوياى (] در زمان اجرا و هر جا كه
ا ا 0 ا 57
عملكر 1616© حافظة تخصيصى به آن را آزاد كرد:
delete [] p;
برای آزاد کردن آرايةٌ پویای 0 براکتها [] قبل از نام 0
باید حتما قید شوند زیرا 0 به یک آرایه اشاره دارد.
صفحه 382:
مثلل 8 /-١ استفاده از آرايههلى يويا
ا 2 0
void get(double*& a, int& n)
cout << "Enter number of items: "; cin >> n; {
a = new double[n];
cout << "Enter " << n << " items, one per line:\n";
for (int i = 0; i < n; i++)
cout << "\t" <<i+1 <<": "; {
cin >> ali];
1
void print(double* a, int n)
ee ee oe) ۰
cout << a[i] <<"";
cout << endl;
1
صفحه 383:
int main()
0 اا Mer MMe ame MTT] Le 1 3-1 |
وت رازه۱
int n;
get(a,n); 1 now a is an array of n doubles
print(a,n);
Geleten ay Arias eeu orien ui
again
get(a,n); // now a is an array of n doubles
print(a,n);
}
صفحه 384:
Enter number of items: 4
Enter 4 items, one per line:
1: 4
2:77.7
» نمه عدم
ل
44.4 77.7 22.2 88.8
Enter number of items: 2
Enter 2 items, one per line:
1: 3.33
2: 9.99
9 ع ع
ارو حا QQ
صفحه 385:
۷ ۳ ya Fogle
«اشاره كر به يى ثتابت» با 7 ثابت» تفاوت زر
7 ات ا erie
ثابتها
ا 7۳ اشاره كر اعلان شده. اشاره كر ,
اشاره كر ثابت (2. اشاره به يى ثابت ©0]. اشاره كر
ثابت به يى ثابت 066 :
صفحه 386:
ms رو
غصاا مج مغ عمعغمامم د // int* p = &n;
++(*p); // OK: increments int *p
++p; // OK: increments pointer p
int* const cp = &n; Mie Seelam oe
++(*cp); // OK: increments int *cp
++cp; // illegal: pointer cp is const
const int k = 88; ۱۱ < 2 ۲
const int * pc = &k; // a pointer to a const int
++(*pc); // illegal: int *pc is const
++pc; // OK: increments pointer pc
ola int* const cpc = &k; // a const pointer to a const
++(*cpc); // illegal: int *pc is const
صفحه 387:
اشاره كر ( اشاره كرى به IG P 995 em cul patito
افزايش است (++0) و هم مقدارى كه ( به لن اشاره مى كند
قابل افزايش است (++(*2)). اشاره كر 0© يك اشاره كر
ثابت است. یعنی آدرسی که در 00 است قابل تغییر نیست
ب ee OP 0007
کرد. اشاره گر 0 اشاره گری است که به آدرس یک ثابت
اشاره دارد. خود 0©(] را مىتوان تغيير داد ولى مقدارى كه
O16 ل 0 (ol
يك اشارهكر ثابت به يى شىء ثابت است. نه مقدار 6ع م0 ©
قابل تغيير است و نه مقدارى كه آدرس آن در ©6 © است.
صفحه 388:
آیلیهاواز-اشایهگرها -13
میتوانیم آرایهای تعریف کنیم که اعضای آن از نوع
اشاره گر باشند. مثلا دستور:
float* p[4];
EL CLL eres] pew Uy ele اشارهكرى
به 11938])اعلان مىكند. عناصر اين آرايهرامثئل
اشاره كرهاى معمولى مى توان مقداردهى كرد:
new float(3.14159); = [0]م
p[1] = new float(1.19);
صفحه 389:
اين آرايه را مى توانيم شبيه شكل مقابل مجسم كنيم:
مثال بعد نشان میدهد که آرایهای از اشارهگرها به چه
دردی میخورد. از این آرایه میتوان برای مر تبکردن
یک فهرست نامرتب به روش حبابی استفاده کرد. به جای
0
میشوند. Pp
8
oe |
صفحه 390:
PeaD ool Ld را
void sort(float* p[], int n)
float* temp; {
for (int i = 1; i < n; i++)
for (int j = 0; j < n-i; j++)
([1+زام* < [زام*) ؟1
زرا - موعة )
:1+ نزام < [ز]0
p[j+1] = temp;
}
صفحه 391:
۱ ae
حلقههای تودرتوی ۴0 بررسی میکند که آیا مقادیری که
اشاره گرهای مجاور به آنها اشاره دارند. مرتب هستند یا نه.
اگر مرتب نبودند. جای اشاره گرهای آنها را با هم عوض
مى كند. در يايان به جاى اين كه يى فهرست مرتب داشته
باشیم. آرایهای داریم که اشاره گرهای درون آتن به تر تیب
قرار كرفته اند.
صفحه 392:
A aS le meee Sl eel
یک اشاره گر میتواند به اشاره گر دیگری اشاره کند. مثلا:
char c = 't';
char* pc = &c;
char** ppc = &pc;
char*** pppc = &ppc;
**oppc = 'w'; // changes value of 6
30
حالا 0 اشاره گری به متغیر کاراکتری » است. 0۳ اشاره گری به
So Lil 7 0 ا 1۱
صفحه 393:
صفحه 394:
لشایدگر به تولبع -15
این بخش ممکن است کمی عجیب به نظر برسد. حقیقت
این است که نام یک تابع مثل نام یک آرایه. یک
ار
مىدهد كه كدهاى درون تابع را
كرفتهاند. يس بنابر قسمت قبل اكر اشارهكرى به تابع
اعلان کنیم. در اصل اشارهگری به اشاره گر دیگر
تعريف كرددايم. اما اين تعريف. نحو متفاوتى دارد:
function f 06601۵۲65 / :(غصأ)؟ غصا
int’ (*pf)(int); // declares function
pointer pf
صفحه 395:
ee ES Dep ne EME eee MeL Se
اين كه 5(] اشارهكرى به يك تابع است. بعد از كن يى
210 ا ا SEPA LY
ل و OL cy
CBT Ie ON Coca ا
صفحه 396:
فايدهٌ اشاره گر به توابع این است که به این طریق
میتوانیم توابع مرکب بسازیم. یعنی میتوانیم یک تابع را
ا ا ل ۳
a petioles Polar eecr yes Benet] .|
صفحه 397:
مثال ١-١8 تابع مركب جمع
تابع 514130() در اين مثال دو يارامتر دارد: اشارهكر تابع 05] و عدد صحيح 19:
int sum(int (*)(int), int);
int square(int);
int cube(int);
int main()
{ cout << sum(square,4) << endl;
cout << sum(cube,4) << endl;
صفحه 398:
تابع 7 يك بيارامتر غير معمول دارد. نام rai
دیگری به ا ل شده. هنگامی که
ور مقدار
square(1)+square(2)+square(3)
(50013:)4+ بازكشئست ذاده مىشود.
جون(©12) 50101316 مقدار oS onl K*K
SUM (Square,4) 19515 مقدار
(ejb 9 09905 4 _wloce Ly Me =1 F494 F 4) 95 513
تعریف توابع و خروجی آزمایشی به شکل زیر است:
صفحه 399:
int sum(int (*pf)(int k), int n)
{ // returns the sum f(0) + f(1) + f(2) + ... + f(n-1):
1552:
for (int i = 1; i <= n; i++)
s += (*pfi);
تاناعم 5
1
نيلات نت فليا
صفحه 400:
5 در فهرستهارلمترهائتابع 0051017) يى
اشايدكر به تابع لسستلشاره كر به تابعىكه لن
تابع پارلمترءاز نوع 80۴ دارد و مقدارعاز نوع Int
رابرميكردلند »ادر تابع 510117 لصلالستفادهم
0201 001 00 0 1 0 vod
4s ۴ ب به تابعیاشاید دارد که سس نوع
صفحه 401:
Se CirE ل ا 026 الل نك
آدرس شروع تابع ©5010131() را دارد. بنابراين وقتى
تابع 0514117 به شكل sum(square,4)
pee be ال ا و
اشاره كر 65] فرستاده مىشود. با استفاده از عبارت
DI LED) ا ا 0 ا
oi 0 ا
صفحه 402:
NULL , NUL-1¥
ثابت صفر (۰) از نوع 1108 است اما این مقدار را به هر نوع بنیادی دیگر
میتوان تخصیص داد:
char c = 0; // initializes c to the char '\O'
short d = 0; // initializes d to the short int
0
int n = 0; // initializes n to the int 0
unsigned u = 0; // initializes u to the unsigned
int 0
float x = 0; // initializes x to the float 0.0
dnithle 7 — nN: | مود روز 7 tr the doiihla
صفحه 403:
مقدار صفر معناهاى كوناكونى دارد. وقتى براى اشياى
عددی به کار رود. به معنای عدد صفر است. وقتی برای
ل ا ا ل Oe RC
الالاا است. الالاا معادل كاراكتر ٠٠" نيز هست. وقتى
مقدار صفر برای اشاره گرها به کار رود. به معنای «هیچ
جيزءيا ا الالاا است. | الالاا يى كلمة كليدى است و
کامپایلر آتن را میشناسد. هنگامی که مقدار أالالا با
ا ا 0
0 در حافظه اشاره دارد. اين خانة حافظه. يى خانة
استثنایی است که قابل پردازش نیست. نه میتوان آتن
خانه را مقداريابى كرد و نه مىتوان مقدارى را درون آن
ا ا میگویند.
صفحه 404:
Key ed TBS) esl ed) ان
Ba pret i bes cy 6 ل ا Bul Ree Uh eye Rete ree i ep
Pree Cer ep Revel) LU) 8 Biscay) boi Cave eco] DT care
int*p = 0; //p points to NULL
*p = aes // ERROR: cannot dereference the NULL
foeyial ee
يس خوب است هنكام مقداريابى اشارهكرهاء احتياط كرده و بررسى كنيم
که آن اشارهگر االالا نباشد:
if کر
ere w le 0 ل ا ا ا ان
fond eB Seen ee pen)
if (p != NULL) *p = 22;
صفحه 405:
اشارهكرها را نمىتوان ناديده كرفت.
آنها سرعت يردازش را زياد مىكنند و كدنويسى را
با استفاده از اشارهگرها میتوان به بهترین شکل از
حافظه استفاده كرد.
۱ ا ede)
ساخت. 20000
صفحه 406:
صفحه 407:
صفحه 408:
آچه دراین پلسه می فینید
! مروری بر اشارهگرها
! رشتههای کاراکتری در ()
1
" چند تابع عضو 2 و 2
" توابع کاراکتری () استاندارد
Rp Cp) ae
SES ES ae 0[ )2
صفحه 409:
0
cS دقیقتر به تبادل دادهها
دی قالببند
خی : اشنابي بأ ۷ M P| آنهاء.
آنوع ا
أفايلها
صفحه 410:
معرفی رشتههای کاراکتری به سبک 9 بب+و
نحوةّ ایجاد و دستکاری آنها و همچنین نحوةٌ
استفاده از فايلهاى متنى براى ذخيره سازى و
بازيابى اطلاعات.
صفحه 411:
هدفهای رفتاری: انتظار میرود پس از پایان این جلسه بتوانید:
were IY Brod pC Layee 7 1
- توابع معرفى شده عضو 25 و 7701 را شناخته و وظيفة هر يك را
شرح دهید.
- رشتههاى كاراكترى به سبى (00++ استاندارد را ايجاد نماييد.
- مفهوم «ورودی قالببندی شده» و «ورودی قالببندی نشده را
Emel by ۱
Et Ree PRC aD Mad cae cle
| ل Se Ee ل 26
- اطلاعات كاراكترى و رشتهاى رادر يك فايل متنى نوشته يااز
0
صفحه 412:
:مقدمه
دادههایی که در رایانهها پردازش میشوند هميشه
نيستند. معمولا لازم است که اطلاعات
کاراکتری مثل نام افراد - نشانیها - متون -
توضیحات - کلمات و ... نيز يردازش گردند.
جستجو شوند. مقایسه شوند. به یکدیگر الصاق
شوند يا از ی
در اين حلسه بررسى مى كنيم 4S چطور اطلاعات
تا
شكل دلخواه به -.:2-.. بفرستيم. در همين راستا
توابعى معرفى مى كنيم كه انجام اين كارها را آسان
ام كلند
صفحه 413:
ل ل
| Rents Sake)
حافظه میباشد. نوع این متغیر از نوع مقداری است
که در آن آدرس ذخیره شده. با استفاده از عملگر
ارجاع 6 میتوان آدرس یک شی را پیدا کرد.
همچنین با استفاده از عملگر مقداریابی * میتوانیم
مقداری که در یک آدرس قرار دارد را مشخص
كنيم. به تعاريف زير نكاه كنيد:
6026 د و ور
ا
صفحه 414:
ور(
در ی ۱
کاراکترهاست که این آرایه دارای ویژگی مهم زیر است:
-١ يك بخش اضافى در انتهاى آرايه وجود دارد كه مقدار
اك ب بون ل ل gore oe ول
تا
٠" - رشتة كاراكترى را مىتوان با ليترال رشتهاى به طور
مستقیم ۳ ره
sir[] = "striae"; ان
ا ا ا Pay Riper Wemreor
Wy gt yt p UGS
صفحه 415:
ا- كل يكد رشتة كاراكترى را مىتوان مثل يك متغير معمولى
چاپ کرد. مثل:
در این صورت. همه کاراکترهای درون رشتهة کاراکتری یکی
PTT me pee ae 7
برخورد شود.
- يك رشنة كاراكترى راامىتوان مثل يى متغير مفدولى ال
ورودى دريافت كرد مثل:
صفحه 416:
۵ - توابع تعریف شده در سرفایل <:7> را
wl» | دستکاری رشتههای کاراکتری oe
کار بگیریم. اين توابع عبارتند از:
Oca ا 1
(eee ae SRP
صفحه 417:
۳ LCM FY Seed DCMT LF Con)
۱ CoC oo ep Ce ORE ee RC er Cr Ae
ان(
۷
Por (iat i = O; i < S; i++)
at} << Mel >> ۱ >> y=" << Fall << ۳
۱
صفحه 418:
رشتة کاراکتری < دارای پنج عضو است که
عضو پنجم. کاراکتر ۰ مى باشد. تصوير
خروجى اين مطلب را تاييد مىنمايد.
39 کاراکتر ۱ ۰ به .. فرستاده
enero ne eed mre ee
سا
خط آخر خروجی. عضو پنجم را نشان می
دهد كه ميان دو علامت ايستروف هيج
جيزى جاب نشده.
ههه 1516
OO oOs4 3
صفحه 419:
1
در (0++ به جند روش مى توان رشتههاى كاراكترى
رادريافت كرده يا نمايش داد.
یک راه استفاده از عملگرهای کلاس 27:7 است که
ا ا 0
Pe ere Ree Ea ES SCENE TD)
در ادامه شرح میدهیم.
صفحه 420:
معال ۸۰۱۳ روش ساده دربافت و بمایش رستة فاق كار اكترق”:
در برنامة زير يك رشتة كاراكترى به طول 1 كاراكتر اعلان شده و
كلماتى كه از ورودى خوانده مى شود در آن رشته قرار می گیرد:
|
0
| _
کی
ا ل
i
صفحه 421:
g vin gas QU i> مت
ی ee
شامل توابع زير است:
ات هت
Diu.
70 همه این توابع شامل پی پیشوند 7:7 هستند زیرا آنها طضوی از
میباشند. به 7۷ شیء فرآیند خروجی می
ay mae ESO care ror ect RUAN ees
5 ل لت Papi yo
الما Rye Ow ot an) a Be)
درون 1 خوانده شود و مابقى كاراكترهاى وأزد شده تاديده
0
صفحه 422:
ط ات یت دا ار
:این برنامه ورودی را خط به خط به خروجی میفرستد
20 1
رگا {
7
٩۱ رک
eee رز
ل
i
صفحه 423:
را
مرا
اه
3
ل هرت سرت وا
۱ eal Glico) Borat Me هال"
Ae cd ؟
۱
صفحه 424:
لا كل
این برنامه تعداد حرف "< در جریان ورودی را شمارش
مى كند. قا وقتى (5-):<.: كاراكترها را با موفقيت به درون
میخواند» حلقه ادامه میباید: oe
Ree ale
oe 0 كرك Pe
يكيس 22 = = iP (ck
1
۱
صفحه 425:
ل
S, ل ل ورودی را به حرف بزرگ تبدیل
كرده و آن را مجددا در خروجى جاب مى كند:
ل
char ck, pre = \O }
Pe CC)
Ca dec eC
مت مب مسا
نم تست
۳
{
صفحه 426:
درل اس مسر امسر رت
Pape ICON BSE orc ie Ony even Sine ee eB
:مى كند
Reker dn nd
سسحتي ددنت ony
ene | للب یر نا 0
1
(edn)
۳
نت
1
۱ Ont teed) 3
| be }
زه << وم
صفحه 427:
تابع 00
اين نسخه از تابع 14 () معادل آن است كه در مثال قبلى بودة
0
ae رت
sh
while (ch = vis.perh())
iP (ch >= 'O' && vk <= 'O')
Bo
Rand
0
ا
Ree cc)
۳
صفحه 428:
توابع کاراکتری استاندارد
در مثال 8-8 به تابع:1017() اشاره شد. اين فقط يكى
از توابعى است كه براى دست كارى كاراكترها استفاده
epee cael Uy ope ا ا 2
7 تعریف شده به شرح زیر است:
شرح نام تابع
A int isalnum(int c);
ار > کاراکتر الفبلیی یا عددی باشد مقدار فیرصفر ۱5۵10۳۳۳(
وگرنه صفر را برمیگرداند
۶( 106) 152100۵ 106
لكر > کاراکتر الفبليى باشد مقدار eed ۱
(۵۵
(
صفحه 429:
(eu
int iscntrl(int c);
کر » کاراکتر کنترلی باشد مقدار غیرصفر و در غیر گن.
صفر را برمى كرداند
int isdigit(int c);
اكر © كاراكتر عددى باشد. مقدار غيرصفر و در غير آن.
صفر را برمى كرداند
int isgraph(int c);
0
|
نام تابع
)015 1
Oisdigit
Oisgraph
صفحه 430:
(ese
int ispunct(int c);
اگر 6 کاراکتر چلپی به غیر از حروف و اعداد و فضای خللی باشد. مقدار غیرصفر
SS TOS seed cine Rel oleae
10 isspace(int os
ی ی لش نت ی مت ها نس SINE ام
(۱ ae الل we لمر ل
lar an en eS aad nee a
int isupper(int c);
اگر 6 حرف بزرگ باشد. مقدار غیرصفر برمی گرداند وگرنه صفر را برمی گرداند
int isxdigit(int c);
اكر © يكى از ده كاراكتر عددى يا يكى از دوازده حرف عدد شائزدهدهى شامل
را و ا ا و رد
و '2' و '5' باشد. مقدار غيرصفر برمى كرداند وكرنه مقدار صفر را برمى كرداند
int tolower(int c);
Drea ee seed arian eee cere gene ata ae ead
برمی گرداند
int toupper(int c);
اگر 6 حرف کوچک باشد. کاراکتر بزرگ معادل آن را برمی گردلند وگرنه خود 6 را
برمى كرد اند
نام تابع
Qispunct
Qisspace
Qisupper
Qisxdigit
Qtolower
Qtoupper
صفحه 431:
ee ea Lo ee eres
دريافت مى كنند و يك مقدار اودارا برمى كردانند. علت
این است که نوع 77 در اصل یک نوع صحیح است.
در عمل وقتى توابع فوق رابه كار مىبرند. يك مقدار
صفحه 432:
به خاطر دارید که گفتیم یک آرايةٌ دوبعدی در حقیقت
آرايهاى يكه بعدى است كه هر كدام از اعضاى لن يك آراية
se gee 1
peed Reo) al]
wher unve[S][CO]
ا هد تس مس مت سب
Creare 1 1
SSSI a ie aa es a cae
۳ سس 2
ere Sees 1 0
تصور كنيم.
صفحه 433:
از طويق
reper bd ee OC ped BM yee) ees eget ا EC DY ree
ree’ Sona م ل ا CU pe eWepyer eer Rey.
يك بعدى با آن رفتار مى شود.
ين
صفحه 434:
آرابهای از رشتههای کاراکتری
CUE PO Ue eee I ese SES
ذخیره کرده و سپس مقادیر آن آرایه را چاپ میکند:
مت 6۱
م۳
AN RC en Rca eS Rn aca
phi (cic. getioe(cae[pouit++], SO))
حت ول جار
cea ل ا له
Leal ce OS ا
jot << "VW" <<i <<", [" << cacvefi] << "]" << ext
1
صفحه 435:
يى آراية رشتهای پویا
Beye) el ل مىدهد كه چگونه مى توان از كاراكتر
SSE ere OS Sea SL Se)
کرد. متال زیر تقر با معادل متال ٩-٩ است. برنامه زیر
1
يك خط نوشته مىشود و هر اسم با كاراكتر '1' يايان
مى يابد. اين اسامى در آراية 77 ذخيره مىشوند.
سيس نامهاى ذخيره شده در آراية 577 جاب مى شوند:
صفحه 436:
صفحه 437:
مقداردهى يك آراية رشتهای
Te لا
سا
Weert }} ماه سا تا مان مطس۳ ۲ ) حاسمت jobor*
و ۲ << Spout
Por (ict i = 0:۱ DO; i++)
“oot << "\I" <<; <<", ۱ << xeve(i] << اله
je > >
f
1
صفحه 438:
00 5 الله مه
توابع استاندارد رشتههای کاراکتری:
سرفايل <22002> كه به آن «كتابخانة رشتههاى
کاراکتری» هم میگویند. شامل خانوادةٌ توابعی است
كه براى دست كارى رشتههاى كاراكترى خيلى مفيدند.
ene sen | ل ا ا ل ل
9۳ میدهد. این ا طول ae) رشتة pricy
۰1۰۰۰۳ (یعنی تعداد کاراکترهای لن رشته)
را برمى كرداند.
صفحه 439:
Qsiries تابع
Rowe Oe er nC eee ney Ik eee eT ey
CCA Peer SOMES Brel PCM CRY oe Pn es DC ا
ا ا و ال داده میشود:
>> #بمساوص> على اوم
)(5 كعد
[]د عصساه" زر < 00008 1
joo >> sided >> و >> 1" =o Se ae >> المج
0 ل ا
har buPPer [OO]
oot << "Cater stray") ia >> buPPer
want << "0 ("<< buPPer <<") = "<< (buPPer) << endl
صفحه 440:
4 (oir ronr(), srenr(), sire
OS Eats 11 Ee SBE Ire SESE ا ا
BG يي
مها
_ ا ل ایب
Sa ا
)09 و
CO cea MS i اال
0
مط[" >> د - م >> "إء طاطهمم (ه ,5 | " >> بحو"
w= ,')
Ho ل ae Mee
یا
ددم >> "إدص صصمم CRN AW ">> نوم
جح ]۳
۱۳ te ae a
race? Me cn a a Ma td
و
aa اد اناك
صفحه 441:
3()eropy قايع
PRO Pere ee oe rr ere TEn e)
Stoke <pereont
<tock de <potrterg
مس ب()
۶ 2 ۵۵0066 ۱
< ]6و ز
۰( وراه عخه۲ >> له ز
(0)مطمم >> " - ايحا ,[" >> )م >> "] د هنا" >> بجو
<< 4
(م) وه >> ۲ < بمط ,[" >> 6و >> ] < 6" >> وم
jeud >>
jorop{o(l,e@)
Fond << "OPer os (0,28) :ha
pot << "Well = [" << ofl >> "[, (0ج) موی >> ۲ < یبط
jeod >>
(6م) ماه >> ۲ 2 بط ,(" >> هو >> ۲ = pon << "WO
jowd >>
صفحه 442:
تب مرو مورا
۱ ی
كدص ()
| ۲8۵۵۵۵۵ < 0و ات ز
Moher sl] = "XL
joo << "DePore sirap) (ol, 2@,C):\0
ofl << "], leony = "<< stlea(o(l) << "[ = ورا" >> نحص
<< از
irteu(sO) >> ۲ 2 اما [" ک> هو >> ] < هويا" >> يوم
<< از
(0, ور موز
Soma << "Per ما( مرو
pot << 90 = [" << 5 << "], eos =" << stteu(o(l)
joo >>
"J, lexus = " << sirtea(sO) << ۵و >> ۳] > هم" >> يوم
jes >>
1
صفحه 443:
تابع الصاق رشته ؛مسب()
برنامة زیر بررسی میکند که فراخوانی ( 26 ,7)26*< چه تاثیری دارد:
منیا
ل الل ا
rap 2 [] 6د سواه
ت۱۳
الا ene eo SP
<< لمور
ee Se (ce) ال ا ا ا اي
<< از
po eee)
Cee) 0
Bey See SP ae on St)
je >>
Pe RS oe Me Seo Scar Em Sa ice)
jead >>
0
صفحه 444:
لك مه 6
رشتههای کاراکتری در (-++ استاندارد :
MSI CME ey) ا 0
و البته بخش
م ا ا 0 0 30000
سريع داددها
Oe ee ne ee Se ee Se aren)
Abel
CPD eS Sp CBee Yr Caney. pers nes ree NU rae]
عنوان پایان رشته
۱ CT ey ET Te Cy
در اين رشتههاء طول رشته نيز درون رشته ذخيره مىشود و لذا فقط به
0
برای مشخص نمودن انتهای رشته اکتفا نمیشود.
صفحه 445:
نكاهى دقيقتر به تبادل دادهها
LEN) RAE eer BN YS Pe eT
را در فالب مجموعهای از کاراکترها تایسپ میکنیم.
1 ا ل ete ea
برنامه بفرستیم» این نتایج در قالب محموعهای از
کاراکتر ها نملیش داده میشوند. لازم است که لین
کاراکترها بسه نحوی برای برناصه تفسیر شوند. مثلا
وقتی قصد داریمیک عدد صحیح را وارد کنيم» جند
كاراكتر عددى تايب مى كنيم
صفحه 446:
ee Bieter SPIN Be) bed
سیک مقدار صحیح بسازد وبه برنلمه تحویل دهد.
همجنين وقتى قصد داييميك عدد اعشارى رلبه
خروجى بفرستيم, بليدجا استفاده از راهكارى»
Re ener Sap Pees ane nee |
eT egy) لت
صفحه 447:
۱
ee ا ey Leeann Wed pre
کاراکترها را بسه دادههایسی از یسک نوع بنیادی تبدیل
۱3 cae LOSS ie By ee ie
۱ Tee eee ee) oad
زیر کلاسهایی تقسیم میشود:
صفحه 448:
شممء 1 جريلنى است كه دادههاى مورد
se. كا بل وارد شده از صفحه كترم
(OP AY رلبه کار st هاى - خروجی تابل
TN Rupe eee) es nee
)_— و fem است که دادههای Coy
نياز را از دادههاى داخل يك فليل» فراهم
میکند. شيمء Ped ASNT جريلنى رم
دادههای حاصل را درون یک فایل ذخبره
VUE ne ee Beamer Le
را در ادامه خواهیم دید.
صفحه 449:
استفاده از عملگر بیرون کشی برای كنترل كردن یک حلقه :
دل
سه
while (via >> a1)
الوح ك>ك اي >> " دي" rea i
{
صفحه 450:
ورودی قالببندی نشده:
۱ eee bE
لین تولبع برای واره کردن کاراکترها و رشتههای کاراکتری
جه کار میرونه که کاراکترهای فضای سفید را نادیده
ذمى كير ند.
TP) ا الل ان
ean ot eee ere ey eam or pee
است.
صفحه 451:
فریافت کاراکترها با استفاده از تایع .ستوز).
صفحه 452:
وارد گردن یک رشتة کاراکتری به وسیلة تابع +۵«(
De ROSIE ae bea Teele) ea) oe Eee ae Shane)
درون یک آراية رشتهای قرار داد:::
00 26 )صا م عمجم
vans eae 00ت جل ر] 801 وا دمت
(pede etre Der MG Oy ec Aor ti OMen aay pre
Oss sects
ener errr ee ae na ct (rol
jet =D
whie(cie.qwitoe(coomprfert+], LEO) && «OL )
in
Por (it HO; کر ++)
wan << ۳ >> ۲ <<" " << oneirfi] << لمم
صفحه 453:
BS) ee Ore me ey mira)
در ():+ استاندارد نوع دادهای خاصی به نام :7:77 وجود دارد که مشخصات این نوع
ا Bp eects ee ee dee pore eRe eee a aan
a te Me Tee Dene See Ret 0
میتوانند اعلان و مقداردهی شوند:
0 as ae
ace مس ت۱۳
eave ene
۱۳ ا
۱/۳ es SRS iam asc anata
صفحه 454:
استفاده از ره اروت
کد زیر یک مجموعه کاراکتر را از ورودی میگیرد و سپس بعد از هر کاراکتر
ne Ao 1
مثلا اگر عبارت ۳
"COPTOORE DOOCOEOT 6 begat
ON eee eM ee SCS ee)
The رگ DOOCG, OE, OT & begac
متن برنامه این چنین است: امس سس
ide Cae}
صفحه 455:
خابلها
يكى از مزيتهاى رايافه» قدرت نكهدارى اطلاعات
حجیم است. فابلها لین قدرت رلبه رابلنه میدهند.
Ce her ety Se es ad
SS tt Tee rd
نمی کردند.
چون اغلب برنامههای امروزیبا فایلها سر و کار
دایند»یک برنامهنییس لازم است کمبا فلیل آشنا
eee ا pes
eB کارابی ۳ را eddO LR)
صفحه 456:
۱۳ eB) ee Te Lae 3S)
ا ا ل ال
eee) Boat ا ل oar |
ل ل eros,
دو زير شاخة مرس و رو وت dot ped ومحوجدا
تقسيم مى شود.
جريان مرو براى خواندن اطلاعات ei) فلیل
اه کار میرود و جريان موص وناو براى نونتن
اطلاعات درون يك فايل استفاده مى شود.
صفحه 457:
ae a Som Serer een
شدهاند.
1 nee
ی
سا سا
۱ اک و
|
طبق کدهای فوق» ا ی
صفحه 458:
یک دفتر تلفن
برنامة زيرء جند نام و تلفن مربوط به هر يك را به ترتيب از كاربر دريافت كرده
و ذر قايلي به نام ۱۱ 1۱۱۱ 0 دخیره ميکند. کاربر براي بایان دادن
به ورودي بايد عدد (0 را تايب كند. Pree ae eee
ee ee
ee ees RC ROOD Ce
یس و مزا
سس موز
(RS et) وه ۳ RC ۲ >> فد ز
ود
SR SKC
2 بر
۳
۳
0
عدم >> السام << ' أ
aa
صفحه 459:
جستجوي یک شماره در دفثر ثلفن
اين برنامه» فایل تولید شده توسط برنامه قبل را به کار ميگیرد
و درون آن به دنبال یک شماره ثلفن ميگردد: مد رت
el داكا
میا
ee See Fel ch ۳[
aS ee >> لو
وم سر
0
اس ل 110
pe ee a oe
{
صفحه 460:
پایان جلسه هشتم
صفحه 461:
صفحه 462:
ABLE ی
(- اعلان کلاسها
- سازنددها
"- فهرست مقداردهی در سازندهها
با
0- توابع عضو خصوصى
ee و۳ )»>
صفحه 463:
۷- نابود کننده
Se
Peed Ie Eo Ore |
اعضاى دادهاى ايستا - ٠
توابع عضو ايستا -١١
صفحه 464:
هدف کلی :
آشنايى با كلاسها و اصول اولية
به کار گیری ag!
صفحه 465:
۳۹ رفتاری:
انتظار میرود پس از پایان این جلسه بتوانید:
- نحوةّ اعلان «کلاسهاء را بدانید و اعضای یک کلاس را برشمارید.
a ee BELEN Bed Dred re ed ee Cre Rat cia 0
کدام را بیان کنید.
- «تابع سازنده» را شناخته و وظیفةٌ آن را شرح دهید.
- روشهای گوناگون :
صفحه 466:
مقدمه
2020 رهیافت جدیدی بود که برای
ياره اى از مشكلات برنامه نويسى راه حل
داشت. این مضمون از دنبای فلسفه به جهان
برنامهنویسی آمد وكمى كرد تا معضلات
تولید و پشتیبانی نرمافزار کمتر شود.
اشیا را میتوان با توجه به مشخصات ورفتار
آنها دسته بندی کرد.
صفحه 467:
در بحث شى كرايى به دستهها (eID
میگویند و به نمونههای هر کلاس 00
00
مشخصات هر شى را «صفت؛ مینامند و به
رفتارهاى هر شى «متد؛ 2
صفحه 468:
برنامهنويسى شى كرا بر سه ستون استوار است:
الف. دستهبندى: يعنى اين كه دادههاى
مرتبط. با هم ترکیب شوند و جزییات
پیادهسازی مخفی شود.
Am) وراشت: در دنیای واقعی. ورافت به این
معناست که یک شی وقتی متولد میشود.
خصوصيات و ويزكىهايى را از والد خود به
همراه دارد .
صفحه 469:
امتياز وراثت در اين است كهاز كدهاى
مشترى استفاده مى شود و علاوه بر اين
كه مى توان از كدهاى قبلى استفاده مجدد
Eee رس
استحكام منطقی 0-0 هم 0
ميپابد.
صفحه 470:
ل 2
میگویند به معنای یک چیز بودن و چند
شکل داشتن است. چندریختی بیشتر در
وراثت معنا ييدا مىكند.
صفحه 471:
لدت ۱7۳
كد زير اعلان يك كلاس رأ نشان مى د هذ
موه
:لس )
0 رس(
viod prici();
۳۳۱
ce ۱
اعلان کلاس با chase 5345 aal5 شروع
میشودسیس نام کلاس میاید.
صفحه 472:
35 if
علان اعضا
که کلاس درون نک وی از
بلوى انجام مى شود
ES peer) سمیکولر 71 9 بلوک نشان
مىدهد كه اعلان كلا te 9 بت
ee LO og فته | 2
|
ارت
ریت 2 هر عصوى
5 5 عبارت ۳۲۱/۷ كه
le Ju ت ره ا 1 2
2 0
عمومی»
محسوب میش
Te) 0 عضوى كه 3
ذیل عبارت
2
۱ ۳ 7 DY OD Cl a ANd
> 2 3 ده
خصوصی»
08
شود.
صفحه 473:
سازندهها
وظيفة ee rol است که حافظةً لازم را برای
شىء جديد تخصيص داده و آن را مقداردهى نمايد
و با اجراى وظايفى كه در تابع سازنده منظور شده.
شیء جدید را برای استفاده آماده کند.
هر کلاس Bw PP) چندین سازنده داشته باشد. در
حقیقت تابع سازنده میتواند چندشکلی داشته
۰
صفحه 474:
راز نس را
از یکدیکر تفکیک میشوند. ,رب(
مثال 4-0 افزودن جند تابع سازندةً ديكر به كلاس 47-©)
هت
تاطحم )
casted (PR ل 0ك
(PY ا (RG) كا
cain ال 000 كا
0 0 0
:ادرفم
att 00
7
صفحه 475:
این نسخه از کلاس ۶( ر., سازنده دارد؛
Lee eae ee rau rca
۱ PENS SCTSCUU MI RCTNC)
برد سازنده یک بارامتر از نوع از دارد و
ی اعلان شده را طوری مقداردهی میکند که
حاصل مقدار آن يارامتر برابر باشد.
20 شازتدة نير همان سازندة مثال ۲-۱۶
زر
صفحه 476:
یک کلاس میتواند سازندههای مختلفی داشته
باشد. سادهترین آنهاء سازندهای است که هیچ
بر اسری ندارد + ابر BIS سازئدة يريش فرضص.
38
اكر در يك كلاسء سازندة ييشفرض ذكر
نشود. كاميايلر به طور خودكار كن را براى
كلاس مذكور ايجاد مىكند.
صفحه 477:
فهرست مقداردهی در سازندهها
سازنددها اغلب به غير از مقداردهى دادههاى
ee este ae repos 20
همين دليل در 0++ يك واحد دستورى
مخصوص بيش رببينى شده كه توليد سازنده را
ECP) ee a ROLE RO ced
«قداردهی تن داردد
صفحه 478:
به سومین سازنده در متال ٩-۵ دقت کنید. این سازنده ر
میتوانيم ب) استفاده از فهرست مفداردهی به سكل ركر
خلافه کندم:
o, ct): num(n),den(d) { } ۱02
مثال ٩-۶ استفاده از فهرست مقداردهى در كلاس -1-)
مدا سا
۱
(0(1)-ظ یراس نف
۱ از en sl (OE AY
0 ا ca)
rag aw ot
ach رن با
1
صفحه 479:
توايع دستيابى
دادههای عضو یک کلاس معمولا به صورت
خصوصی (۶,<) اعلان میشوند تا دستیابی به
آنها محدود باشد اما همین اهر باعث میشود
A5 در مواقع لزوه به اين دادهها
دسترسى داشته باشيم. براى حل اين مشكل از
تواتعئ نا عنوان ٠2:0 ٠ب استقادة
میکنيم.
صفحه 480:
تابع دستیابی یک تابع عمومی عضو کلاس است و
به همين دليل اجازةً دسترسى به اعضاى دادهاى
خصوصى را دارد.
با استفاده از توابع دستيابى فقط مى توان اعضاى
دادهای خصوصی را خواند ولی نمیتوان آنها را
دستکاری کر د.
صفحه 481:
مثال ٩-۸ افزودن توابع دستیایی به کلاس ۳؟)
۱
وم
۹ 20, Nap) 9 8
الح
( دصل 99 ۳ 0
صفحه 482:
توابع عضو خصوصی
توابع عضو را گاهی میتوانيم به شکل یک عضو
فصوصى كلاس معرفى كنيم. واضع است كه هنين
تابعى از دافل برنامةً اصلى به هيج عنوان قابل
دستيابى نيست. اين تابع فقط مىتواند توسط ساير
توابع عضو كلاس دستيابى شود. به هنين تابعى يى
اا ل میگوييم.
صفحه 483:
co
در بر
تابع عضو خصوصی به نام ۳۵۱() است.
وظيفة تابع مذكور اين است كه معادل
jroo شناور یک عدد کسری را بر گرداند
مه زير. كلاس 0
a يي
اين تابع فقط درون بدنة تابع عضو
7 )) استفاده شده و به
انجام ol dab كمكدمىنمايد و 1
هیچ نقشی در برنامةً اصلی ندارد. ۱
صفحه 484:
سازندة كبى
۱
در متفیری به نام » از نوع ایجاد میشود.
در هم همین کار انجام میگیرد با این
تفاوت كه يس از ايجاد >< مقدار موجود در متغير >ا كه
از قبل وجود داشته درون *< مىشود. اصطلاحا ><
3 00
صفحه 485:
0۲
كد بالا يك شى به نام باز نوع 0557 ايجاد
Ooo eed كت ا ل SPP
آسن قرار مىدهد. اكر در تعريف كلاس»
سازندةٌ كيى ذكر نشود (مثل همة
etd ل ا ل ات
زره رم دس لت
خواهد شد.
صفحه 486:
مثال ٩-۱۰ افزودن یک سازندهٌ کپی به کلاس ۲
0
اك اك 1
xn), ely xox) اك و0 اق قسن رن
0 ۷ ۶ ۱ ۶
Aan
fot ony, choc
1
در مثال بالاء تابع سازندة کیسی طوری تعریف شده که
سس را رت سر
ل ا
صفحه 487:
سازندة کپی در سه وضعیت فرا خوانده میشود:
See TCI ree eee PCy eal] ل
شود.
1
1 شی به وسیله .:_ ر به یک تابع رال
٠” - وقتى كه يك شى به وسيلة :ار از ز گشت
an شى راز یک تابع .زر <-
صفحه 488:
زابود كننده
{
١ 5
یب نسم ِ رل(
r
وقت که
وقتی 5
یک نابود کننده ۱
.دارد تع |
>
صفحه 489:
مثال ٩-۱۲ افزودن یک نابودکننده به کلاس ۲97)
uss Ratz
رم ۷
.60000 ۱ متسر
0
iy
~Ruto() { cu << "OBJECT O1EG.\a"; }
م۱2
در زر ce
صفحه 490:
اشیای ثابت
اشيا را نيز میتوان با استفاده از
عبارت 772۱ به صورت یک شیء
ثابت اعلان کرد:
vows Ruic PUCS,?);
9.00۴93
۱ of], = wnt GIL);
صفحه 491:
۱
ee eee Te) كر
0 از آنجاکه یک کلاس
ا ا ا ا
داشته باشد.ء اشاره كر به اشيا بسيار
سودمند و مفید است.
7 به ._برای ساختن فهرستهای
ييوندى SEE كار
oy)
صفحه 492:
مثال ٩-۱۳ استفاده از اشاره گر به اشیا
صفحه 493:
pS) ار
pa تسس - ای ز Cleitel (pee) رز مر
آن شى ۳7 Perrone) میکند.
حتماباید هنگام استفاده از آن را درون
py) ((۱
تقدم بالاتری نسبت به عملگر مقداریابی (4)
دارد.
اکر برانتزها قید نشوند و فقط . . ., نوشته
شود کامپایلر این خط رابه صورت ...۰ ا
تفسیر خواهد کرد که اين باعث خطا میشود.
صفحه 494:
تا لس Oe IDE DD EDC ل
نشان میدهد.
مثال ٩-۱۴ فهرستهای پیوندی با استفاده از کلاس اك
Gr اذ
اک
خناتانم 1
data(d), ل 4 200
ا
Reeser
7 20
صفحه 495:
عبارت بالا کلاسی به نام 702() تعریف میکند
که اشیای این کلاس دارای دو عضو دادهای
هستند که یکی متغیری از نوع 1 است و
ديكرى يك اشارهكر از نوع همين كلاس- اين
ل ل ا Papa ACS od
ديكر ييوند دهيم و يك زنجيره بسازيم.
صفحه 496:
اکر اشیای و «و از نوع ع() باشند. میتوانیم
پیوند اين سه شی رابه صورت زير مجسم کنیم:
صفحه 497:
به تابع سازنده نیز دقت کنید که چطور هر دو عضو دادهای شی.-
جدید را مقداردهی میکند.
صفحه 498:
0 ا نامه را نشان میدهد.
شكل زير روند اجراى بر ر دا می | [int data
م
[Node* next]
int data
int data م
لمع | كك
صفحه 499:
اعضای دادهای استا
هر وقت که شیثی از روی یک کلاس ساخته میشود. ن
Oey lr rR EC BL coed
رادارد. كاهى لازم است كه مقدار يك عضو دادهاى در
همة اشيا يكسان باشد. اكر اين عضو مفروض در همة اشيا
ee) ل ا ل FC
pe: Sipe pe agere entrees) 2 ل 0
عنوان يك عضو ايستا اعلان كنيم.
صفحه 500:
۱ meee oe Roe itr ole perry
1۱ Cree ONC ا ل an Papen L etee)
متغیر. میتوانیم آلن متغیر را به صورت ایستا اعلان نماییم. یک متفیر ایستا را فقط
|
یک عضو دادهای ایستا را بیان میکند:
)ا ععواص
) :عناطح
۱ ل eae RR RR Cac cco
صفحه 501:
See a ae eer اه care)
گونه متغیرها 0 tee SS en be mete Te)
Pe ee re ok Mer Be eae ا
داشته باشيد.
eae Re a on PNT
كد زيرء كلاسى به نام اعلرن اعلان مى كند كه اين كلاس يى
عضو دادهای ایستا به نام سس دارد. این عضو تعداد اشیای
اس که موجود هستند را نگه میدارد. هر وقت که یک.
ered ل ا ل ل ل كت
ا ل ا ا لاك
مى شودء از طريق نابود كننده مقدار دحج يكد واحد كاهش
مییابد:
صفحه 502:
۳
) عاطم
OO aa
BO Gee)
تفه بت
1
يي نا
:"ما حاصيلشيد " >> توميب >> " ضبن جمصذا بيه ()" >> انجس
و۲ Oe
| =
4 0 ۳ ۳ LS
صفحه 503:
توجه کنید که چگونه چهار شی-ء اعلب درون بلوک
۱
بلوى خارج مى شودء 7
SOCIO MME aE A ND
يى عضو دادداى ايستا مثل يك متغير معمولى است: فقط
دک نان موه خاس دی دی
صفحه 504:
peer ا
Pe ONS a
9
OO aes
ره
اس { retura cout; }
صفحه 505:
۱۹ fea OD
0ك
0
pout << "Dow there ure" << wn Dideets() << " widgets. la";
0
ا ال ال
}
FNS OE Sa ا لل ا Ae
ما
I OYE wrt he STR ل ل
صفحه 506:
اين برنامه مانند مثال 4-18 كار مىكند با اين تفاوت كه متغير
ایستای سح به شکل یک عضو خصوصی اعلان شده و به
م ا ROU Oa earn كل
بتوانیم درون برنامةٌ اصلی به متغیر #سحسه دسترسی داشته
Steer ed |
مقیل تور کم
QWidget
QWidget~
QnumWidgets
صفحه 507:
WO Cnt atthe
بادقت در مثال قبلى به دو ايراد بر مىخوريم: اول اين كه كرجه
0 متفیر 77:0 یک عضو ایستا ال
1
1
ا ا
ا 00
صفحه 508:
پر
كد زير همان كد مثال قبلى است با اين فرق كه در اين كد. تابع دستيابى كننده نيز به شكل
ايستا اعلان شده است:
يت
public: {
OR etal
یو تساه
ا ما ان
00
اه انز ماد
صفحه 509:
PO teats (De
fat ata)
ات۱ SZ al
Ses
pout >> "Onw there ane" << Didget:taucn() <<" wideets-\0";
SS a i a
0 ل ل
i
NSM a ee RE OO Oc OS ها لس
5 5 5)
Bs -
صفحه 510:
وقتی تابع () به صورت ایستا تعریف شود.
Femi 002
آن نیازی به یک شیء موجود نیست و میتوان با
Ree ER OS Cay م ee
فراخوانی کرد.
صفحه 511:
پایان جلسه نهم
صفحه 512:
9 ۰
رز
دما مود
ارب
جلسه دهم
۷ عملک ها «
صفحه 513:
: آنچه در این جلسه می خوانید
"- توابع دوست
- سربار گذاری عملگر جایگزینی (-)
۷
- سربار گذاری عملگرهای حسابی
Dl aCe Soca PO) Soa 1
- سربارگذاری عملگرهای رابطهای
ا FPS BCI 1 BCe ONT
صفحه 514:
خا ا ل كت
كلاس و نحوة انجام اين كار.
صفحه 515:
هدفهاى رفتارى: انتظار مىرود يس از يايان اين جلسه بتوانيد:
-«سربار گذاری» را تعریف کرده و اهمیت آن را شرح دهید.
با ا
بیان نمایید.
م 15۱۳۱
- نحوةً سربار گذاری عملگر جایگزینی را بیان کنید.
- نحوةّ سربار گذاری عملگرهای حسابی را بیان کنید.
- نحوةٌ سربار كذارى عملكرهاى جايكزينى حسابى را بيان كنيد.
- نحوةٌ سربا ركذارى عملكرهاى رابطهاى را بيان كنيد.
ا 00
صفحه 516:
مش وه
در 0++ مجموعداى از ر»2, .71 مختلف وجود دارد كه براى كارهاى
ee eed Sem nee toe) ا له
ار
هنگامی که کلاسی را تعریف میکنیم. در حقبقت یک نوع جدید را به
۱
۱
اما چون عملگرهای ریاضی زر ۲,۰ -, -) چیزی راجع به اشیای
كلاس جديد نمىدانندء نمى توانند به درستى كار كنند. 0++ براى رفع
اين مشكل جاره انديشيده و امكان سربا ركذارى عملكرها را تدارك ديده
ا ل ا ا ل ل ل ل 4
جدپدی اضافه کنیم تا بتوانند با اشیای کلاس مورد نظر به درستی کار
صفحه 517:
Sa
که (صله) )م سجاصب وا لمحناز
اعضایی از کلاس که به شکل خصوصی . مزر
AO) care Or ee ee eee eae
دستیابیاند و از بیرون کلاس (درون بات
امكان دستر سى به bol نیست. on ۹
اما يك استثنا وجود دارد. 2 ا
که عضو یک كلاس نیست اما اجاژه دارد به اعضاى |
وی ره
>> ۶ >> لز
1
صفحه 518:
۲-سربا رگذاری عملگر جایکزینی(ع):
دربین . . . . . . .عملگر جایگزینی شاید
ل ال ل 211
sea || ل ا ا ا ل 0
مانتدر ازن زر رس زد کر ونر رت ره
عملگر جایگزینی نیز به طور خود کار برای یک
و ابحاد مى شود اما اين تابع 7 میتوانیم كت SS
صربح درون كلاس اعلان نماييم.
صفحه 519:
افزودن عملگر جایگزینی به کلاس:
pres Ce pc eep ety است که شامل سازندةٌ
gee ECR D AS ie Deer) لت
) وه
سس ۲
(Dy 4 420
(Nir (zeacicah Onbeui49
vod operator =(roust Rutin&);
5-5
Ane aace در زر
صفحه 520:
0000 Ce] EEC S OCU) CES
است و فهرست آر گومان 0
آّن ل ل ا ا ا ل منفرد
دارد كه از نوع همان کلاس است که 1 ارجاع ثلبت
Peed ا ل ا الل
Osh a
{ ۳ ae کد فوق اعضای دادهای شی-ء را لل
2 به درون اعضای دادهای شیثی که
مالک فراخوانی این عملگر است. /
GE
صفحه 521:
۲-اساره گر :۲
در . میتوانیم عملگر جایگزینی رابه شکل زنجیرهای مثل
زير به کار ببریم:
07 < « < رر:
اجراى كد بالا از راست به جب صورت مى كيرد.
يعنى ابتدا مقدار (OL PP) 0 مى كيرد و
سيس مقدار درون كيى مىشود و سرانجام
مقدار لا درون 41,5 اا ا 0
جایگزینی که در مثال قبل ذکر شد. نمیتواند به
شکل زنجیرهای به کار رود.
صفحه 522:
od عصاس
اه
tet =); I] teP ok poostrutor اد
aia gt aed اس ماس دا
وم Cee Ta. cme (ek)
vier devloraicas yp here //
سم
نویه
/ ور مت ور
1
Mee RO دا مت a)
ار مار ۳
tan ad
Hae
صفحه 523:
۱۱ ee eee eee ened)
مقداردهى تفاوت داردء هر جند هر دواز عملكر
یکسانی استفاده میکنند. مثلا در كد زير
۵۵ وا وا ۱ :(7 Ratio mes
Ratio y(x); // this is an initialization
8۵0 2 - a // this is an initialization
8316 الا >
۸ < /۱ واعوه طه عا عنط 6۶
پآ
os . جایکزینی عملکر جایگزینی .
ان
صفحه 524:
:سر بل وذليوت سار هاو رعسبو
چهار عملگر حسابی . و - و و ل زبانهای برنامهنویسی وجود دارند و با
kre sre ل ل مل اكت
. « أ آنهاء اشياى ساحت خودمان را در محاسبات
ی و 2 اي
مر
eee ee ARIEL Rees Ae ۱ ی
Tay OTe em] Es nei era a
2 دسر 3
عملگر ضرب براى كلاس 2 به شكل 7
(بر صنه<ا) ,> مها )) “مومه ص2
cyt 1
2 ۳
{
صفحه 525:
|
هب« el کلاس دستيابد. برای رفع این محدودیتها.
تابع سربار گذاری عملگر ضرب را باید به عنوان تابع
دوست كلاس معرفى كنيم. لذا قاالب كلى براى
سربار گذاری عملگر ضرب درون کلاس مفروض آبه
شكل زير است؟
Class T
۱ T operator*(const T&, const
:ء1اطنام
public members //
oleae
Ue ۶ ۹۵
صفحه 526:
| در سرباركذارى عملكرهاى حسابى +و -و /نيزاز
aren | Perc open NFP Cas Fe 1
ae WS EB Dee ele a ی
علامت عملگر مربوطه را قرار دهیم و دستورات بدنة
7
T operator*(cor
T& y)
0
// required operations for z =
st T& x, const
صفحه 527:
مثال ۱۰-۳ سربار گذاری عملگر ضرب برای کلاس :۳؟)
سستات
اس pee eee eer cee re
ee
(0 دس ره د ه)مدمار
)) سمدم )ماه ةر
| eek)
رد
هط
3
Rate opercie” (cost Reto& x, ret Reaio& y)
| ee ee ee
دم
1
لا
لع (مبمار زه )مدر
7
1
صفحه 528:
۵-سربا رگذاری عملگرهای جایگزینی حسابی؛
Oe en eles ا ا eae a
۱ ا ا ا الل
۱
. . حسابی ساده. فقط یک عملوند دارند.. ele Slee GUS yp Le Sloe
سربار گذاری عملگرهای جایگزینی حسابی بر خلاف عملگرهای حسابی. میتواند عضو
۱ eo eee Bl RC Soe tS CB) Sa
CEP ی زر رد
ا 00 5
ee
كه )د D&
فا و۳
31
صفحه 529:
بدنة تابع سربارگذاری به قالب زیر است:
T& Topercia*= (cost T& x)
required 7۳۲ // {
returce “this;
}
استفاده از اشاره گر .. . باعث مىشود كه بتوانيم عملكر2 را
در يك رابطة زنجیرهای به کار ببریم. در چهار عملگر
ا ا ا ال ل 0
بر ا
er amen ya ل
دستورات بدنة تابع را نيز به تناسبء تغيير داد. مثال بعدى نشان
میدهد که ال ا ل OES) Mina 0D) SCD
00
صفحه 530:
کلاس عطلت(1) با عملگر *- سربار گذاری شده
ات
>21 5 774ص
Re ana
ac ane al 2 مجدر
عا محر
صفحه 531:
#-سربار كذارق تملترفاق رابطداقة
شش عملكر رابطهاى در ١ وجود
دارد كه عبار تند از: > وح از ل >=
۳۳
این عملگرها به همان روش عملگرهای
arrce ل سا ۳
ECD) peer میشوند. اما ی
RO Tones”
صفحه 532:
حاصل عبارتی که شامل عملگر رابطهای باشد.
همواره یک مقدار بولین است. یعنی اگر آن عبارت
درست باشد. حاصل 20 است واكر آن عبارت
نادرست wel
جون نوع بولين در حقيقت یک نوع عددى صحيح
است. میتوان به جای 20 مقدار ١ و به جاى
ال Fon nee
بازکشتی را برای توابع سربار گذاری عملگرهای
رابطهای. از نوع . . قرار دادهاند.
صفحه 533:
قالب كلى براى سرباركذارى عملكر رابطهاى -- به شكل زير است:
chase “|
jPriead tot operctor==(cocst T&, coset ۳۵۵ jf
9
مر راز رز
1
صفحه 534:
int operator==(const T& x,const T&
۸
required operations to finding // }
result
۳2۰۱۱24
ee en en ee aa at tear nce)
مى كيرد. ساير عملكرهاى رابطهاى نيز از قالب بالا ييروى
صفحه 535:
ey
5 وسيسب 35 CaO ae) Ci eiey cd
اد SN sel CS ee DD كسر هستند,
7 است که برای Sines
Renee glee بررسى اين تساوى مى توانيم
0 (ى*دا--00) را بررسى كنيم. بدنة
ان = — DPE Nts bp perro
re را بررسی میکند.
a رسمه از
7
0
aD) يي سا مت ی سس
Fee RMA. a Cen) |
i
صفحه 536:
۷-سریارکذااری عملگرهای افزایشی و کاهشی:
عملگر افزایشی ++ و کاهشی -- هر کدام دو شکل
rls
- شکل پیشوندی.
شکل پسوندی.
هر کدام از این حالتها را میتوان سربار گذاری
3S
صفحه 537:
قالب کلی برای سربار گذاری عملگر پیشافزایشی به شکل زیر است
ان جا ع ار اشارة كر "7 (استنادة ره علت هم
eee ad ا ا ۱
باز گشت داده شود. به همین دلیل اشارهگر به
و ۱
۱
صفحه 538:
0 " یک شى از كلاس باشد وعبارت ارزیابی
كرددء مقدار به افزوده مىشوداما جون يك عدد
pee) ا ال ل 2 ل 0 200
دارد. فرض کنید . . . . باشد. حالا داریم:
22 22+7 29
Sa pe 3
صفحه 539:
1
ل 00
اشارهگر . به شیء جاری (مالک فراخوانی) اشاره دارد. کافی است مقدار این اشارهگر
ا ا ل ا ا ل ۷
۱
در عمل جایگزینی, درون قرار میگیرد:
12 arc ed
Par: wee (clo ie) ean
۱9 ACL ie و
۱ سس om eta OME ا
Cae ees ccs ny ld (ec eaL
Fc Rea aS MI Sa
۳ en ane ad
FST ae
1
صفحه 540:
0 0 ل نیز به
ال eee See ay
Te RCD) eae) 0
اينهاء عملگرهای دیگری نیز مثل عملگر
خروجی (<<) , عملگر ورودی (> >).
عملكر انديس (]) و عملكر تبديل نيز وحود
دارند که میتوان آنهارا براى سازكارى
براى كلاسهاى جديد سرباركذارى كرد.
صفحه 541:
پایان جلسه دهم
صفحه 542:
9 ۰
رز
دما مود
ارب
جلسه بازدهم
«تر کیب و ورائت»
صفحه 543:
مقدمه
رس
وراثت
اعضاى حفاظت شد
غلبه كردن بر وراثت
ار
ا ل
peec eye ا
صفحه 544:
کلاسهای پايةٌ انتزاعی
پرسشهای گزینهای
پرسشهای تشریحی
eed شي
5 : ياسخنامة يرسشهاى كزينهاى
استاندارد
استاندارد
صفحه 545:
بيان اهميت تر كيب وورائت در
شى كرايى و جكونكى انجام اين كارها.
انتظار میرود پس از پایان این جلسه بتوانید:
ده( See Peon eke Soe I ۳
صفحه 546:
- «اعضاى حفاظت شدة كلاس» را تعريف كنيد و تفاوت
اين اعضا با اعضاى عمومى و خصوصى كلاس را شرح
5
- نحوةٌ غلبه كردن بر وراثت را شرح دهيد.
- «تابع مجازى» را تعريف كنيد و علت استفاده از توابع
مجازى را بدانيد.
- «چندربختیی را تعریف کنید و ل
چندر بختی بر کلاسها ۳۳
- «کلاس پايةٌ انتزاعی» را تعریف کنید و علت تعریف این
كلاءان افا را ذكز) كنيد:
صفحه 547:
Ree ee Re Were Ret nore رت
كه همه جيز از اول طراحى شود. مى توانيم براى ايجاد
کلاس مورد نظر از ارت TH coy Ge
11211111117
اين باعث صرفهجويى در وقت و استحكام منطق برنامه
د.
صفحه 548:
۱
از یک يا چند کلاس دیگر در داخل تعریف یک
كلاس جديد.
هنكامى كه عضو دادداى كلاس جديد.ء شيئى از
كلاس ديكر باشدء مىكويبم كه اين كلاس جديد
تركين از شاير كلاس هاست.
به تعريف دو كلاس زير نكاه كنيد.
صفحه 549:
کد زیر. کلاس -::() را نشان میدهد که اشياى اين كلاس براى نكهدارى تاريخ استفاده
میشوند.
تایه
W=O, rt S=D) ۱۹
ad a)
Fee Oe ea on)
1: il Sc Cs ie
را ۱0
| ل ل ieee a)
000
et اا ا
privat
۲ Sd
0
صفحه 550:
®ovk pS
Soe) ا ا ا ECS
مشخصات يك كتاب را نكهدارى مى كنند:
chose Book
atc }
:@ovk(cha* a ="") tot i = ©, تمه O)
{} sae(a), (1), poce(r)
vod pricKDawe() { cout << ove; }
void priefld() ) ايلع >> نحم }
rout << pore; } ) ()جوه "ماسم لور
۳۳
دنه سوه موز
proce رل از
صفحه 551:
Cad تا
رام
Oe 0
0S Oma)
Peta One OE Gt eer an
Tad OR OC TE
تعدمم >> نحم On دم صر
(0 يا رج يا ره يب 008 2اميسد لين
00 ل Aa
ane Nel Nets ae eo nora
هه ریت۲
مان
RO و os
۱
صفحه 552:
وراثت روش ديكرى براى ايجاد كلاس جديد از
نيز مى ككويند.
ا ال
صفحه 553:
اعضای حفاظت شده:
۱0 ا Ju Jin p> we Aa ST
خصوصى كلاس والدش دسترسى داشته باشد., اما با استفاده از
توابع عضو عمومى كه از كلاس والد به ارث بردهء مى تواند به
Oe 1 0 ا hoe e ee Cy ol اعضاى خصوصى
كلاس فرزند را براورده نسازندء كلاس فرزند ناكار ا مد مى شود.
اوضاع زمانی وخیمتر میشود که هیچ تابع عمومی برای دسترسی
ا ۱
صفحه 554:
۱ cldlolST th jl wIS aj SI
حفاظت شدهٌ كلاس راارث مىبرند.
مثلا تمامی اشیای تابع دستيابى 00٠١١١ ازكلاس
رابه ارث مىبرند. به تابع ١١١١ يكدهعضوموروثى»
soul
باشیم
يعنى كلاس فرزندء. عضوى هم نام با عضو موروثى داشته باشد كه
مخصوص به خودش باشد و ارثی نباشد. برای مثال فرض كنيد
كلاس يك عضو عمومى به نام داشته باشد و كلاس زير
bb pS
صفحه 555:
در این حالت اشیای کلاس : عضو موروثی 7 را خواهند داشت.
حال اكر يكد عضو به همان نام 7 در زير كلاس ٠“ به شكل
eee) ors Be. ا ا ا RG
مقلوب میکند.
Te IR ele ek Se Rare ee aCe a ane ie
7 شى 801 ا عضو 7 غالب اشاره دارد نه به
0
ا 7
۱۲ به 7 موروثی دستیابی دارد.
صفحه 556:
هم مى توان اعضاى دادهاى موروثى را مغلوب كرد و
يعنى اكر كلاس داراى يك عضو تابعى عمومى به
نام ۴() باشد و در زیرکلاس نیز تابع ۴ را به
Ce eC OB Cord ل 7 TF
اشاره دارد 9 a (001d Ge me تابع موروتى اشاره دارد.
در برخی از مراجع به توابع غالب. . میگویند
۱
كتاب هر دو مفهوم را به عنوان اعضاى غالب به كار
مى بريم. به مثال زير نكاه كنيد.
صفحه 557:
اعضای دادهای و تابعی غالب :
[ تال
۱
ار
تا : ۷۲ عون
[ ارو
) f= Poetic"; }
صفحه 558:
سازندهها و نابودکنندههای والدة
0 :"ا>سحجمت سماصحفصط ()7::02" >> نحط ) 0
Fey
al
۲ ) مه >>
۷ ) وم >>
cee
publ |
BO On ea) eae eee
7 راک مت ۱ ۳ 0
oan
۳
۱
صفحه 559:
اشارهگرها در ورائت :
٠. ©
2 د ود"
در شى كرايى خاصيت جالبى وجود دارد و لن اين است كه اكر « اشارهكرى از نوع كلاس
Ine) ل ا ا ۱
کنید:
که
able
فلت
/
) خان وجواسطد ه IIS? ts عاطم : ث٠ سداد
able |
فلت
0
Od
Ih pte spotter to objets oP base chew X
ua
oP subckes VY ماه او سل موم ار
0
صفحه 560:
5 ۰ شه و Ss
اشارهگری از گلاس والد به شیئی از گلاس فرزند؛
در برنامه زیر کلاس زر کلاسی از است هر دوی این کلاسها
دارای یک عضو تابعی به نام هستند و 7 اشارهگری از نوع :
تعريف شده: نيدت
احج
Pee ean rn eee ca
3
ا
ble |
( 0 ريس
1
1
تخد
Dewi
94
>« <
) عجب ل عم مسا (::۷ لس || ترا
Re
X عرب دكا م «صوجهنا ()*:: لا وجحاهها |/ )8م
{
صفحه 561:
توابع مجازی و چندر یختی :
ا ل ا ا ل
مشخص مىشود. وقتى يى تابع به شكل مجازى
Pes Sg Cs SO CRC ee Pye pee) es
فرزند نيز تابعى با همين نام وجود دارد. توابع
مجازى امكان مىدهند كه هنكام استفاده از
اشارهكرهاء بتوانيم بدون در نظر كرفتن نوع
اشارهكرء به توابع شىء جارى دستيابى كنيم.
مثال زير Pees ss
صفحه 562:
استفاده از توابع مجازى:
ا عصان
pablo: — Orrtud Puarion }
وک ۱۳ سس
ae eG
Cea
0 | ا
صفحه 563:
چندریختی از طریق توابع مجازی ؛
سه کلاس زیر را در نظر بگیرید. بدون استفاده از توابعمجازی, برنامه آن طور
1
اف
۳ eer saree
ناریو ویو
< حجنو إي كوهيم
aces ot tea aa aca بخ"
' 1 ea ‘=
on oe
۳
صفحه 564:
آنابودکنندة مجازی
با توجه به تعريف توابع مجازى. به نظر مىرسد كه نمىتوان توايع
سازنده و نابودكننده رابه شكل مجازى تعريف نمود زيرا سازنددها
BCEY ل ا ا ا 00
CL Deo ا COS BY CES BeBe RSC IN ee
دیگری دارند.
مثال بعدی ایراد مهلکی را نشان میدهد که با مجازی کردن
نابود كر. برطرف مى شود.
صفحه 565:
لح
لي الي
-("ها.0)-" >> ففجم زم [] منطاط ) )0
رو
[7 NER eae
aS
Ohl ie hes dD od
pride
int
000
| ات اس یا
| لسع حم “لاز
از
i
1
1
صفحه 566:
کلاسهای پایة انتزاعی :
در شیگرایی رسم بر این است که ساختار برنامه و کلاسها را طوری طراحی کنند که بتوان.
آنها را به شکل یک نمودار درختی شبیه زیر نشان داد: