صفحه 1:
صفحه 2:
ad Cr+ @ اول : مقدمات زبان
فصل دوم : ساختار های تضمیم گیری و تکرا
9 فصل سوم : سایر ساختار های تکرا
فصل چهارم : اعداد تصادف
9 فصل پنجم : آرایه ها
8 فصل هفتم : ساختارها و اشاره گرها
© ن شتم : د نامه د a گرا
صفحه 3:
صفحه 4:
۴ عملگر
هاى جا محاسبا
اولويت عملكرها
olx533 (Comments)
توایع کتابخانه
Cre يرتامه در
صفحه 5:
اين زبان در اوائل دهه ۱۹۸۰ توسط بحاصخد 40-5 در آزمايشكاه بل
طراحى oad اين زبان عملاً توسعه يافته زبان برنامه نويسى 0) مى باشد كه
امکان نوشتن برنامههای ساخت يافته شی گرا را میدهد.
صفحه 6:
انون نامگذاری شناسهها
حروف کوچک و بزرگ در نامگذاری شناسهها متفاوت میباشند.
4
صفحه 7:
انون نامگذاری اسهها
۲) در نامگذاری شناسهها از حروف الفباء. ارقام و زیر خط ۱۳06۲560۲6
استفاده میشود و حداکثر طول شناسه ۳۱ میباشد و شناسه نبایستیبا
یک رقم شروع گردد .
صفحه 8:
۳ برای نامگذاری شناسهها از کلمات کلیدی نبایستی استفاده نمود. در زیر بعضی از کلمات
0
کلیدی داده شده است.
صفحه 9:
i
:
i
i
|
صفحه 10:
در اسلاید بعد به انواع داده ها اشاره می شود.
صفحه 11:
انواع داده ها
۷۷ تا -۱۳۲۷۶۸
۵ ۰
۷ 7 - ۱۲۱۳۷۴۸۳۶۳۸
۵ تا
یک کارکتر
۱۲۸-۷
ومج وت ویو
9 تا موه
صفحه 12:
قبل از آنکه در برنامه به متغیرها مقداری تخصیص داده
شود و از آنها استفاده گردد بایستی آنها را در برنامه اعلان
نمود .
صفحه 13:
چند مثال از اعلان متغیر ها :
“” _برای اعلان متغیراز نوع tint
tt x;
برای اعلان متفیرهای ۶ و 9 از نوع 1031 كه هر كدام جهار بايت از
Poa 7,
حافظه را اشغال میکنند :
براى اعلان متغير 06 از نوع كركتر که میتوان یکی از ۲۵۶ کرکتر را
به آن تخصیص داد و یک بایت را اشغال میکند"
chor went;
صفحه 14:
با استفاده از عملگر < میتوان به متغیرها مقدار اولیه تخصیص
در اسلاید بعد مثال هابی از let
صفحه 15:
” در دستورالعمل
نوع با مقدار اولیه ۲۶ اعلان نموده .
در دستورالعمل 0 , ۵000 مسا
متغيرهاى داو ف را از نوع« بط تعريف نموده با مقادير بترتيب
۰و دا
صفحه 16:
دادههای از نوع کرکتر
ای نمایش دادههای از ن ف اتر از
برای نمایش دادههای از نوع -عجاه در حافظه کامپیوتر از جدول
1 استفاده میشود. جدول اسکی به هر یک از ۲۵۶
کرکتر یک عدد منحصر بفرد بین ۰ تا ۲۵۵ تخصیص میدهد.
صفحه 17:
کامپیلر HO بعضی از کرکترهای مخصوص که در برنامه میتوان از
آنها برای فرمت بندی استفاده کرد را تشخیص میدهد. تعدادی از
این کرکترهای مخصوص به همراه کاربرد آنها در اسلاید بعد آورده
شده است .
صفحه 18:
کرکترهای مخصوص
بعنوان مثال از کرکتر [* میتوان برای ایجاد صدای سس
استفاده نمود.
joka x= Me
صفحه 19:
ها
رشته يا يمه عبارتست از دنبالهاى از كركترها كه بين قرار داده
مىشود. در حافظه كامبيوتر انتهاى رشتهها بوسيله ۰۱ ختم مى كردد.
در اسلا ید بعد به دو peared
صفحه 20:
صفحه 21:
صفحه 22:
برای نمایش دادها بر روی صفحه مانیتو از 4 که بدنیال آن عملگر
درج یعنی < < قید شده باشد استفاده میگردد. بایستی توجه داشت که
دوکرکتر < پشت سر هم توسط ۰62+ بصورت یک کرکتر تلقی میگردد.
صفحه 23:
مثال
% بیای نمایشن پیفام سس تسب بر زوی صفحه نمایش: ۰
زاس اسب >> مه
پرای نمایش مقدار متفیر < بر روی صفحه نمایش :
صفحه 24:
دریافت مقادیر متغیر
به منظور دریافت مقادیر یرای متفیرها در ضمن اجرای برنامه از صفحه کلید: از اس كه
بدنبال آن عملگر استخراج يعنى > > قيد شده باشد میتوان استفاده نمود.
صفحه 25:
int x;
cout << "Enter a
number:" ;
cin >> x;
صفحه 26:
عملگر انتساب > میباشد که باعث میگردد
مقدار عبارت در طرف راست اين عملكر ارزيابى
شده و در متغیر طرف چپ آن قرار گیرد.
صفحه 27:
صفحه 28:
عملگرهای محاسباتی
در 0++ پنج عملگر محاسباتی وجود دارد که عبار تند از :
%
این عملگرها دو تائى مى باشند زیر روی دو عملوند عمل مى نما يند. از طرف
ديكر عملكرهاى + و - رامى توان بعنوان عملكرهاى يكتائى نيز در نظر كرفت.
صفحه 29:
در حالتی که هر دو عملوند عملگرهای ۰ ۰۶۰۱ +۰ - از نوع صحیح باشد نتیجه
عمل از نوع صحیح میباشد.
عبارت
صفحه 30:
در صورتیکه حداقل یکی از عملوندهای عملگرهای /۰ ۰-۰۶ + از نوع اعشاری باشد
نتیجه عمل از نوع اعشاری میباشد.
عبارت
Yeo
9*0
8.0/8
8.00
8.0/8.0
صفحه 31:
در 6++. افزایش یک واحد به مقدار یک
Gree ose و و
مشابه کاهش یک واحد از مقدار یک
متغیر از نوع صحیح را کاهش مینامند..
صفحه 32:
صفحه 33:
صفحه 34:
از عملگرهای ++ و -- میتوان بدو صورت پیشوندی و پسوندی استفاده نمود.
در دستورالعملهای پیچیده عملگر پیشوندی قبل از انتساب ارزیابی میشود و عملگر
پسوندی بعد از انتساب ارزیابی میشود.
صفحه 35:
پس از اجرای دستورالعملهای فوق :
پس از اجرای دستورالعملهای فوق :
صفحه 36:
عملگر داد
0 ازعملگرهایکتلئیمیب اشدو مشخصک ننده تسعداد بسلیت
هلئیلسنکه بکتوع دادم اشفا [م )ند
مثال :
مقدار ۲ نمایش داده مى شود
مقدار ۴ نمایش داده می شود.
صفحه 37:
های جا محاسبا
برای سادهتر نوشتن عبارتها در ۰+46 میتوان از
عملگرهای جایگزینی محاسباتی استفاده نمود.
صفحه 38:
اولویت عملگر
رزیابی مقدار یک عبارت ریاضی براساس جدول اولویت عملگرهاانجام میگردد. در ذیل جدول اولویت
عملگرها براساس بترتیب از بیشترین اولویت به کمترین اولویت داده شده است.
پرانتزها
عملگرهای یکتابی
عملگرهای ضرب و تقسیم و باقیمانده
عملگرهای جمع و تفریق
عملگرهای درج و استخراج
عملگرهای جایگزینی و انتساب
O
جد sizeof
صفحه 39:
(618) .هب ye
با توجه به جدول اولویت عملگرها داریم که
(ه*هبی* ج
(6+۵)*
06
06
66
صفحه 40:
06ح رمعم ,معط , حدم
بج راط * ججمدل
>> بعكم >> ل >> بجو
صفحه 41:
توضیحات در برنامه باعث خوانلئی بیشتر و درک بهتر برنامه میشود. بنابرلین
توصیه بر آن است که حتی الامکان در برنامهها از توضیحات استفاده نمائیم. در
0++. توضیحات بدو صورت انجام میگیرد که در اسلایدهای بعدبه آن اشاره
اشده |
صفحه 42:
ضیحات
الف: این نوع توضیح بوسیله // انجام میشود. که کامپیوتر هر چیزی را
كه بعد از // قرار داده شود تا انتهای آن خط اغماض مینماید.
متال
ood b وخ معد ط اعمج عد -الزطجمدم
ب:توضيح نوع دوم با /: شروع شده و به #/ ختم مى شود و هر جيزى
كه بين* / و / قرار كيرد اغماض مینماید
صفحه 43:
زبان 6++ مجهز به تعدادی توابع کتابخانه میباشد. بعنوان مثال
galas توابع کتابخانه برای عملیات ورودی و خروجی وجود دارند.
معمولا توابع کتابخانه مشابه . بصورت برنامههای هدف (برنامه
ترجمه شده بزبان ماشین) در قالب فایلهای کتابخانه دسته بندی و
مورد استفاده قرا رمیگيرند. این فایلها را فایلهای سطحح مینامند و
دارای پسوند .۰ میباشند.
صفحه 44:
نحوه استفاده از توابع کتابخانه اء
برای استفاده از توابع کتابخانه خاصی بایستی
نام فایل سطعح آنرا در ابتدای برنامه در دستور
#طعخم قرار دهیم.
صفحه 45:
عا ۱
تعداد کرکترهای رشته 5
تانژانت 0
یی ترا
تبدیل به حروف کوچک
تبدیل به حرف بزرگ
(e
tot
dovble
double
double
double
dpuble
dpuble
tot
double
لت
tou(d)
leaded)
vin Gd)
vari(d)
virlea(e)
tau(d)
لاطا
toupeerle )
صفحه 46:
برنامه در ۵)++
اکنون باتوجه به مطالب گفته شده قادر خواهیم بود كه تعدادی برنامه ساده و کوچک به زبان 0+
+ بنویسیم. رای نوشتن برنامهبایستی دستورالعمله را در تابع مهعی() قرار دهیم و براى اينكار
میتوان به یکی از دو طریقی که در اسلایدهای بعد آمده است . عمل نمود.
©
صفحه 47:
صفحه 48:
صفحه 49:
برنامه ای که پیغام عچعجمم| صفحدج ساماد دج te ++) را روی صفحه مانیتور نمایش
ss
می دهد.
حلمم طعادة
stot)
1
: "ما عوسيهما احفصت امصزجات مو وا 0+4" >> اوم
: 0 مسج
1
صفحه 50:
صفحه 51:
.دو عدد از نوع اعشارى را گرفته مجموع و حاصلضیب آنها را محاسبه و نما یش میدهد
ss
pas
بر << بر << وم
لمحم
بكم
زج >> > و >> فص
© مجر
}
صفحه 52:
فصل دوم
ساختارهای تصمیم گیری و تکرار
صفحه 53:
صفحه 54:
های رابطه 1
از اين عملگرها برای تعیین اينكه آيا دو عدد با
هم معادلند يا يكى از ديكرى بزركتر يا كوجكتر
مىباشد استفاده مى كردد. عملكرهاى رابطهاى
عبارتند از
صفحه 55:
عملكر شرطى
شکل کلی عملگر شرطی بصورت زیر میباشد:
عملگر شرطی تنها عملگری در 60++ میباشد که دارای سه عملوند میباشد.
صفحه 56:
90ص ۱
زمر : ع7 (بجمحم
اين دو دستور العمل باعث میشوند که ماکزیمم مقادیر مرو « در ط قرار بگیرد.
3? =00 ? pou << "passed" | pout << "Puled” ;
اكر مقدار >< بزركتر يا مساوى ده باشد رشتة لحم در غير اينصورت
رشته لت" نمايش داده ميشود.
صفحه 57:
۳
دستورالعمل شرطی .۰ IB)
که
توسط این دستور شرطی را تست نموده و بسته
به آنكه شرط درست يا غلط باشد عكس العمل
خاصى را نشان دهيم.
(عبیت )1
م مستورا سل
مستورل نملقة 5
else
{
دستورا اعمل1
ار مستورا اهمل13
صفحه 58:
صفحه 59:
<poreaoh> از
جک اس
poet)
سا
:د << وم
> 0(
at <<" xe ceive” << pod |
be
{
| نو دم
صفحه 60:
عملگر کاما
تعدادی عبارت را میتوان با کاما بهم متصل نمود و
تشکیل یک عبارت پیچیدهتری را داد. اين عبارتها به
از چپ به راست ارزیابی شده و مقدار عبارت
ترت
معادل عبارتج میباشد. 4
عبارت ۳ , عبارت ۲ , عبارت ۱)
صفحه 61:
اگر داشته باشیم ۵عو, عط , ۰26: عبارت زیر را در نظر بگیرید:
مقدار عبارت برابر است با 0+6 که معادل ۱۰ میباشد.
صفحه 62:
عملگرهای منطقی
با استفاده از عملگرهای منطقی میتوان شرطهای ترکیبی در برنامه ایجاد نمود.
عملگرهای منطقی عبارتست از :
00
OR
00
که در 6۵++ به ترتیب بصورت زير نشان داده میشود.
&&
!
صفحه 63:
صفحه 64:
if (x= = 5) ily != 0))
cout << x << endl;
صفحه 65:
ى كرفته مشخص مىنمايد
iostream.h > <_— مب
int main()
{
float a, b, c;
cout << “Enter three real numbers" << endl ;
cin >>a>>b>>¢; //
if((a <b + c) &&(b < atc) &&(c < atb))
cout << “It is a triangle" ;
else
cout << “Not a triangle" ;
return 0;
صفحه 66:
دستورالعمل و
از دستور العمل ۲ برای تکرار دستورالعملها استفاده میشود. شکل کلی دستور
عو بصورت زیر میباشد:
(عبارت ۳ عبارت ژ ۲ عبارت ) 80۳
صفحه 67:
ot << "Bolero postive kiewer canober";
ره << وو
Por( 4; =u; +4) Poot
pout << Past << pod
rewaO ;
1
صفحه 68:
ابوتاعة در مرت
اد صحیح و متوالی بین ۱ تاه را محاسبه نموده و نمایش میدهد.
> سا
wot) بر
{
tts, FC;
bry = O ;
om >> a;
احج ع Por(; <0; H+)
>> فص
صفحه 69:
2327110
Hoke <petreur-h>
‘et wata( )
{
tt FO;
Por{ 3 1<=9 ; ) pot << ptt << eek
retura O 5
}
صفحه 70:
د میشوند را نمایش میدهد.
جامسه طحة
peas )
تزا سا
Por(i=d; <=O; +4)
Por(d; =O; +4)
Por{k=; k<=O; ++h)
{
+۳00 + ۳400و
زم << wo <<a
}
retura O ;
1
صفحه 71:
فصل سوم
ساير ساختارهای تکرار
صفحه 72:
فهرست مطالب فصل سوم
۵ دستورالعما
۶ 010 دستورالعه
6216© دستورالعمل
00۶ دستورالعما
Switch دستورالعما
aw cingeto
Silos Static_cast<>0
جدول اولویت عملگرها
صفحه 73:
از اين دستور العمل مانند دستورالعمل « برای تکرار یک دستورالعمل ساده یا ترکیبی
استفاده میگردد. شکل کلی این دستور العمل بصورت زیر میباشد.
صفحه 74:
دستورالعمل 701 زمانی استفاده
ميشود كه تعداد دفعات تکرار از قبل
مشخص و معین باشد. در صورتیکه
تعداد دفعات تکرار مشخص نباشد
بایستی از دستورالعمل 1010316
استفاده نمود.
صفحه 75:
tet x=O
while(x<S)
زج کج << Tal
با اجرای قطعه برنامه فوق مقادیر زیر نمایش داده
fe
:میشود
صفحه 76:
ma
it cout = O , g;
Poot x, pu =O, wy;
/*» تعناد مقامير ورومى */ زه << ويم
whde(ooved <0)
<< وم
wn tex}
++ vow | }
wy = suo! >:
vot << wy << ead;
return D ; }
صفحه 77:
دستورالعمل طانب طلء
اين دستور العمل نيز براى تکرار یک دستورالعمل ساده
پا ترکیبی استفاده میشود. شکل کلی این دستورالعمل
بصورت زیر میباشد.
do
1
ز دستورالععل ۱
5 دستورالععل ۲
+ مستور ا همل
while( b>); }
صفحه 78:
در دستورالعمل 1811816 ابتدا مقدار
شرط ارزیابی شده اما در دستورالعمل
10 10 ابتدا دستورالعمل اجرا
شده سپس مقدار شرط ارزیایی میگردد.
بتابراین دستورالسمل 712116 do
حداقل يك بار انجام ميشود .
صفحه 79:
include <iostream.
int main()
int count = 0;
do
cout << count ++<<endl ;
while(count <= 9);
return 0 ; }
صفحه 80:
brody دستورالعمل
این دستورالعمل باعث توقف دستورالعملهای تکرار( لابب ط, Por, while شده و
کنترل به خارج از این دستورالعملها منتقل مینماید.
Break
صفحه 81:
صفحه 82:
حاسم ات
)سم
1
tet cont 2 0 :
٩( )انب
{
owt H+;
( 40 < سس
bredk ;
}
>> یی >> ۳ : یی >> لور
rena ;
صفحه 83:
حا مه طعادة
peel)
tot ood
Pout x, صمح = O;
<< ود
Por(vount = ; x < (DOO . O; ++ vow)
سید
> 0.0( )
mat << "@rrov — Orquive uch " <<eud;
beds;
1
paw t= x; }
Dnt << mao << ۳ :[
اف
E> ه
صفحه 84:
بوحدية
(0.0 > مج
1
:قحم >> "ص0 معيو 0 - س3" >> تجو
ا
}
wo t= x}
(OO.0); > )سلب (
:لد >> صمح >> قحو
rena Dj}
©
صفحه 85:
دستورالعمل عحفیرر
از دستورالعمل صحفسه میتوان در دستورالعملهای تکرار له
Por . طذرید. لب استفاده نمود. اين دستورالعمل باعث
میشود که کنترل بابتدای دستورالعملهای تکرار منتقل گردد.
Continue
صفحه 86:
pao +x;
مس( > 0000.0 (:
Po << mr; ۱
مم
صفحه 87:
صفحه 88:
دستور العمل >اطاسدد
همانطور كه مى دائيد از دستورالعمل شرطى (ححاء * مى توان بصورت تودرقو
استفاده نمود ولى از طرفى اكر عمق استفادة تو در تو از اين دستورالعمل زياد
گردد. درک آنها مشکل ميشود . براى حل اين مشكل 0++ . دستورالعمل
امد كه عملا يى دستور العمل جند انتخابى مى باشد را ارائه نموده است.
switch
6
صفحه 89:
صفحه 90:
ver 4:
val << "owe" << wud;
سا
pel << "bun" << od;
bred
:قمع
vou << "Pad" << ead;
| * ايد ناه لجس */
صفحه 91:
Dt << "Levy Thos Mowe” << red;
brook;
ver:
at << "qd Te Tose" << ed ;
bred
Pad:
Bent << "Brecter Noa Three” << rand;
}
صفحه 92:
55200000 ee
کلید میگیرد. برای استفاده از این
تابع در ابندای برنامه بایستی داشته
pa
Ete tity
حطصدمطاوموت>
صفحه 93:
صفحه 94:
خاممیی.. وه
)سم
د
(ه6 0ه -! ( )سمه - hde((x
>> قحم
: 0 سم
1
صفحه 95:
:)اس
0
:©
۳ >> ۵00" >> فصو
:ی
ape
8:
pou << “BLOG” << end;
bred ;
oo
| ee;
صفحه 96:
برنامة ذیل یک سطر متن انگلیسی را گرفته کرکترها
chor wen;
he (cont = )سم ) ) BOP)
Pont I=" ")
oot <<cend}
سم 0 :
}
صفحه 97:
52171711007
استفاده مى شود. اين عملكر يك عملكر يكتائى مى باشد.
صفحه 98:
صفحه 99:
صفحه 100:
صفحه 101:
صفحه 102:
تولید اعداد تصادفر
( ]0606 ۲۷) تعریف نوع داده
داده های از نوع شمارشی
فرمت های مختلفه مقادیر خروج
صفحه 103:
اعداد تصادفی
مقادیر تصادفی با شانسی در اکثر برنامههای کاربردی در زمینه شبیه سازی و بازد
تری نقش مهمی را ایفا مینمایند. برای ایجاد یک عدد تصادفی صحیح ب
بایستی از تابع له( ) استفاده نمائیم.
rand| )
صفحه 104:
( )و بر
{
)4+ ;00=< :20 و۳
ما << ) vat << romd(
© بر
}
صفحه 105:
اگر برنامة فوق را چندبار اجرا نمائيم جواب يكسانى را از کامپیوتریمی گیریم.
برای تصادفی کردن اعداد میبایستی از تابع 6۲۵190( ) استفاده نمائیم.
این تابع به یک آرگومان صحیح از نوع 20510001 نیاز دارد.
به این آرگومان 5600 گفته میشود.
در اسلايد بعد برنامه قبلى رابا تابع 818194() نوشته ايم.
صفحه 106:
0ه >>( ]اج >> نج
rows |
}
صفحه 107:
صفحه 108:
السب
)++ ;00=< ;0 بو(
:لحم >> ©. ©6626 / ( الحم << vot
© مور
}
صفحه 109:
تعریف نوع داده (علسس)
از #طحبومیتوان برای تعریسف نوع دادههای جدیسد کسه معادل نوع
دادههای موجود باشد استفاده تمود. شکل کلی عبارتست از :
نشاندهنده نوع داده موجود
صفحه 110:
حال میتوان مرو درا بصورت زیر تعریف نمود :
صفحه 111:
دادههای از نوع شسمارشي
بمنظور معرفی دادههای از نوع شمارشی از کلمه صعجح استفاده میگردد.
02 ی کننوع دادم ش مشیم اشد
صفحه 112:
Bann sie {oarted, devorved, vbw, side};
oie Sj
]طح عو
wore, Ke, wed, ter, Pri}; يديج رادج ونوك وجو
ae
9 00
= <ه
صفحه 113:
بایستی در نظر داشت که دادههای از
نوع شمارشی در عملیات ورودی و
خروجی شرکت نمیتمایند. بعبارتٍ
دیگر مقادیر دادههای از نوع شمارشی
بایستی در برنامه تعیین نمود.
دستورالعلهای ورودی و خروجی مانند
y cin 60۷01 در مورد دادههای
شمارشی نمیتوان استفاده نمود.
صفحه 114:
مقدار ۶ بطور غير علمی با نقطه اعشار ثابت نمایش
داده می شود.
include <iomanip.h>
x=10S0 ; طح
Dat << peter (or |: Pood | te! : showpont ) << wrte(SO) <<
veprevtsir(®) << x << rad ; مر
مقدار »با طول میدان ۲۳ نمايش داده می شود.
ار »با طول میدان ۲۳ نمایش داده می شود مقدار با دو رقم اعشار نمایش داده می شود.
بتابراین مقدار بصورت زیر نمایش داده می شود :
شانزده ستون خالی 1090.00
صفحه 115:
صفحه 116:
gow Sali 1
7 آرایه دو بعدی ( ماتریس ها)
صفحه 117:
آرایه یک بعدء
آرایه یک فضای پیوسته از حافظه اصلی کامپیوتر میباشد که میتواند
,چندین مقدا را در خود جای دهد
کلیه عناصر یک آرایه از یک نوع میباشند.
عناصر آرایه بوسیله اندیس آنها مشخص میشوند.
در ++ . انديس آراية از صفر شروع میشود.
صفحه 118:
صفحه 119:
آرایه یک بعدی از نوع Int
صفحه 120:
تخصیص مقادیر اولیه به عناصر آرایه :
14 OKs (@, ©, 8, 07, 00);
صفحه 121:
دریافت مقادیر عناصر آرایه :
:[6] م
Parlier OD; =P; +H)
veo >> [1] 5
Parle FD; <=G; +H) cow << aft];
صفحه 122:
گر تعداد مقادیر او
tt x9] = (00, 9, 7};
صفحه 123:
صفحه 124:
,6.6 ,0.6 ,000 ,6.6 ,6.6 سا سرا
;}48.8
9
9
صفحه 125:
۱
0
0
بت
: 00 = سوه 4 بسن
Pout xf arate], tt = 0.0 ;
(+۲ سیک :۳۵ ماو
par >> xf i]
Por(FO; erretan; i++)
Det << setesPe(oet'Pimed toy 2: showpond ) << sets{ 18) << seprevetra(®) << xf 1] <<
ead;
(۳ تسیک
صفحه 126:
ایک اس
tet ete )
Poa x20], =
م
)سام
Por{ FO; SOO 5 +41) ora >> af 1];
:201«
(++ تسس متا
Ped] <>) 2 =f];
eed >> ع >> فح
صفحه 127:
() مس بر
{
Pet x{(O], تس
۳
:ل )حسام
For(=O; <dDO; +4) ors >> x{t J;
Por(=O; <9; H+)
Por(Fr#d ; <0; H+)
>
:2 مس
۱121
aft] 2 زج
}
Por(FO; <=0; r++)
pot << xf] << ead
سم 0 :
صفحه 128:
آرایههای دوبعدی (ماتریسها)
ماتریسها بوسیله آرایههای دوبعدی در کامپیوترنمایش داده ميشوند.
int a[3][4];
٠ ستون ۲ ستون ۲ ستون ۱ ستون
OO] AON ات OS]
AMO] aia sate] ات
ACO] ال Cle] eS]
صفحه 129:
تخصیص مقادیر اولیه به عناصر آرایه :
;})0,00,00,00( ,}0,7,0,©( وت تا
صفحه 130:
OIF] { {@, {0,9}, {F,9,9}}; م
صفحه 131:
AOIP]= )0, ©, ©, ©,.6 (: م
صفحه 132:
ps lp ts حبقت رای یک اندیسی ات در
مان las a ae dau سوه اس
rt of JIPRGC,9,6,9};
صفحه 133:
۱ eye tee Sed e per ere es
حاممصووم> ی رن ]
ایک ی
total)
f
Poa xfO][P], wrt= 0.0;
۳ «۹
> مشج صفحدج ||
Por(=O; <9; +H)
Por (FO; <9; r++)
:۱ << وم
اه اه بمج صما صخلت ||
(++ ب©> بوعيجم
<P; ++) وحيجم
«+ 2۱:
wnt << “pid = "<< thd << ead
صفحه 134:
صفحه 135:
نوابع درون خط
انتقال بارامترها | ارجا
wis (Storage classes ) های حافظه
سرياركذلرى توابع
صفحه 136:
استفاده از توابع در برنامهها به برنامهنویس این امکان را میدهد که
بتواند برنامههای خود را به صورت قطعه قطعه برنامه بنویسد. تا کنون
کلیه برنامههائی که نوشتهایم فقط از تابع هسب( ) استفاده نمودهايم.
صفحه 137:
58 5 5 5 مقدار برگشتر
شكل كلى توابع بصورت زیر میباشند : 0
لیست پارامتر ها جهت انتقال اطلاعات از تابع احضار کننده به تابع فراخوانده شده
return-value-type function-name (paérameter-
list)
1
declaration and statements
تعریف اعلانهای تابع و دستورالعملهای اجرائی
صفحه 138:
پارامتری از نوع 2ق
7
pte
phar bw_b_wy (oho ofl)
{
vker vO;
:لك :( م ۵۵( 0 و (APE = هم
rena (c®) :
}
صفحه 139:
© سما
HA” © )7( د" س> اطق “4 * دج )سوم
vets 0;
}
con
hor x
x= once)
pn <b s(n) ١
ممعم ©:
}
صفحه 140:
(۸ مس بر
{
2م
(0 >=)? V5
سم
}
صفحه 141:
x , ty) موی بر
ne
acer py)? xiv;
aes
}
)ميم
1
tab;
زا <ده << مم
:(طه) حصب >> نهر
سم
b ,3 آرگومانهایتلبع مس
صفحه 142:
صفحه 143:
صفحه 144:
. تبع دیگر احضار میگردد
بایستی تعریف تابع احضار شونده قبل از تعریف
ab. احضار کننده در برنامه ظاهر گردد
صفحه 145:
385
اگر بخواهيم در برنامهها ابتدا تابع 080
ظاهر گردد بایستی ۳0101106 تلبع بعنی
پیش نمونة تلبع که شامل نام تلبع. نوع مقدار
برگشتی تابع. تعداد بارامترهائي را كه تابع
ار دريافت آنرا دارد و انواع بارامترها و
ترتیب قرارگرفتن این پارامترها را به اطلاع
ils
در اسلاید بعد مقالی در این زمینه آورده شده است.
صفحه 146:
ایک یا
0
0
) تفت
ito;
pal << "@uler u postive لت >> مس
به << وم
صفحه 147:
7 BS
QS
&
در صورتی که تابع مقداری بر نگرداند نوع
مقدار برگشتی تلبع را ۷۵34 اعلان میکنيم. و
در صورتیکه تلبع مقداری را درلفت نکند بجای
list مامهمتهواز Otvoid
استفاده میگردد.
در اسلاید بعد مقالی در این زمینه آورده شده است.
صفحه 148:
تابع مقداری بر نمی گرداند.
pot << "wax uch lu" << 2<< ead;
مور
صفحه 149:
صفحه 150:
در اين نوع احضار تابع حافظههای مورد
استفاده آرگومانها و پارامترها
از هم متمایزند و هرگونه تغییر در پارامترها
باعستث تفي
اك
در آرگومنهای متناظر نم ىكردد.
صفحه 151:
۵ رکه
QS
هر زمان که نوع مقدار برگشتی تابع int
میباشد نیازی به ذکر ن نیست و همچنین
صفحه 152:
توابع بازگشتی یا 1661115116 توابعی هستند که
وقتی احضار شوند باعث میشوند که خود را احضار نمایند.
صفحه 153:
نحوه محاسبه فاکتوریل از طریق تابع بازگشتم
۰ .۳6۳ عم
اه(
5 0و {
درغي رليسويه میج ۲0
ج)* زهم"* ... *و*ق *0 دام
0
«* ا(مج)دام
در اسلايد بعد تابع بازكشتى مورد نظر پیاده سازى شده است.
5
جه ه
صفحه 154:
berg tot )ل حص
tnt cata )
{
عم
جم ” >> نوم >
وم <<
ant << ead <<” Pastore =" << (a) << pod;
retura O 5
}
pay tot Pastoritdi{int a)
P(e<=0)
rena);
: ( (0> سه" )مم
صفحه 155:
: منیب فسيبناكى ... ,900 , 60 ,09 ,© ,© ,© ,© ,4,0 , ۵
م
fled “Plfa)=
we
رهد )ص رجام
در اسلايد بعد تابع بازكشتى مورد نظر پیاده سازى شده است.
صفحه 156:
bry tat Peery fe); // Porwrard dockets
oo
frag tat rj
زم
uch ” << ood; ما میج >> فجن
<د وم
كا
لحم >> >> يوم
: 0 عم
}
(۰ ۱۵ و۳۲ ها بسا
Moz =a] 0(
rete 7;
cbr
renre( Pr) + Pole) );
صفحه 157:
seo rove]! Porvoo
وعدم
)سدم
: 0 مس
}
vord reverse(vord)
|| لمیر a hoe oP chorwters vad reverse t
{
زو وان
زاس( ۰( ای )۸
زج >> قود
صفحه 158:
استفاده از آرایهها بعنوان پارامتر تبع مجاز است.
در اسلايد بعد به يك مثال توجه نمایید.
صفحه 159:
1
2
3
4
5
تب هر تن © لق
ماو Porward |/ :( [ ] میلست فد
haa
rt ofS] :
Por(tat RD; <P; +4)
vou << of] << ead;
ممعم © :
1
لاس wood y(t of [( ۱ مسا ی(
{
۳) =O; <9; +4)
i<0; +4)
Por(FO;
vo << of j] << ed;
ممم
صفحه 160:
در صورتيكه آرايه بیش از یک بعد داشته باشد
بعددهاق دومبه يعدا بايسدى دز تعويف تلبع و بيقن
نمونه تابع ذکر گودد.
در اسلايد بعد به يك مثال توجه نمایید.
صفحه 161:
k> رن
:(1 119 ] بیج لس
=
rt of [O19] = ( {8,9}, (9,9);
wo F 0,0,9,6,9},
SISF (.9,9,¢,9);
279 [JSF (0,0), (} };
مسج
}
alias 1©[(
نا 0: 0; H+)
{
Por{tt =D; 1605 H+)
won << oft i] <<"
لجس >> يحم
eee000
صفحه 162:
کلمه 1101186 بدین معنی است که به کامپیلر دستور میدهد که
يك کپی از دستورالعلمهای تابع در همان جا (در زمان مقتضی)
تولید نماید تا از احضار تابع ممانعت بعمل آورد.
صفحه 163:
بجای داشتن تنها یک کپی از تابع . چند کپی از دستورالعملهای تابع در
برنامه اضافه میشود که باعث بزرگ شدن اندازه با طول برنامه میشود.
بنابراین از 11011196 برای توابع کوچک استفاده میگردد.
صفحه 164:
مثالی از توابع درون خ
fickle <petreawh>
tober Poot abe(coust Mot») {rete o*s*s; }
)سدم
1
طحم سا
pia >> wider |
mint << ode << rabe(okle) << ead ;
retra O 5
}
©
صفحه 165:
تاکنون وقتی تیعی را احضار مى كرديم يك كبى از مقادير آركومانها دربارامترهاى متناظر
قرار میگرفت . این روش احضار بوسیله مقدار با ۷۵106 11 0811 نامیده شد.
در انتقال بارامترها از طریق ارجاع در حقیقت حافظه مربوط به آركومانها و يارامترهاى متناظر
بصورت اشتراکی مورد استفاده قرار میگیرد. این روش ۳۵2۵۶666 بوط هه
Spat
صفحه 166:
در ال روش پارامترهائی که از طریق ۲010169006 توظ 6۵11 عمل مینمایند در
نمونه تابع قبل از نام چنین پارامترهائی از 6 استفاده میشود.واضح است
که دار تعریف تابع نیز بهمین طریق عمل میشود.
صفحه 167:
اه طلسم
et VP rte); HI Bor
vod rPirees (tot 6( :
pos)
و
اج >> ب BM SS x SC werd <6 cf) Cel SS
صفحه 168:
وقتی پارامتری بصورت لاط call
0706 اعلان میگردد اين بدان معنى
است كميا تغيير مقدار لين يارامتر در تلبع احضار
شده مقدار آركومان متناظر نيز تغيير مى نمايد.
صفحه 169:
Det <<a << pad <b;
Powap( a,b);
زط >> اقحس >> ه >> فجن
: © مور
صفحه 170:
کلاسهای حافظه (عصصاه صوصص)
متفیرها بدو طریق متمایز مشخص میشوند یکی بوسیله نوع (عجبه) نها و دیگری بوسیله
کلاس حافظه آنها. نوع متغیر قبلا اشاره شده بعنوان مثال عاطحط.. ۰۳۳۵ ۰.۰۰۱۷ ولی کلاس
خافظة يك متغير در مورد طول عمر و وسعت و دامن متغیر بحث مینماید.
در اسلاید بعد به انواع کلاس حاقظه می پردازیم.
صفحه 171:
automatic
static
external
register
صفحه 172:
automatic
متغیرهای تفه در درون یک تابع تعریف میشوند و در تابعی که اعلان
میشود بصورت متغیرهای محلی برای آن تابع میباشند. حافظه تخصیص داده
uy MM lb patie ay od از اتمام اجرای تابع از بين می رود بعبارت _
ديكر وسعت و دامنة متغيرهاى از نوع 7ه تابعى مى باشد که متغیر در آن
اعلان گردیده است.
صفحه 173:
static
متغیرهای عفد« نیز در درون توابع تعریف میشوند و از نظر وسعت و دامنه شبیه
متغیرهای ع#حفه هستند ولی در خاتمة اجرای تابع. حافظه وابسته به این نوع
متغیره از بین نمیرود بلکه برای فراخوانی بعدی تابع باقی میماند.
در اسلاید بعد به یک مثال از کاربرد این نوع کلاس حافظه می پردازیم.
صفحه 174:
و
امه اسلا مه تفلطلی با موی |[
foro tt Pitt) §
)سم
1
كم
اك
حدم
pow << rod
( + زک ز0 م۳
rod; << ۳ >> > >> >> قحم
:0 جر
+
comet) م۳۲ بسا
ma 2 4, 620: بسا عبر
عدا
© +20:0 (6©> سداد
صفحه 175:
external
متغیرهای از نوع جع متغیرهلئی هستند که در بیرون از تولبع اعلان میشوند
و وسعت و دامنه فعالیت آنها کلیه توابعی میباشد که در زیر دستور اعلان متفیر
قرار دارد.
در اسلاید بعد به یک مثال از كاربرد اين نوع كلاس حافظه می پردازیم.
صفحه 176:
یه طیاب#
۱
Pucntalfet 2, tot)
{
اس >> قحم
wexty;
Dent << wud << ws << echt;
بل مج
}
est)
Dat << pad <p << ead >> سس >> قحس >> ل
rewraO ;
}
صفحه 177:
register
وقتی متغیری از نوع ضيح اعلان میشود از کامپیوتر عملا درخواست
میشود که به جای حافظه از یکی از رجیسترهای موجود استفاده نماید.
صفحه 178:
صفحه 179:
سریارگذاری توابع (عفعطصه سح
در 6++ این امکان وجود دارد که دریک برنامه بتوانیم از چند توابع هم نام
استفاده نمائیم مشروط بر این که پارامترهای این توابع متفاوت باشند. (از
نظر تعداد پارامتر و یا نوع پارامترها و ترتیب آنها)
صفحه 180:
0
عه سام : i);
et iP (t,t);
اس
: لحم روح م
: م 6ل سم
pat << ukF(a, b) << ead;
pot << ak Pd, b) << rod;
rena ;
}
kt ok (ct, ty)
{
rota ty |
}
Pou uxkF (Pou x, mtv)
{
صفحه 181:
ساختار ها و اشاره گرها
صفحه 182:
ها Union
( 20166 ) اشاره كرها
تعريف آرايه
آرایه هاى دو بعدى و اشاره كرها
new ) حافظه بصورت يويا (
شته ها و توایع مربوطه
صفحه 183:
ساختارها
ساختارها شبیه آرایهها بوده بدین صورت که یک نوع داده گروهی است که فضای
پیوسته از حافظه اصلی را اشغال مینماید. اما عناصر ساختار الزاماً از یک نوع
نمیباشند بلکه اعضای بیک ساختار میتوانند از نوعهای مختلفه از قبیل ۰ phew
لط. ۳ . ... باشند.
صفحه 184:
نام ساختار
struct time
{
int hour ; // 0 - 23 0
int minute ; // 0 -
اعضا ساختار
59
int second; //
13
5
صفحه 185:
ساختار 30001001 دارای چهار عضو میباشد.
CoA شطيه حسابيز نوع 6ط
0 Toy
0000# name
ser yeep Meee Cnt
صفحه 186:
به دو صورت می توان اعلان یک متفیر از نوع ساختار را نمایش داد:
روش اول
:روش دوم
صفحه 187:
به ساختارها میتوان مقدار اولیه نیز تخصیص داد
wood mst = (PESO, ‘Duder Dudert” , PESC.S};
صفحه 188:
صفحه 189:
عج_س. بصه
vast woe = “Duder Daderi”
rast. base 2 0
صفحه 190:
: نکته
عضو یک ساختار خود میتواند یک ساختار دیگر باشد.
struct date {
int month;
int day;
int year;
1
struct account {
int acc_no ;
char acc_typer;
char name[80];
float balance ;
date lastpay ; };
اگرداشته باشیم
account x, y;
آنگاه عضو 1351۳۵57 بوسیله
x.lastpay.day
x.lastpay.month
x.lastpay.year
صفحه 191:
: نکته
میتوان آرایای تعریف نمود که هر عضو آن یک ساختار باشد و حتی بهآنها مقادیر اولیه تخصیص نمود.
مسحت اماع
char rae PO];
rt pad;
tp; } 5
ereloredl JF {"askr”, GOO , ۵000,
,"و" FOOO, OOO,
مهو" , 9۳00, 000,
“pares”, POOD , OOOO, };
صفحه 192:
Plot bi dos vy a
vowplex anobers” << wad; © جح" >> نو
j اههد << وت
vot << ead
pir >> pia >> yb;
+ ود
abe xbt pb;
ont << pad >> ورد >> ۲ “<<zb;
© مور
1
+16 12-7 بطوييكه
ماج دود
Hy (ate) 164d)
صفحه 193:
ee ee ol فلوتكه
عضوهللیکه ت-شکیل010 11193 میدهد همگواز حافظه مشترکیدر
rrr taco eee apr ane eee Ee
صرفهجینیدر حافظه مسر
صفحه 194:
هر کدام از متغیرهای »رو لا بیک رشته
۱۰ کرکتری با یک مقدار از نوع int
میباشدد وکامهیهترییک بلوک حاقنه که
بتواند رشته ۱۰ کرکتری رادر خود جای
دهد .برای00102 و 5326 در نظر
میگیرد.
صفحه 195:
صفحه 196:
اشارهگرها (عصده۳))
دادههانی خه در حامپیوتر در حافظنه اصلی ذغیره
بایتهای متوالی از حافظه بسته به نوع 0212 اشغال مى كثند.
0
۸ ۲۱۳۷۳۸۳۶۲۸
یک کارکتر
وهیجو تا وهیعم4
0 تا 66۵09
صفحه 197:
اشارهگرها (عصده۳))
با داشتن آدرس داده در حافظة اصلی میتوان براحتی به آن داده
دسترسی پیدا نمود و از طرف دیگر آدرس هر داده در حافظه آدرس
بایت شروع آن داده میباشد.
int x = 61.
صفحه 198:
نکته
در کامپیوتر آدرسها معمولاً دو بایت اشغال مینمایند. اگر آدرس >«را در «م قرار دهیم آنكاه مى كوثيم كه »م به
>« اشاره مینماید.
صفحه 199:
26
حال اكر دستور العمل 10 -+ 6 زرا بدهیم:
36
حال اگر دستورالعمل 7 + 0* < 01 ز بدهیم.
43
صفحه 200:
آرایه یک بعدی و اشاره گرها
اولین عنصر آرایه بوسیله 201 مشخص میشود.
آدرس اولین عنصر آرايه بوسيله 010184 يا بوسيله > مشخص میشود.
آخرس 1امين عنصر آرايه بوسيله :613-136 يا بوسيلة 3401-1 مشخص میشود.
دو دستورالعمل زير با هم معادلند .
5 - [11]ء:
de + 6 1۸۲.۵۰
از طرف دیگر اگر داشته باشیم
1101 11021
jfloat *p
دو دستورالععل زیر معادلند.
21 دمر
2+ عوز
و ه ۵ ۵ 5 ۵ ۵ ۵0
صفحه 201:
ساختارها و اشاره گرها
میتوان اشاره گری را تعریف نمود که به اولین بایت یک ساختار (معمهعا اشاره نماید.
struct
strucl
صفحه 202:
ارایههای دویعدی و اشارهگرها
يك آریه ویمدی بسورت تعماي آریه نک بعدی من تون عریق عومد
اگر « یک ماتریس ۵ سطری و ۴ ستونی از نوع اعشاری باشد قبلاً اين ماتریس را با
joa xf]
معرفى كرديم. حال با استفاده از اشارهگرها بصورت زیر معرفی نمائیم:
صفحه 203:
آرايه يك بمدى اول
آرايه يك بعدى دوم
آرایه يك يعدى سوم
آرايه يك بعدی چهادم
آرایه یک بعدی پنجم
صفحه 204:
و
حاص ١ طعادة
ae )
kt xf (00, 89, ©, 09, 400);
:)حسام
tet "pax;
انام آيليه بدو نديس لشايه به عنصر ایلآرلیه میسمابدا|
Porta HO; <=; r++)
Dent << *(ct) << eed;
Uke sevoed لاس
Por; <0; ++)
>>[ >> فص
ساب لد |
ree; +4) رسیم
>>[ ]مس >> فصو
اس ۳۷ ۱
)+ اس را
الم( >> فص
( :0 سم
G
=>
صفحه 205:
از عملكر ely ce تخیصیص حافظمبه صورت بويا
dynamic memory allocation
صفحه 206:
۳2 به اولین داده از نوع 3108 اشاره مینماید.
+تاو ب» 1 +ألمیرعنصراز فضای ی یوسته لشایه میماید.
صفحه 207:
ا
راعشخص و نمایش میدهد.
0
)سدم
1
م
;0.0 = ينوم" مح
قجس >> > و سین جح >> مج
<< مم
:[-] حاط سصمحوم
+ يدكر زوع مجم
إل + سوم" << وم 0
ما هيت
0)
Por (=O; زه بكم
wits "pr +);
pant << teh;
U sx order © Prov be ope we
cee] prs
renee O;
صفحه 208:
0
”م oot <<" how oxny records?
ma >> 0;
زاس سح > ۲
Port =O; <0; +4) {
> >> (إسا<- (جهم))>> دجم
: ام >> (6 .0ل كو بإزه عوم)")>> فود
bbe [re
[: 0 سیب
G
=>
صفحه 209:
0
۳
ail
Pou ub;
ia >> a >> b;
pn <u << wad ام > با ک>
صفحه 210:
char name[ ]= ”
sara’;
صفحه 211:
رشته و اشاره گر
هر رشته از طریق اشارهگری به اولین کرکتر آن در دسترس قرار میگیرد. آدرس یک رشته. آدرس کرکتر
اول آن میباشد. به رشتهها میتوان مقداراولیه تخصیص داد.
char *name =” sara’;
صفحه 212:
۱
حيصي نا
([ ]اه لس
)سيم
{
char Yow] = ("rare “rook”, bubck, “eons”, “oa”
اجه له لوف ا نو
مب رم رهم مسج
ced, >> [ ]سس >> بجر
:0 سم
حمم
ام
(0 <(: اس eons
the two srt مت ۲
اعسوم
]سس > [ ]عمد
:۶۱ [۱ ]سس
[ :میم
اف
>
صفحه 213:
صفحه 214:
رشتههای 51 و 52 رابا هم مقایسه نموده اگر 51 برابربا 52 باشد مقدار صفر و اگر
رشته 91 کوچکتر از رشته 52 باشد یک مقدار منفی در غیر اینصورت یک مقدار
مثبت برمیگرداند.
صفحه 215:
اکرکتر از رشتذ 81 رابا «كركتر از رشتة 82 مقايسه نموده در صورتيكه
1 کوچکتر از 52 باشد یک مقدار منفی, اگر 51 مساویبا 92 باشد مقدار صفر در
pad ایتصورت یک مقدار مثبت برمیگرداند.
صفحه 216:
دو رشتة 51و 52 را بعنوان آرگومان گرفته رشتة 52 رابه انتهای رشتذ 51 اضافه
مینماید. کرکتر اول رشتة 52 روی کرکتر پایلنی "۱0" رشتة 91 نوشته مى شود ونهايقاً
رشتة 51 را برمیگرداند.
صفحه 217:
دورشته 951 52 ومقدار صحيح و مثبت هرا بعنوان آركومان كرفته. حداكثر م
رشتة 91 کپی مینماید. اولین کرکتر رشته 52 روی
كركتر يايانى “70 رشتة 51 مىنويسد ونهايتاً مقدار رشتة 51 را برمیگرداند.
صفحه 218:
صفحه 219:
صفحه 220:
صفحه 221:
صفحه 222:
ای ام وت
رشتهها بایستی حتماً در ابتدا برنامه
<include <string.h+ ,|
reels
صفحه 223:
:( )ساد
vat << siren oll, 9) << ved
Dat << sraxnp(oll, 29, P) << wad ;
rena O;
صفحه 224:
صفحه 225:
( 4اه , [اه میاه بت
{
زعم
( إناد-لاع) حص
(of+4]="0" ) ®
:0 مر
:(2]]0) مسج
}
صفحه 226:
5 1 هنت
برنامه نویس شی گرا
صفحه 227:
ae
MY
ست مطالب
pif igi dad
jiu, uz (polymorphism)
خاضیت ارت بت
ans, (stack)
ssl all
slat ان ات اشاره گنه
توایع سازنده پازامتر دا اشاره گر حل
توابع سازنده یک پارامترع . توابع مجازی و پلی مرفیسم
صفحه 228:
برنامه نویسی شی گرا یا 0010 یک روش جدید برنامه
نویسی میباشد که در آن از ویژگی
ساختیافته همراه با چند ویژگیهای قوی جدید استفاده
آن برنامه نویسی 67++ امکان استفاده از 00
را به راحتی فراهم مینماید.
صفحه 229:
در 00 , بطور کلی مساله به تعدادی زیرگروه قطعات
code «.
تبدیل به
136 ها با واحدهائی میشود که 09685 (با اشیام
ناهیده میشوند.
صفحه 230:
تمام زبائيهاى برنامه نويسى شىكرا داراى سه
خصوصيت مشترک زیر میباشند
(jl+)9.04) encapsulation sit
(42) polymorphism :—
(s»©;) imheritance:c
صفحه 231:
محصورسازى (وصنداد د22 2 )
محصورسازی مکانیزمی است که roe 9 4ك را بهم وصل نموده و هر دوى آنها را از استفاددهاى
غیرمجاز مصون نگه میدارد. شی یک مولفه منطفی است که 40 و طعمت را محصور تموده و طحم
باعث دستکاری و پردازش تفه میشود.
صفحه 232:
چند ریختی مشخصهای است که بیک وسیله امکان میدهد که باتعدادی
.از سیستمها یا عمیات یا دستگاههاء مورد استفاده قرار گیره
صفحه 233:
ارث بری فرآیندی است که بوسیله آن یک شی (]01[66) میتواند
خاصیتهای شی دیگری را دارا شود.
صفحه 234:
بوک ات میکود یک عصر از بشته اج کرد
صفحه 235:
بمنظور ایجاد یک شی بایستی از کلسة رزروشده
255 استفاده نمود. 01855 از نظر ظاهر شبیه
ساختار یا 503120 میباشد. پشته را بعنوان یک
object میتوان در تظر گرفت که ۸8 تن
شامل یک آرلیه ویک 805 و عملیاتی که روی
اين 01668 انجام مى شود عبارتست از .711519
os initialize .pop
در اسلاید بعد مثالی از نحوه ایجاد شی آورده شده است.
از نحوه ایجاد شی آور
صفحه 236:
بدین معنی است که »ماو 0 9110 ۷
5 يوسيله توابعى كه عضو |
060 نباشند غير قابل ۷
دسترسی هستند. وان یکی از سس
شترتی هستند وین یکی از Sr
ee 91ج
kf toy;
بدين معنى انست که بوسیله سایر vai),
قطعات برناصسه قابسل دسسترسی ز(۱ 0اه لس
پاش
:( )سم مر
صفحه 237:
فقط تولبع عضو میتوانند به متغیرهای عضو از نوع مه
دسترسی داشته باشند. بایستی توجه داشت که اگر نوع عضوی
مشخص نگردد آن عضو به صورت اتوماتیک مهم مى باشد.
Private
صفحه 238:
vord )اس : : اناد i)
1( ©6112 - د دوم
:”دخا د معا" >> مج
تم
}
stck|be]= 1;
tow ++;
عملگر:: مشخص مینملید که تبع متعلقبه کدام 010[66 میباشد. عملگر : : عملگر
SCOpe resolution نامیده میشود.
صفحه 239:
مج
اه ‘peck wf, 9; || rete te
wok سای
rare)
صفحه 240:
ارث بری فرآیندی است که بوسیله آن یک شی (]01[66) میتواند
خاصیتهای شی دیگری را دارا شود.
در اسلاید بعد مثالی از ارث بری آورده شده است.
صفحه 241:
:ال
در روبرو جنات اى بنام ساختمان يا دشح تعريف كرديدة اسث.
هر ساختمان دارای تعدادی اطاق. تعدادی طبقه و سطح زیر بنا نیز
ميباشد: از طرف دیگزتوایعی که بزاق شي تغزیف شده
حال ناه ديكرى بنام «صحط تعریف مینمائيم کهنه تنها دارای
تعام اعضای شی پ«فح میباشد بلکه دارای دو اقلام داده افلفی
و چهار تابع اضافی میباشد. دراینجا عملاً شى «صحط از شی
یط ارث میبرد :
صفحه 242:
در مثال قبل بجقفط را ععاه و ها را جعاه Atel ga dered . شی عصحا تمام
اعضای بجقفط را دارا است بعلاوه اينکه دارای متغیرهای عضوی اضافی عف ۰ سس و
همچنین توابع عضوی سب .)فا .داح _مانیز
میباشد. .
Inheritance.
صفحه 243:
سازندهها و نابودکنندهها (عصسط اجه عصسصسسس]
bab! til, — Initializatio صوردتماتیکاز طریوتلبعیلنجام
QU gol aij waits L constructor elit. oh.
مخصوصیسنکه عضوواز ک الب وده و همام ASL LS Li
صفحه 244:
سازندهها و نابودکنندهها (عصسط اجه عصسصسسس]
Joc Se. destructor bois opt alt تلبع سازنده را انجام
میدهد. وقتی که شیای از بين میرود بصورت اتوماتیک تلبع نابود کننده
آن فراخوانی میگردد.
صفحه 245:
با استفاده از کلمة 83101901 لین امکان وجود دارد کهبه تابعی که عضو کلاس
نمیباشد اجازه دسترسی به متغیرها: Wai Jy ssf) oe private
تابعی را دوست اعلان نمائیم از کلمه Ld friend از تعریف تلبع استفاده
مى نمائيم.
در اسلاید بعد مثالی آورده شده است.
صفحه 246:
0
0
) سارت سار
۳
rib:
:ل سات )سعد Petra it
:1ك ,1 هلوس word
3
| :: obra, ei)
صفحه 247:
۱-کلاسی که از کلاس دیگر ارت میبرد. توابع دوست آن کلاسس را
به ارث نمیبرند.بعبارت دیگر یک 61255 8023700 . توبع
0 3
۲-نوایع دوست دارای مشخصه نوع ذخیره نمیباشند یعنی AND
دوست را نمیتوان بصورت ]هنک با 036107021 تعریف
نمود.
صفحه 248:
باشد . در چنین وضعیتی تابع دوست به
اين امكان وجود دارد كه يك كلاس دوست كلاس ديكرى رچنین
sla تعريف شده در كلاس ديكر دسترسى دارد.
كليه اسامى وعدم تعريف شده در
Friend Class
در اسلاید بعد مثالی آورده شده است.
صفحه 249:
صفحه 250:
امکان انتقال آرگومانها به تولبع سازنده وجود دارد. معمولاً از اين
See براى تفه نمودن شسی در زمان ایجاد آسن اسستفاده
دد.
در اسلاید بعد مثالی آورده شده است.
صفحه 251:
امک یاب #
خاک عبات
) امه ام
و با
: ام
wovckwn (tet t, tot) fe = 5 v=)
ae ) foo << << ee <<; }
1
صفحه 252:
توا 5
حاممصوم> طعادةة
ی رن ]
سس پیب
م
ريح ( سس
a x} ( )سب بر
رابه ۱066 منتقلك ناا ده
(( )تاه << vow
© عبر
صفحه 253:
اگر عضو دادهای بصورت 582830 اعلان گردد این بدین معنی است کد
کامپیلر فقط یک کبی از متغیر مذکور را نگهداری نموده و تعام ۵6 [و
ها بایستی بصورت اشتراکی از آن كبى استفاده نمايند. براى ايتكار
میبایستی از کلمه 5286 قبل از اعلان عضو استفاده تمود.
در الايد يعد مثالی آورده شده است.
صفحه 254:
)دم
زو howd
0ص هد // :(0,0)سدم
rorkou{ i
vise PP); I oben *
)سداس ير (
ز( )سید
er",
p>
صفحه 255:
میتوان یک کلاس را در یک کلاس دیگر تعریف نمود.
آمابعلت اینکه در 6++ براي کلاسها خاصیت ارث
بری وجود دارد نیازی معمولاًبه تعریف نمودن یک
کلاس در کلاس دیگر نیست
Nested Classes
صفحه 256:
وقتی که کلاسی در درون یک تابع تعریف میشود این
کلاس فقط برای آن تابع شناخته شده است و برای
تولبع دیگر ناشناخته میباشد. چنین کلاسی را کلاس
محلی مینامند.
Local Classes
صفحه 257:
در مورد کلاسهای محلی رعایت نکات زیر ضروری است :
تمام توابع عضو بايستى در درون كلاس تعریف گردند.
از متغیرهای محلی. تابعی که کلاس در آن تعریف شده نمیتواند استفاده نماید.
از متغیرهای عضوی هه نمیتوان استفاده نمود.
صفحه 258:
استفاده از ها بعنوان پارامترها
از اه ها میتوان بعنوان پارامترهای توابع استفاده نمود و مکانیزمانتقال آرگومانها و پارامترها بصورت
by cher قد مى باشد.
صفحه 259:
در اسلاید بعد مثالی آورده شده است.
صفحه 260:
frevkee <pereuw.k>
اب سار )
:ال
ا( { ward set_ Act a)
(: سس ( )رصم
k
میا از[ سیخ ماوت os bet
ee)
امه
b= Pe)
vat << obaptt( ) << ead
ممصم ©
صفحه 261:
انتساب اشیاء (مسنسه سسوم
در اسلاید بعد مثالی آورده شده است.
صفحه 262:
] ی وس <petrrow.h>
# اه >
امن سا
tt
rable:
لح 4 3) (xi)
st ett) frenrart}
eee
wocken obfl, ob;
)128( باه
b= offi; If cas cess Prow ob ob
)ضام (:
اسم >>
rer ©:
}
صفحه 263:
در اسلاید بعد مثالی آورده شده است.
صفحه 264:
حامس طادة
حاصحه طبادة
ارت اد
0300
bbe:
vord eet it) (ii)
لصم ( ارس
at)
:)سا
worker bf];
a
۱ ob Art);
Por (=O; <2; H+)
قعص >> ( )راس .[؛ إنام >> جو
ممم 0:
1
صفحه 265:
در اسلاید بعد مثالی آورده شده است.
صفحه 266:
0
troche <oocte hk
ام سار
tt;
bbe:
)عم ( {=O;}
i) {i} )سام
te) {rena}
k
م --)
-[ق]ط وساسد )0, ©, ©(:
:م" سرت
العم >> ( )راس <-م >> فصو
اانا جد p++; Il pond
صفحه 267:
در اسلاید بعد مثالی آورده شده است.
صفحه 268:
للم معد () حرص لد
اووس سا اقا مود
bi > ud = hy > ud *he > by
}
( ای بر
)10.7.0 ,0 ,40.8 (9 ,© )سم
>>( )سروب > مج
pur ) << ]
:7ه >>( )سم ورد >> مج
( :0 مس
صفحه 269:
تابع مجازی, تابعي است که در base class تعریف شد و
بوسیله 01855 16115760 تغیر داده ميشود. برای اعلان یک
تابع مجازی بایستی از کلمه ۷1۲1281 استفاده نمائیم.
تغیر تابع در کلاس مشتق روی تابعی که در کلاس پایه (hase class)
تعریف شده انجام میشود.
در اسلاید یعد مثالی آورده شده است.
صفحه 270:
خلسسسه یسم
thew bor
rie
raed لع re Hert $6" rr Pe)”
2
sha etal bbs awe
عم
)<< *) سح ما ایس عام ” >> قحا ( سخا لمم
3
haw drt ]سس تالم
537
0
wend") ( اماب تسوت تسوت مسر
bows مسجت( مج
تست تمس از
اس
( اس حاسمت سست Pe >
تست تس
2,
osteo ker treet‘)
صفحه 271:
فهرست مطالب
C++فصل اول :مقدمات زبان
فصل دوم :ساختار های تصمیم گیری و تکرار
فصل سوم :سایر ساختار های تکرار
فصل چهارم :اعداد تصادفی
فصل پنجم :آرایه ها
فصل ششم :توابع
فصل هفتم :ساختارها و اشاره گرها
فصل هشتم :برنامه نویسی شی گرا
فصل اول
مقدمات ++C
فهرست مطالب فصل اول
.1تاریخچه مختصر
.2قانون نامگذاری شناسه ها
.3متغیر ها
.4اعالن متغیر
.5تخصیص مقادیر به متغیر
.6داده های از نوع کرکتر
.7کرکتر های مخصوص
.8رشته ها
.9نمTایش مقادیر داده ها
.10دریافت مقادیر
.11
.12
.13
.14
.15
.16
.17
.18
.19
عملگر انتساب
عملگر های محاسباتی
عملگرهای افزایش و کاهش
sizeofعملگر
عملگرهای جایگزینی محاسباتی
اولویت عملگرها
) (Commentsتوضیحات
توابع کتابخانه
C++برنامه در
تاریخچه مختصر ++C
این زبان در اوائل دهه 1980توسط Bjarne stroustrupدر آزمايشگاه بل
طراحي شده .اين زبان عم ً
ال توسعه يافته زبان برنامه نويسي Cمی باشد كه
امكان نوشتن برنامههاي ساخت يافته شئ گرا را ميدهد.
قانون نامگذاري شناسهها
)1
حروف كوچك و بزرگ در نامگذاري شناسهها متفاوت ميباشند.
بنابراين Xy ، XY ، xY ، xyچهار شناسه
متفاوت از نظر ++Cميباشد.
قانون نامگذاري شناسهها
)2در نامگذاري شناس1هها از حروف الفباء ،ارقام و زي1ر خ1ط ()underscore1
اس1تفاده ميشود و حداكث1ر طول شناس1ه 31ميباش1د و شناس1ه نبايس1تيب1ا
يك رقم شروع گردد .
قانون نامگذاري شناسهها
در زير بعضي از كلمات.) براي نامگذاري شناسهها از كلمات كليدي نبايستي استفاده نمود3
.كليدي داده شده است
And
Sizeof
then
xor
Template
Float
False
Friend
While
continue
extern
Private
Switch
Default
Const
delete
typedef
if
this
Virtual
keywords and alternative tokens.
asm
enum
protected
typedef
auto
explicit
public
typeid
bool
extern
register
typename
break
false
reinterpret_cast
union
case
float
return
unsigned
catch
for
short
using
char
friend
signed
virtual
class
goto
sizeof
void
const
if
static
volatile
const_cast
inline
static_cast
wchar_t
continue
int
struct
while
default
long
switch
xor
delete
mutable
template
xor_eq
do
namespace
this
or_eq
double
new
throw
not
dynamic_cast
operator
true
bitand
else
private
try
and_eq
bitor
not_eq
compl
And
--
or
متغيرها
متغير ،مكاني در حافظه اصلي
كامپيوتر ميباشد كه در آنجا يك
مقدار را ميتوان ذخيره و در برنامه
از آن استفاده نمود .قانون نامگذاري
متغيرها همان قانون نامگذاري
شناسهها ميباشد.
در اسالید بعد به انواع داده ها اشاره می شود.
انواع داده ها
حافظه الزم
مقادير
نوع داده
2بايت
32767تا –32768
int
2بايت
65535تا 0
unsigned int
4بايت
2147483647تا –2147483648
long int
4بايت
4294967295تا 0
unsigned long int
1بايت
يك كاركتر
char
1بايت
127تا –128
unsigned char
4بايت
3.4e38ت11ا 1.2e-38
float
8بايت
1.8e308ت11ا 2.2e-308
double
اعالن متغیرها
قبل از آنكه در برنامه به متغيرها مقداري تخصيص داده
شود و از آنها استفاده گردد بايستي آنها را در برنامه اعالن
نمود .
در اسالید بعد مثال هایی از اعالن متغیر ذکر شده است.
چند مثال از اعالن متغیر ها :
براي اعالن متغير xاز نوع : int
;x
int
برای اعالن متغيرهاي pو qاز نوع floatكه هر كدام چهار بايت از
حافظه را اشغال ميكنند :
;float p , q
برای اعالن متغير nextاز نوع كركتر كه ميتوان يكي از 256كركتر را
به آن تخصيص داد و يك بايت را اشغال ميكند.
;char next
تخصيص مقادير به متغيرها
با استفاده از عملگر = ميتوان به متغيرها مقدار اوليه تخصيص نمود.
در اسالید بعد مثال هایی از اعالن متغیر ذکر شده است.
مثال :
در دستورالعمل
نوع intبا مقدار اوليه 26اعالن نموده .
X
; int x=26را از
;long a=67000 , b=260
در دستورالعمل
متغيرهاي bو aرا از نوع long intتعريف نموده با مقادير بترتيب
260و .67000
دادههاي از نوع كركتر
براي نمايش دادههاي از نوع charدر حافظه كامپيوتر از جدول
ASCIIاستفاده ميشود .جدول اسكي به هر يك از 256
كركتر يك عدد منحصر بفرد بين 0تا 255تخصيص ميدهد.
كركترهاي مخصوص
كامپيلTر ++CبعضTي از كركترهاي مخصTوص كه در برنامTه ميتوان از
آنهTا براي فرمTت بندي اسTتفاده كرد را تشخيص ميدهد .تعدادي از
اين كركترهاي مخصTوص بTه همراه کاربرد آنهTا در اسTالید بعد آورده
شده است .
ي مخصوص6كركترها
\n
Newline
\t
Tab
\b
Backspace
\a
Beep sound
\”
Double quote
\’
Single quote
\0
Null character
\?
Question mark
\\
Back slash
beep
ميتوان براي ايجاد صدايa\ بعنوان مثال از كركتر
.استفاده نمود
; char
x = '\a
رشتهها
رشته يا stringعبارتست از دنبالهاي از كركترها كه بين " " قرار داده
ميشود .در حافظه كامپيوتر انتهاي رشتهها بوسيله \ 0ختم ميگردد.
در اسالید بعد به دو مثال دقت نمایید.
مثال : 1
" "BOOK STOREيك رشته ده كركتري ميباشد
كه با توجه به كركتر \ 0كه به انتهاي آن در حافظ ه
اTضافه مي شود جمعــاً يازده بايت را اشغال ميكند.
مثال : 2
دقTت نماییTد کTه " "wيك رشتTه ميباشTد كه دو بايت از
حافظTTه را اشغال ميكنTTد در حاليكه ' 'wيك كركتTTر
ميباشد كه يك بايت از حافظه را اشغال مينمايد.
نمايش مقادير دادهها
براي نمايش دادهها بر روي صفحه مانیتور از coutكه بدنبال آن عملگر
درج يعني << قيد شده باشد استفاده ميگردد .بايستي توجه داشت كه
دوكركتر < پشت سر هم توسط ++Cبصورت يك كركتر تلقي ميگردد.
:مثال
براTی نمایش پيغام good morningبر روی صفحه نمایش :
;"cout << "good morning
برای نمایش مقدار متغیر Xبر روی صفحه نمایش :
; cout << x
دریافت مقادیر متغیرها
بTه منظور دريافت مقادير براي متغيرها در ضمن اجراي برنامTه از صTفحه كليد ،از cinكه
بدنبال آن عملگر استخراج يعني >> قيد شده باشد ميتوان استفاده نمود.
: مثال
int x;
cout << "Enter a
number:" ;
cin >> x;
عملگر انتساب
عملگر انتساب = ميباشد كه باعث ميگردد
مقدار عبارت در طرف راست این عملگر ارزيابي
شده و در متغير طرف چپ آن قرار گيرد.
مثال :
;x=a+b
; x=35
; x=y=z=26
از عملگرهاي انتساب چندگانه نيز ميتوان استفاده
نمود .که مقدار سه متغير zو yو xبرابر با 26
ميشود.
عملگرهاي محاسباتي
در ++Cپنج عملگر محاسباتي وجود دارد كه عبارتند از :
+
جمع
-
تفريق
*
ضرب
/
تقسيم
%
باقيمانده
اين عملگرها دو تائي ميباشند زيرا روي دو عملوند عمل مينمايند .از طرف
ديگر عملگرهاي +و – راميتوان بعنوان عملگرهاي يكتائي نيز در نظر گرفت.
مثال : 1
در حالتي كه هر دو عملوند عملگرهاي – ، + ، * ، / ، %از نوع صحيح باشد نتيجه
عمل از نوع صحيح ميباشد.
نتیجه
عبارت
7
2+5
10
5*2
3
5–2
1
5%2
2
5/2
مثال : 2
در صورتيكه حداقل يكي از عملوندهاي عملگرهاي + ، – ، * ، /از نوع اعشاري باشد
نتيجه عمل از نوع اعشاري ميباشد.
نتیجه
عبارت
7. 0
2+ 0 .5
10.0
5* 2. 0
2.5
5. 0 / 2
3. 0
5. 0 -2
2.5
5. 0 / 2. 0
عملگرهاي افزايش و كاهش
در ، ++Cافزايش يك واحد به مقدار يك
متغير از نوع صحيح را افزايش و بطور
مشابه كاهش يك واحد از مقدار يك
متغير از نوع صحيح را كاهش مينامند..
عملگرهاي افزايش و كاهش
عملگر كاهش را با - -و عملگر افزايش
را با ++نمايش ميدهند .چون عملگرهاي
++و - -فقط روي يك عملوند اثر دارند
اين دو عملگر نيز جزء عملگرهاي يكتائي
ميباشند.
مثال :
سه دستور العمل :
;++x
;x++
;x=x+1
معادل ميباشند و بطريق مشابه سه دستورالعمل زير نیز معادل مي باشند.
;--y
;y=y-1
; y- -
از عملگرهاي ++و --ميتوان بدو صورت پيشوندي و پسوندي استفاده نمود.
در دستورالعملهاي پيچيده عملگر پيشوندي قبل از انتساب ارزيابي ميشود و عملگر
پسوندي بعد از انتساب ارزيابي ميشود.
مثال :
;int x=5
;y=++x * 2
پس از اجراي دستورالعملهاي فوق :
y=12
;int x=5
;y=x++ * 2
پس از اجراي دستورالعملهاي فوق :
y=12
عملگر sizeof
Sizeofاز1عملگرهايي1كتائ1يم1يب11اشد و م1شخصك11ننده 1ت11ع1داد ب11اي1ت
ك11ند.
1ل1ي
1ي1س1تك11ه ي1كن1وع داد1ه 1ا1ش1غ1ا م
هائ ا
مثال :
;int x
; cout << sizeof x
مقدار 2نمايش داده ميشود .
; )cout << sizeof(float
مقدار 4نمايش داده مي شود.
عملگرهاي جايگزيني محاسباتي
براي سادهتر نوشتن عبارتها در ، ++Cميتوان از
عملگرهاي جايگزيني محاسبـــاتي استفاده نمود.
=%
=/
*=
=-
=+
اولويت عملگرها
ارزيابي مقدار يك عبارت رياضي براساس جدول اولويت عملگرها انجام ميگردد .در ذيل جدول اولويت
عملگرها براساس بترتيب از بيشترين اولويت به كمترين اولويت داده شده است.
چپ به راست
پرانتزها
)(
راست به چپ
عملگرهاي يكتايي
- + -- ++ sizeof
چپ به راست
عملگرهاي ضرب و تقسيم و باقيمانده
چپ به راست
عملگرهاي جمع و تفريق
چپ به راست
عملگرهاي درج و استخراج
راست به چپ
عملگرهاي جايگزيني و انتساب
%
>>
/
*
+
<<
== += -= *= /= %
مثال : 1
(5+2) *(6+2*2)/2
با توجه به جدول اولويت عملگرها داريم كه
7 *(6+2*2)/2
7*(6+4)/2
7* 10 /2
70 /2
35
: 2 مثال
int a=6 , b=2, c=8, d=12;
d=a++ * b/c ++;
cout << d << c << b << a;
: خروجی
1
9
2
7
توضيحات ()Comments
توضيحات در برنام1ه باع1ث خوانائ1ي بيشت1ر و درك بهت1ر برنام1ه ميشود .بنابراي1ن
توص1يه بر آ1ن اس1ت ك1ه حت1ي االمكان در برنامهه1ا از توضيحات اس1تفاده نمائيم .در
،++Cتوضيحات بدو ص1ورت انجام ميگيرد که در اس1الیدهای بع1د ب1ه آن اشاره
شده است.
توضيحات ()Comments
الف :اين نوع توضيح بوسيله //انجام ميشود .كه كامپيوتر هر چيزي را
كه بعد از //قرار داده شود تا انتهاي آن خط اغماض مينمايد.
مثال :
c=a+b;//c is equal to sum of a and b
ب:توضيح نوع دوم با */شروع شده و به * /ختم ميشود و هر چيزي
كه بين* /و * /قرار گيرد اغماض مينمايد .
مثال :
/ * this is a program
to calcufate sum of
n integer numbers */
توابع كتابخانه
زبان ++Cمجهز به تعدادي توابع كتابخانه ميباشد .بعنوان مثال
تعدادي توابع كتابخانه براي عمليات ورودي و خروجي وجود دارند.
معموالً توابع كتابخانه مشابه ،بصورت برنامههاي هدف (برنامه
ترجمه شده بزبان ماشين) در قالب فايلهاي كتابخانه دسته بندي و
مورد استفاده قرا رميگيرند .اين فايلها را فايلهاي headerمينامند و
داراي پسوند h.ميباشند.
نحوه استفاده از توابع کتابخانه ای
براي استفاده از توابع كتابخانه خاصي بايستـــي
نام فايل headerآنرا در ابتداي برنامه در دستور
include#قرار دهيم.
> اسم فايل include
< #header
تابع
نوع
شرح
فايل هيدر
a b s(i )
int
i قدرمطلق
st d l i b .h
c o s(d )
double
ma t h .h
e xp (d )
l o g (d )
l o g 10(d )
double
double
double
si n (d )
double
d كسينوس
ex
loge d
Log10 d
d سينوس
s q rt (d )
double
d جذر
ma t h .h
st rl en (s)
int
sتعداد كركترهاي رشته
st ri n g .h
t a n (d )
double
d تانژانت
ma t h .h
t o a s ci i ( c)
int
cكداسكي كركتر
st d l i b .h
t o l o we r(c )
int
تبديل به حروف كوچك
st d l i b .h
t o u p p er(c )
int
تبديل به حرف بزرگ
st d l i b .h
ma t h .h
ma t h .h
ma t h .h
ma t h .h
برنامه در ++C
اكنون باتوجه به مطالب گفته شده قادر خواهيم بود كه تعدادي برنامه ساده و كوچك به زبان +C
+بنويسيم .براي نوشتن برنامه بايستي دستورالعملها را در تابع ) (mainقرار دهيم و براي اينكار
ميتوان به يكي از دو طريقی که در اسالیدهای بعد آمده است ،عمل نمود.
:روش اول
>
#include
<
) (int main
}
; دستورالعمل 1
; دستورالعمل 2
.
.
.
; د1س1تورا1لعملn
; return 0
}
روش دوم :
>
#include
<
) (void main
{
; دستورالعمل 1
; دستورالعمل 2
.
.
.
; د1س1تورا1لعملn
}
را روي صفحه مانیتور نمايشC++ is an object oriented language برنامه ای که پيغام
.مي دهد
#include <iostream.h>
int main( )
{
cout <<"C++ is an object oriented language \n" ;
return 0 ;
}
برنامه زير يك حرف انگليسي كوچك را گرفته به حرف بزرگ تبديل مينمايد.
#include <iostream.h>
#include <stdlib. h>
int main( )
{
char c1 , c2;
cout << "Enter a lowercase letter:"
cin >> c1;
c2 = toupper(c1);
cout << c2 << endl;
return 0; }
ب آنها را محاسبه و نمايش ميدهد6دو عدد از نوع اعشاري را گرفته مجموع و حاصلضر.
#include <iostream.h>
int main( )
{
float
x,y,s,p ;
cin >> x >> y ;
s= x+y ;
p=x*y;
cout << s <<endl << p;
return 0 ;
}
فصل دوم
ساختارهای تصمیم گیری و تکرار
فهرست مطالب فصل دوم
.1
.2
.3
.4
.5
.6
عملگر های رابطه ای
عملگر شرطی
دستورالعمل شرطی
عملگر کاما
عملگر های منطقی
Forدستورالعمل
عملگرهای رابطه ای
از این عملگرها براي تعيين اينكه آيا دو عدد با
هم معادلند يا يكي از ديگري بزرگتر يا كوچكتر
ميباشد استفاده ميگردد .عملگرهاي رابطهاي
عبارتند از:
مساوي
==
مخالف
=!
بزرگتر
>
بزرگتر يا مساوي
=>
كوچكتر
<
كوچكتر يا مساوي
<
=
عملگر شرطی
شكل كلي عملگر شرطي بصورت زير ميباشد:
expression _ test ? expression _ true : expression _ false
عملگر شرطي تنها عملگري در ++Cميباشد كه داراي سه عملوند ميباشد.
مثال : 1
;int x=10,y=20,b
; b=(x>y) ? x : y
اين دو دستور العمل باعث ميشوند كه ماكزيمم مقادير yو xدر bقرار بگيرد.
مثال 6: 2
; "x>=10 ? cout << "passed" : cout << "failed
رشته
اگر مقدار xبزرگتر يا مساوي ده باشد رشتة passedدر غير اينصورت
نمايش داده ميشود.
failed
IF
دستورالعمل شرطي
توسط این دستور شرطي را تست نموده و بسته
به آنكه شرط درست يا غلط باشد عكسالعمل
خاصي را نشان دهيم.
) ع1بار1ت
; د1س1تورا1لعمل1
.
; د1س1تورا1لعملn
(if
{
}
else
{
; د1س1تورا1لعمل1
.
; د1س1تورا1لعملn
}
1 مثال:
if(x != y)
{
cout << x ;
++ x ;
}
else
{
cout << y ;
--y;
}
2 مثال:
برنامه زير يك عدد اعشاري را از ورودي گرفته جذر آنرا محاسبه مينمايد.
#include <iostream.h>
#include <math . h>
int main( )
{
float x,s;
cin >> x ;
if( x < 0 )
cout << " x is negative" << endl ;
else
{
s = sqrt(x) ;
cout << s << endl ;
}
return 0;
}
عملگر كاما
تعدادي عبارت را ميتوان با كاما بهم متصل نمود و
تشكيل يك عبارت پيچيدهتري را داد .اين عبارتها به
ترتيب از چپ به راست ارزيابي شده و مقدار عبارت
معادل عبارت nميباشد.
(عبارت , .… , nعبارت , 3عبارت , 2عبارت )1
مثال :
اگر داشته باشيم
; int a=2 , b=4 , c=5عبارت زير را در نظر بگيريد:
)(++ a , a+b, ++ c, c+b
مقدار عبارت برابر است با b+cكه معادل 10ميباشد.
عملگرهای منطقی
با استفاده از عملگرهاي منطقي ميتوان شرطهاي تركيبي در برنامه ايجاد نمود.
عملگرهاي منطقي عبارتست از :
AND
OR
NOT
كه در ++Cبه ترتيب بصورت زير نشان داده ميشود.
&&
||
!
جدول درستی سه عملگر شرطی
a
t ru e
t ru e
fa l se
fa l se
a
t ru e
t ru e
fa l s e
fa l s e
b
t ru e
fa l s e
t ru e
fa l s e
b
t ru e
fa l se
t ru e
fa l se
a && b
Tru e
Fa l s e
Fa l s e
Fa l s e
a
t ru e
fa l s e
!a
Fa l se
Tru e
a || b
Tru e
Tru e
Tru e
Fa l se
چند مثال :
))if ((x= = 5) ||(y != 0
; cout << x << endl
اگر xبرابر با 5يا yمخالف صفر باشد مقدار xنمايش داده شود .
if(x
)
=x
;0
اگر مقدار xمخالف صفر باشد ،آنگاه xبرابر با صفر شود .
برنامه زير طول سه پارهخط را از ورودي گرفته مشخص مينمايد كه آيا تشكيل يك مثلث ميدهد يا خير؟
#include
< iostream.h >
int main( )
{
float a, b, c;
cout << "Enter three real numbers" << endl ;
cin >> a >> b >> c; //
if(( a < b + c) &&(b < a+c) &&(c < a+b))
cout << "It is a triangle" ;
else
cout << "Not a triangle" ;
return 0 ;
}
دستورالعمل For
از دستور العمل forبراي تكرار دستورالعملها استفاده ميشود .شكل كلي دستور
forبصورت زير ميباشد:
(عبارت ; 3عبارت ; 2عبارت for )1
{
; د1س1تورا1لعمل1
; د1س1تورا1لعمل2
.
.
.
; د1س1تورا1لعملn
}
. را از ورودي گرفته فاكتوريل آنرا محاسبه ونمايش ميدهدn برنامه زير عدد صحيح و مثبت
#include
<iostream.h>
int
main( )
{
int n, i ;
long fact = 1 ;
cout << "Enter a positive integer number";
cin >> n;
for( i=1; i<=n; ++i) fact *= i;
cout << fact << endl;
return 0 ;
}
برنامه زير مجموع اعداد صحيح و متوالي بين 1تا nرا محاسبه نموده و نمايش ميدهد.
#include
><iostream.h
int
) (main
{
; int n, i=1
; long s = 0
; cin >> n
;for(; i<=n; i++) s += i
; cout << s
} ; return 0
. را نمايش ميدهد9 تا0 برنامه زير ارقام
#include <iostream.h>
int main( )
{
int j=0 ;
for( ; j <= 9 ; ) cout << j++ << endl;
return 0 ;
}
. ايجاد ميشوند را نمايش ميدهد3 ، 2 ، 1 برنامه زير كليه اعداد سه رقمي كه با ارقام
#include <iostream.h>
int main( )
{
int i,j,k,n;
for(i=1; i<=3; ++i)
for(j=1; j<=3; ++j)
for(k=1; k<=3; ++k)
{
n=i*100 + j*10+k;
cout << n << ‘\n’ ;
}
return 0 ;
}
فصل سوم
سایر ساختارهای تکرار
فهرست مطالب فصل سوم
.1
.2
.3
.4
.5
.6
.7
.8
whileدستورالعمل
do whileدستورالعمل
breakدستورالعمل
continueدستورالعمل
switchدستورالعمل
)( cin.getتابع
)(>< static_castعملگر
جدول اولویت عمTلگرها
دستورالعمل while
از اين دستور العمل مانند دستورالعمل forبراي تكرار يك دستورالعمل ساده يا تركيبي
استفاده ميگردد .شكل كلي اين دستور العمل بصورت زير ميباشد.
)ش1رط (while
}
; دستورالعمل 1
; دستورالعمل 2
.
.
; د1س1تورا1لعملn
}
تفاوت دستورهای whileو for
دستورالعمل forزماني استفاده
ميشود كه تعداد دفعات تكرار از قبل
مشخص و معين باشد .در صورتيكه
تعداد دفعات تكرار مشخص نباشد
بايستي از دستورالعمل while
استفاده نمود.
مثال :
int x=0
)while(x<5
;cout << x ++<< endl
با اجراي قطعه برنامه فوق مقادير زير نمايش داده
:ميشود
0
1
2
3
4
. قرار ميدهدavg مقدار از نوع اعشاري را گرفته ميانگين آنها را محاسبه و در متغيرn برنامة فوق
#inclode <iostream.h>
int main( )
{
int count = 0 , n;
float x, sum = 0 , avg ;
cin >> n ; /* ي1ير ورود1قاد1داد م1ع11 تn*/
while(count < n){
cin >> x ;
sum += x ;
++ count ; }
avg = sum / n ;
cout << avg << endl;
return 0 ; }
دستورالعمل do while
اين دستور العمل نيز براي تكرار يك دستورالعمل ساده
يا تركيبي استفاده ميشود .شكل كلي اين دستورالعمل
بصورت زير ميباشد.
do
}
; دستورالعمل 1
; دستورالعمل 2
.
.
; د1س1تورا1لعملn
;)ش1رط (} while
تفاوت دستورهای do whileو while
در دستورالعمل whileابتدا مقدار
شرط ارزيابي شده اما در دستورالعمل
do whileابتدا دستورالعمل اجرا
شده سپس مقدار شرط ارزيابي ميگردد.
بنابراین دستورالعمل do while
حداقل يك بار انجام ميشود .
: مثال
#include <iostream.h>
int main( )
{
int count = 0;
do
cout << count ++<<endl ;
while(count <= 9);
return 0 ; }
را روي ده خط نمايش ميدهد9 تا0 ارقام
دستورالعمل break
اين دستورالعمل باعث توقف دستورالعملهاي تكرار( )for , while ,do whileشده و
كنترل به خارج از اين دستورالعملها منتقل مينمايد.
: 1 مثال
#include <iostream.h>
int main( )
{
float x, s=0.0 ;
cin >> x ;
while(x <= 1000.0) {
if(x < 0.0){
cout << "Error-Negative Value" ;
break;
}
s += x ;
cin >> x ;}
cout << s << endl ;
return 0 ; }
:2 مثال
#include <iostream.h>
int main( )
{
int count = 0 ;
while( 1 )
{
count ++ ;
if(count > 10 )
break ;
}
cout << "counter : " << count << "\n";
return 0 ;
}
:3 مثال
#include <iostream.h>
void main( )
{
int count;
float x, sum = 0;
cin >> x ;
for(count = 1; x < 1000 . 0; ++ count )
{
cin >> x ;
if(x < 0.0) {
cout << "Error – Negative value " <<endl;
break ;
}
sum += x ; }
cout << sum << \n ; }
:4 مثال
#include <iostream.h>
int main( )
{
float x , sum = 0.0 ;
do
{
cin >> x ;
if(x < 0.0)
{
cout << "Error – Negative Value" << endl ;
break ;
}
sum += x ;
} while(x <= 1000.0);
cout << sum << endl ;
return 0 ; }
دستورالعمل continue
از دستورالعمل continueميتوان در دستورالعملهاي تكرار do
while ، while ، forاستفاده نمود .اين دستورالعمل باعث
ميشود كه كنترل بابتداي دستورالعملهاي تكرار منتقل گردد.
:1 مثال
#include <iostream.h>
int main( )
{
float x, sum = 0.0 ;
Do
{
cin >> x ;
if(x < 0 . 0)
{
cout << "Error" << endl ;
continue ;
}
sum += x ;
} while(x <= 1000.0 );
cout << sum ;
return 0 ; }
:2 مثال
#include <iostream.h>
int main( )
{
int n , navg = 0 ;
float x, avg, sum = 0 ;
cin >> n ; / *ي1عداد ورود1داد ا1ع11تاز ت1بار1 عn * /
for(int count = 1 ; count <=n; ++ count )
{
cin >> x ;
if(x < 0 ) continue ;
sum += x ;
++ navg ;
}
avg = sum / navg;
cout << avg << endl ;
return 0 ;
}
دستورالعمل switch
همانطور که می دانید از دستورالعمل شرطی( )if elseمی توان بصورت تودرتو
استفاده نمود ولي از طرفي اگر عمق استفادة تو در تو از اين دستورالعمل زياد
گردد ،درك آنها مشكل ميشود .براي حل اين مشكل ، ++Cدستورالعمل
switchكه عم ً
ال يك دستورالعمل چند انتخابي ميباشد را ارائه نموده است.
Switch شکل کلی دستور العمل
switch(ت1بار1)ع
{
case valueone :
statement;
break;
case
statement;
valuetwo:
break;
case
statement;
valuen :
break;
default: statement ;
}
1 مثال:
#include <iostream.h>
void main( )
{
unsigned int n ;
cin >> n;
switch(n)
{
case 0:
cout << "ZERO" << endl ;
break;
case 1:
cout << "one" << endl ;
break ;
case 2:
cout << "two" << endl ;
break;
default :
cout << "default" << endl;
}
/ * end of switch statement * /
}
: 2 مثال
#include <iostream.h>
void main( )
{
unsigned int n;
cin >> n ;
switch(n) {
case 0 :
case 1:
case 2:
cout << "Less Than Three" << endl;
break;
case 3:
cout << "Equal To Three" << endl ;
break;
default:
cout << "Greater Than Three" << endl;
}
}
تابع : )(cin.get
اين تابع يك كركتر را از صفحه
كليد ميگيرد .براي استفاده از اين
تابع در ابتداي برنامه بايستي داشته
باشيم :
#include
><iostream.h
قطعه برنامه ذيل يك كركتر را از صفحه كليد گرفته و نمايش ميدهد.
char
;x
;) (x = cin.get
; cout << x
برنامة ذيل يك سطر متن انگليسي كه به CTRL Zختم ميشود را گرفته دقيقا ً نمايش ميدهد.
#include
><iostream.h
) (int main
{
;char x
)while((x = cin.get( ) !=EOF
; cout << x
; return 0
}
ب11اشد
EOFبه م1عني End of Fileم1ي
ك11ه در iostream.hت11ع1ري1فش1ده 1و
ب11اشد .م1قدار آندر
م1قدار آنب11را1بر ب11ا -1م1ي
س1يستمع1ام1ل DOSع1بار1ت1ستاز . ctrl z
. استفاده شده استswitch () و دستورcin.get در قطعه برنامه ذيل ازتابع
char
x;
x = cin.get( );
switch(x) {
case r :
case R :
cout << RED << \n ;
break ;
case b :
case B :
cout << BLUE << endl ;
break ;
case y :
case Y :
cout << YELLOW << endl;
}
.) آنرا حذف نموده و نمايش ميدهدblank( برنامة ذيل يك سطر متن انگليسي را گرفته كركترهاي خالي
#include
<iostream.h>
int main( )
{
char next;
while((next = cin.get( ) ) !=EOF)
if(next != )
cout << next ;
return 0 ;
}
عملگر static_cast
از اين عملگر براي تبديل موقت يك نوع dataبه نوع ديگر
استفاده ميشود .اين عملگر يك عملگر يكتائي ميباشد.
:مثال 1
intint xx==25
; ;25
float
; ;float yy
yy==static_cast
<<static_cast
float
)float>(x
; ;)>(x
مقدار xموقتاً بصورت اعشاري در
می آيد و در نتيجه مقدار yبرابر با
25.0می شود .بايستي توجه داشت
كه نوع متغير xعوض نمي شود بلكه
موقتاً مقدار آن بصورت اعشاري در
آمده است.
2 مثال:
float
floatxx=
=
14.75
14.75;;
cout
cout<<
<<
static_cast
static_cast<
<
int
int>(x)
>(x)<<
<<
endl;
endl;
cout
cout<<
<<xx;;
نمايش داده ميشود و14 ابتدا مقدار
نمايش داده14.75 سپس مقدار
.ميشود
جدول اولویت عملگرها
چپ به راست
(
)
راست به چپ Static_cast < >( ) ++ -- + - sizeof
چپ به راست
* / %
+-
چپ به راست
چپ به راست
چپ به راست
<<
>>
=> > =<
چپ به راست
=!
==
راست به چپ
:
?
راست به چپ
چپ به راست
=*= /= %
<
== += -
,
فصل چهارم
اعداد تصادفی
فهرست مطالب فصل چهارم
.1
.2
.3
.4
تولید اعداد تصادفی
) ( typedefتعریف نوع داده
داده های از نوع شمارشی
فرمت های مختلفه مقادیر خروجی
اعداد تصادفی
مقادير تصادفي يا شانسي در اكثر برنامههاي كاربردي در زمينه شبيه سازي و بازيهاي
كامپيوتري نقش مهمي را ايفا مينمايند .براي ايجاد يك عدد تصادفي صحيح بين 0و 32767
بايستي از تابع ) (randاستفاده نمائيم.
. را ايجاد مينمايد32767 و0 عدد تصادفي بين10 برنامه زير
#include
<stdlib.h>
#include
< iostream.h>
int main( )
{
for(int j=1; j<=10; ++j)
cout << rand( ) << \n ;
return 0 ;
}
نکته :
اگر برنامة فوق را چندبار اجرا نمائيم جواب يكساني را از كامپيوتريمی گيريم.
براي تصادفي كردن اعداد ميبايستي از تابع ) (srandاستفاده نمائيم.
اين تابع به يك آرگومان صحيح از نوع unsignedنياز دارد.
به اين آرگومان seedگفته ميشود.
در اسالید بعد برنامه قبلی را با تابع ) (srandنوشته ایم.
) ) (srand ( . را ايجاد مينمايد32767 و0 عدد تصادفي بين10 برنامه زير
#include
<stdlib.h>
#include
< iostream.h>
int main( )
{
unsigned seed;
cout << "Enter seed value : " ;
cin >> seed ;
srand(seed);
for(int j=1; j<=10; ++j)
cout << rand( ) << \n ;
return 0 ;
}
.برنامه زير نتيجه پرتاب دو تاس را نمايش ميدهد
#include
< iostream.h>
#include
<stdlib.h>
int main( )
{
unsigned seed, d1, d2;
cout << "Enter seed: " ;
cin >> seed ;
srand(seed) ;
d1= 1+rand( )% 6 ;
d2= 1+rand( )% 6 ;
cout << d1 <<
<< d2 ;
return 0 ;
}
. را نمايش ميدهد1 و0 اعداد شانسي بين10 برنامه زير
#include
<stdlib.h>
#include
< iostream.h>
int main( )
{
unsigned seed ;
cout << "Enter seed: " ;
cin >> seed ;
srand(seed) ;
for(int i=1; i<=10; ++i)
cout << rand( ) / 32768.0 << endl ;
return 0 ;
}
تعريف نوع داده ()typedef
از typedefميتوان براي تعري11ف نوع دادههاي جدي11د ك11ه معادل نوع
دادههاي موجود باشد استفاده نمود .شكل كلي عبارتست از :
;newtype
اسم جديد
type
typedef
نشاندهنده نوع داده موجود
مثال :
;typedef int integer
حال ميتوان yو xرا بصورت زير تعريف نمود :
;integer x,y
دادههاي از نوع شمارشي
بمنظور معرفي دادههاي از نوع شمارشي از كلمه enumاستفاده ميگردد.
مثال :
4
3
2
1
0
enum color {red, blue, green,
; }yellow, brown
ب11اشد.
colorي1كن1وع داد1ه 1ش1مار1ش1يم1ي
چند مثال:
emum status {married, devorced, vidow, single};
status a ;
a= single ;
enum days {sat, sun, mon, tue, wed, thr, fri};
enum bread {lavash, fantezi, taftoon, barbari};
enum color { yellow, red=2, brown, white };
color x=brown;
0
3
4
:توجه
بايستي در نظر داشت كه دادههاي از
نوع شمارشي در عمليات ورودي و
خروجي شركت نمينمايند .بعبارت
ديگر مقادير دادههاي از نوع شمارشي
بايستي در برنامه تعيين نمود.
دستورالعلهاي ورودي و خروجي مانند
cinو coutدر مورد دادههاي
شمارشي نميتوان استفاده نمود.
فرمتهای مختلفه مقادیر خروجی
مقدار xبطور غیر علمی با نقطه اعشار ثابت نمایش
داده می شود.
; double x=1050
<< )cout << setiosflags(ios : : fixed | ios: : showpoint ) << setw(23
; setprecision(2) << x << endl
مقدار xبا طول میدان 23نمایش داده می شود.
مقدار xبا دو رقم اعشار نمایش داده می شود.
بنابراین مقدار xبصورت زیر نمایش داده می شود :
شانزده ستون خالی 1050.00
فصل پنجم
آرایه ها
فهرست مطالب فصل پنجم
.1
.2
آرایه یک بعدی
آرایه دو بعدی ( ماتریس ها )
آرایه یک بعدی
آرايه يك فضاي پيوسته از حافظه اصلي كامپيوتر ميباشد كه ميتواند
.چندين مقدا را در خود جاي دهد
كليه عناصر يك آرايه از يك نوع ميباشند.
عناصر آرايه بوسيله انديس آنها مشخص ميشوند.
در ، ++Cانديس آرايه از صفر شروع ميشود.
کاربرد آرایه ها
آرايهها در برنامهنويسي در مواردي كاربرد دارند كه
بخواهيم اطالعات و دادهها را در طول اجراي
.برنامه حفظ نمائيم
; ]int x[5
x
4
پنجمين عنصر ]x[4
3
2
1
0
اولين عنصر ]x[0
تخصیص مقادیر اولیه به عناصر آرایه :
;}int x[5]= {4, 2, 5, 17, 30
x
30
17
5
2
4
4
3
2
1
0
دریافت مقادیر عناصر آرایه :
;]int x[5
)for(int i=0; i<=4; ++i
; ] cin >> x[ i
نمایش مقادیر عناصر آرایه :
; ] for(int i=0; i<=5; ++i) cout << x[ i
.اگر تعداد مقادير اوليه كمتر از تعداد عضوهاي آرايه باشد عضوهاي باقيمانده بطور اتوماتيك ،مقدار اوليه صفر ميگيرند
;}int x[5] = {12, 5, 7
x
0
0
7
5
12
4
3
2
1
0
بايستي توجه داشت كه آرايهها به صورت ضمني مقدار اوليه صفر نميگيرند .برنامه نويس بايد به عضو اول آرايه،
مقدار اوليه صفر تخصيص دهد تا عضوهاي باقيمانده بطور اتوماتيك ،مقدار اوليه صفر بگيرند.
; }int x[5] = {0
x
0
0
0
0
0
4
3
2
1
0
دستور زير يك آرايه يك بعدي شش عنصري از نوع floatايجاد مينمايد.
float x[ ] = {2.4, 6.3, -17.1, 14.2, 5.9,
; }16.5
x
16.5
5.9
14.2
-17.1
6.3
2.4
5
4
3
2
1
0
عدد اعشاري و مثبت را گرفته تشكيل يك آرايه ميدهد سپس مجموع عناصر آرايه را مشخص100 برنامه ذيل
.نموده نمايش ميدهد
#include <iostream.h>
#include <iomanip.h>
int main( )
{
const int arrsize = 100 ;
float x[ arrsize], tot = 0.0 ;
for(int j=0; j<arrsize; j++)
cin >> x[ j ];
for(j=0; j<arrsize; j++)
cout << setiosflags(ios::fixed ios :: showpoint ) << setw(12) << setprecision(2) << x[ j ] <<
endl;
for(j=0; j<arrsize; j++)
tot += x[ j ] ;
cout << tot ;
return 0 ;
}
عدد اعشاري را گرفته تشكيل يك آرايه داده سپس كوچكترين عنصر آرايه را20 برنامه ذيل
.مشخص و نمايش ميدهد
#include <iostream.h>
#include <conio.h>
int main( )
{
float x[20], s;
int j ;
clrscr( ) ;
for(j=0; j<20 ; ++j) cin >> x[ j ];
s = x[0 ] ;
for(j=1; j<20; ++j)
if(x[ j] <s) s = x[ j ];
cout << s << endl;
return 0;
}
.) بصورت صعودي مرتب مينمايدBubble sort( عدد اعشاري را گرفته بروش حبابي100 برنامه زير
#include <iostream.h>
#include <conio.h>
int main ( )
{
float x[100] , temp;
int i,j ;
clrscr( );
for(i=0; i<100; ++i) cin >> x[i ];
for(i=0; i<99; i++)
for(j=i+1 ; j<100; j++)
if(x[ j ] < x[i ]{
temp = x[ j ] ;
x[ j ] = x[ i ];
x[ i ] = temp ;
}
for(i=0; i<=99; i++)
cout << x[ i ] << endl;
return 0 ;
}
آرايههاي دوبعدي (ماتريسها)
ماتريسها بوسيله آرايههاي دوبعدي در كامپيوترنمايش داده ميشوند.
;]int a[3][4
ستون 1
ستون 0
ستون 3
ستون
]a[0][3
]a[0][2
]a[0][1
]a[0][0
سطر 0
]a[1][3
]a[1][2
]a[1][1
]a[1][0
سطر 1
]a[2][3
]a[2][2
]a[2][1
]a[2][0
سطر 2
2
تخصیص مقادیر اولیه به عناصر آرایه :
; } }int a[3][4]={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12
3
2
1
0
4
3
2
1
0
8
7
6
5
1
12
11
10
9
2
int a[3][4]= { {1}, {2,3} , {4,5,6} } ;
0
1
2
3
0
1
0
0
0
1
2
3
0
0
2
4
5
6
0
int a[3][4]= {1, 2, 3, 4,5 } ;
0
1
2
3
0
1
2
3
4
1
5
0
0
0
2
0
0
0
0
در يك آراية دوانديسي ،هر سطر ،در حقيقت آرايهاي يك انديسي است .در
اعالن آرايههاي دوانديسي ذكر تعداد ستونها الزامي است.
;}int a[ ][4]={1,2,3,4,5
3
2
1
0
4
3
2
1
0
0
0
0
5
1
. را گرفته مجموع عناصر آن را مشخص نموده و نمايش ميدهد4*3 برنامه زير يك ماتريس
#include <iostream.h>
#include <conio.h>
int main( )
{
float x[3][4], total= 0.0;
int i, j ;
// generate matrix x.
for(i=0; i<3; ++i)
for (j=0; j<3; j++)
cin >> x[ i ][ j ];
// calculate the sum of elements.
for(i=0; i<3; ++i)
for(j=0; j<4; j++)
tot + = x [ i ][ j ];
cout << "total = " << total << endl;
return 0 ;
}
فصل ششم
توابع
فهرست مطالب فصل ششم
.1
.2
.3
.4
.5
.6
تعریف تابع
تابع بازگشتی
توابع درون خطی
انتقال پارامترها از طریق ارجاع
) ( storage classesکالس های حافظه
سربارگذاTری توابع
تعریف توابع
استفاده از توابع در برنامهها به برنامهنويس اين امكان را ميدهد كه
بتواند برنامههاي خود را به صورت قطعه قطعه برنامه بنويسد .تا كنون
كليه برنامههائي كه نوشتهايم فقط از تابع ) (mainاستفاده نمودهايم.
نوع مقدار برگشتي
شكل كلي توابع بصورت زير ميباشند :
لیست پارامتر ها جهت انتقال اطالعات از تابع احضار كننده به تابع فراخوانده شده
return-value-type function-name (parameter)list
{
declaration and statements
نام تابع
}
تعريف اعالنهاي تابع و دستورالعملهاي اجرائي
.تابع زير يك حرف كوچك را به بزرگ تبديل مينمايد
نوع مقدار برگشتی
پارامتری از نوع char
نام تابع
)char low_to_up (char c1
{
;char c2
;c2 = (c1>= a && c1<= z )?( A + c1- a ): c1
; )return (c2
}
.برنامه کامل که از تابع قبل جهت تبدیل يك حرف كوچك به بزرگ استفاده مينمايد
#include <iostream.h>
char low_to_up(char c1)
{
char c2;
c2=(c1 >= a && c1 <= z )?( A +c1 - a ) : c1;
return c2;
}
int main( )
{
char x;
x=cin.get( );
cout << low_to_up(x) ;
return 0;
}
x
‘d’
c1
‘d’
c2
‘D’
آرگومان
تابع maximumدو مقدار صحيح را گرفته بزرگترين آنها را برميگرداند.
)int maximum(int x, int y
{
; int z
;z=(x >= y)? x : y
;return z
}
. جهت یافتن ماکزیمم دو مقدار صحيح استفاده می نمایدmaximum برنامه کامل که از تابع
#include <iostream.h>
int maximum(int x , int y)
{
int z ;
z=(x > y)? x : y ;
return z;
}
int main( )
{
int a, b ;
cin >> a >> b ;
cout << maximum(a,b);
return 0;
}
maximum ع1اب11هایت1گومان1 آرa, b
a
b
10
15
x
y
10
15
z
15
اسامي پارامترها و آرگومانهاي يك تابع
.ميتوانند همنام باشند
برنامه زير يك مقدار مثبت را گرفته فاكتوريل آنرا محاسيه نموده نمايش ميدهد.
x!=1*2*3*4*…*(x-1)*x
#include <iostream.h>
long int factorial(int n)
{
long int prod=1;
if(n>1)
for(int i=2; i<=n; ++i)
prod *=i;
return(prod);
}
int main( )
{
int n;
cin >> n ;
cout << factorial(n) ;
return 0 ;
}
main درn
3
factorial درn
3
factorial درi
2,3,4
factorial درprod
6
وقتي در تابعي ،تابع ديگر احضار ميگردد
بايستي تعريف تابع احضار شونده قبل از تعريف
.تابع احضار كننده در برنامه ظاهر گردد
اگ1ر بخواهی1م در برنامهه1ا ابتدا تاب1ع main
ظاه1ر گردد بايس1تي prototypeتاب1ع يعن1ي
پيش نمون1ة تاب1ع ك1ه شام1ل نام تاب1ع ،نوع مقدار
برگشت1ي تاب1ع ،تعداد پارامترهائ1ي را ك1ه تاب1ع
انتظار درياف111ت آنرا دارد و انواع پارامتره111ا و
ترتيب قرارگرفت1ن اي1ن پارامتره1ا را ب1ه اطالع
كامپيلر برساند.
در اسالید بعد مثالی در این زمینه آورده شده است.
#include <iostream.h>
#include <conio.h>
long int factorial(int); // function prototype
int main( )
{
int n;
cout << "Enter a positive integer" << endl;
cin >> n;
cout << factorial(n) << endl;
return 0 ;
}
long int factorial(int n)
{
long int prod = 1;
if(n>1)
for(int i=2; i<=n; ++i)
prod *= i;
return(prod);
}
در ص11ورتي ك11ه تاب11ع مقداري بر نگردان11د نوع
مقدار برگشت1ي تاب1ع را voidاعالن ميكنيم .و
در ص1ورتيكه تاب1ع مقداري را درياف1ت نكن1د بجاي
parameter- listاز voidي11ا ( )
استفاده ميگردد.
در اسالید بعد مثالی در این زمینه آورده شده است.
#include <iostream.h>
#include <conio.h>
void maximum(int , int) ;
int main( )
{ int x, y;
clrscr( )
cin >> x >> y;
maximum(x,y);
return 0;
}
void maximum(int x, int y)
{
int z ;
z=(x>=y) ? x : y ;
cout << "max value \n" << z<< endl;
return ;
}
.تابع مقداري بر نمی گرداند
) Call By Value ( احضار بوسیله مقدار
#include <iostream.h>
int modify(int)
int main( )
{
int a=20;
cout << a << endl;
modify(a) ;
cout << a << endl;
return 0 ;
}
int modify(int a)
{
a *= 2;
cout << a << endl;
return ;
}
main درa
20
modify درa
20
modify درa
40
: خروجی برنامه
20
40
20
احضار بوسیله مقدار ( ) Call By Value
aدر main
20
aدر modify
20
aدر modify
40
در این نوع احضار تابع حافظههاي مورد
استفاده آرگومانها و پارامترها
از هم متمايزند و هرگونه تغيير در پارامترها
باعـــث تغيـــر
در آرگومانهاي متناظر نميگردد.
>#include <iostream.h
)int modify(int
) (int main
{
;int a=20
;cout << a << endl
; )modify(a
;cout << a << endl
; return 0
}
)int modify(int a
{
;a *= 2
;cout << a << endl
; return
}
ه1ر زمان که نوع مقدار برگشت1ي تاب1ع int
ميباش1د نيازي ب1ه ذك1ر آ1ن نیس1ت و همچنين
نيازي به تعريف پيش نمونه تابع نميباشد.
تابع بازگشتي ()recursive functions
توابع بازگشتي يا recursiveتوابعي هستند كه
وقتي احضار شوند باعث ميشوند كه خود را احضار نمايند.
نحوه محاسبه فاکتوریل از طریق تابع بازگشتی
n != 1*2*3*…*(n-1) *n
! f(n) = n
اگر n=0
در غير اينصورت
1
)n *f(n-1
= )f(n
n!= 1* 2* 3* … *(n-2) *(n1) *n
n!=(n-1)! *n
در اسالید بعد تابع بازگشتی مورد نظر پیاده سازی شده است.
تابع بازگشتی محاسبه فاکتوریل
#include <iostream.h>
long int factorial(int) ;
int main( )
{
int n ;
cout << n= ;
cin >> n ;
cout << endl << factorial = << factorial(n) << endl;
return 0 ;
}
long int factorial(int n)
{
if(n<=1)
return(1);
else
return(n *factorical(n-1) ) ;
}
نحوه محاسبه nامین مقدار دنباله فیبناکی از طریق تابع بازگشتی
:د1ن1با1له ف11یبناکی … 0 , 1, 1, 2, 3, 5, 8, 13, 21 , 34,
اگر 0
n=1
اگر 1
n=2
=) =fib(nجمله nام
در غير اينصورت
در اسالید بعد تابع بازگشتی مورد نظر پیاده سازی شده است.
)fib(n-1)+fib(n-2
.) را مشخص و نمايش ميدهدfibonacci( امين مقدار دنبالة فيبناكيn برنامهزير
#include <iostream.h>
long int fib(long int); // forward declaration
int main( )
{
long int r ;
int n ;
cout << Enter an integer value << endl ;
cin >> n ;
r = fib(n) ;
cout << r << endl ;
return 0 ;
}
long int fib(long int n)
{
if(n = = 1 || n= = 2)
return 1 ;
else
return(fib(n-1) + fib(n-2) ) ;
}
.برنامه زير يك خط متن انگليسي را گرفته آنرا وارون نموده نمايش ميدهد
#include <iostream.h>
void reverse(void) ; // forward declaration
int main( )
{
reverse( ) ;
return 0 ;
}
void reverse(void)
// read a line of characters and reverse it
{
char c ;
if(( c=cin.get( )) != \n ) reverse( );
cout << c ;
return ;
}
استفاده از آرايهها بعنوان پارامتر تابع مجاز است.
در اسالید بعد به یک مثال توجه نمایید.
. را بعنوان پارامتر ميگيردa آرايهmodify در برنامه زير تابع
#include <iostream.h>
void modify(int [ ] ); // forward declaration
int main( )
{
int a[5] ;
for(int j=0; j<=4; ++j)
a[ j ] = j+1 ;
modify(a) ;
for(j=0; j<5; ++j)
cout << a[ j ] << endl ;
return 0 ;
}
void modify(int a[ ]) // function definition
{
for(int j=0; j<5; ++j)
a[ j ] += 2 ;
for(j=0; j<5; ++j)
cout << a[ j ] << endl ;
return ;
}
1
2
3
4
5
3
4
5
6
7
خروجی:
در ص1ورتيكه آراي1ه بيش از ي1ك بع1د داشت1ه باش1د
بعدهاي دومب1ه بع1د بايس1تي در تعري1ف تاب1ع و پيش
نمونه تابع ذكر گردد.
در اسالید بعد به یک مثال توجه نمایید.
#include <iostream.h>
void printarr(int [ ][ 3 ]);
int main( )
{
int arrl [2][3] = { {1,2,3}, {4,5,6} };
arr2 [2][3]= {1,2,3,4,5};
arr3 [2][3]={ {1,2}, {4} };
printarr(arr1);
cout << endl ;
printarr(arr2);
cout << endl ;
printarr(arr3);
return 0 ;
}
void printarr(int a[ ][3] )
{
for(int i=0; i<2; i++)
{
for(int j=0; j<3; j++)
cout << a[ i ][ j ] << ;
cout << endl ;
}
}
: خروجی
1
4
1
4
1
4
2
5
2
5
2
0
3
6
3
0
0
0
توابع درون خطي ()inline
كلمه inlineبدين معني است كه به كامپيلر دستور ميدهد كه
يك كپي از دستورالعلمهاي تابع در همان جا (در زمان مقتضي)
توليد نمايد تا از احضار تابع ممانعت بعمل آورد.
اشکال توابع inline
بجاي داشتن تنها يك كپي از تابع ،چند كپي از دستورالعملهاي تابع در
برنامه اضافه ميشود كه باعث بزرگ شدن اندازه يا طول برنامه ميشود.
بنابراين از inlineبراي توابع كوچك استفاده ميگردد.
مثالی از توابع درون خطی
#include <iostream.h>
inline float cube(const float s) {return s*s*s; }
int main( )
{
float side ;
cin >> side ;
cout << side << cube(side) << endl ;
return 0 ;
}
انتقال پارامترها از طريق ارجاع
تاكنون وقتي تابعي را احضار ميكرديم يك كپي از مقادير آرگومانها درپارامترهاي متناظر
قرار ميگرفت .این روش احضار بوسيله مقدار يا call by valueناميده شد.
در انتقال پارامترها از طريق ارجاع در حقيقت حافظه مربوط به آرگومانها و پارامترهاي متناظر
بصورت اشتراكي مورد استفاده قرار ميگيرد .اين روش call by reference
ناميده ميشود .
انتقال پارامترها از طريق ارجاع
در اين روش پارامترهائي كه از طريق call by referenceعمل مينمايند در
پيش نمونه تابع قبل از نام چنين پارامترهائي از & استفاده ميشود.واضح است
كه در تعريف تابع نيز بهمين طريق عمل ميشود.
#include <iostream.h>
int vfunct(int); // for
void rfunct (int &) ;
int main( )
{
int x=5, y=10;
cout << x << endl << vfunct(x) << endl << x << endl ;
cout << y << endl ;
rfunct(y) ;
cout << y << endl ;
return 0 ;
}
int vfunct(int a)
{
return a *= a ;
}
void rfunct(int &b)
{
b *= b ;
}
: مثال
x
y
5
10
5
خروجی:
2
. تغییر نمی کندx مقدار آرگومان
5
0
5
1
x
y b
5
10
100
: ادامه خروجی
100
نکته :
call
وقت111ي پارامتري بصورت by
referenceاعالن ميگردد اي1ن بدان معن1ي
اس1ت ك1هب1ا تغيير مقدار اي1ن پارامت1ر در تاب1ع احضار
شده مقدار آرگومان متناظر نيز تغيير مينمايد.
. دو مقدار اعشاري را مبادله مينمايدfswap برنامهزير با استفاده از
#include <iostream.h>
void fswap(float & , float & );
int main( )
{
float a=5.2, b=4.3;
cout << a << endl << b ;
fswap( a , b) ;
cout << a << endl << b ;
return 0 ;
}
void fswap(float &x , float & y)
{
float t;
t=x;
x=y;
y=t;
}
كالسهاي حافظه ()storage classes
متغيرها بدو طريق متمايز مشخص ميشوند يكي بوسيله نوع ( )typeآنها و ديگري بوسيله
كالس حافظه آنها .نوع متغير قب ً
ال اشاره شده بعنوان مثال . . . ، int ، float ، doubleولي كالس
حافظة يك متغير در مورد طول عمر و وسعت و دامنة متغير بحث مينمايد.
در اسالید بعد به انواع کالس حافظه می پردازیم.
:بطور كلي كالس حافظه متغيرها به چهار دستة تقسيم ميگردد
.1
.2
.3
.4
automatic
static
external
register
متغيرهاي automaticدر درون يك تابع تعريف ميشوند و در تابعي كه اعالن
ميشود بصورت متغيرهاي محلي براي آن تابع ميباشند .حافظه تخصيص داده
شده به متغيرهاي automaticپس از اتمام اجراي تابع از بين مي رود بعبارت
ديگر وسعت و دامنة متغيرهاي از نوع automaticتابعي ميباشد كه متغير در آن
اعالن گرديده است.
متغيرهاي staticنيز در درون توابع تعريف ميشوند و از نظر وسعت و دامنه شبيه
متغيرهاي automaticهستند ولي در خاتمة اجراي تابع ،حافظه وابسته به اين نوع
متغيرهـــا از بين نميرود بلكه براي فراخواني بعدي تابع باقي ميماند.
در اسالید بعد به یک مثال از کاربرد این نوع کالس حافظه می پردازیم.
: مثال
#include <iostream.h>
// program to calculate successive fibonacci numbers
long int fib(int) ;
int main( )
{
int n ;
cout << how many fibonacci numbers? ;
cin >> n ;
cout << endl ;
for(int j=1; j<=n; ++j )
cout << j << << fib(j) << endl ;
return 0 ;
}
long int fib(int count)
{
static long int t1 = 1, t2=1;
long int t ;
t =(count <3) ?1 : t1 + t2 ;
t2 = t1 ;
t1 = t ;
return(t) ;
}
بايستي توجه داشت كه اگر در
توابع به متغيرهاي از نوع
مقدار اوليه تخصيصstatic
ندهيم مقدار صفر بصورت
اتوماتيك براي آنها در نظر
.گرفته ميشود
متغيرهاي از نوع externalمتغيرهائ1ي هس1تند ك1ه در بيرون از تواب1ع اعالن ميشون1د
و وس1عت و دامن1ه فعاليت آنه1ا كليه توابع1ي ميباش1د ك1ه در زي1ر دس1تور اعالن متغير
قرار دارد.
در اسالید بعد به یک مثال از کاربرد این نوع کالس حافظه می پردازیم.
#include <iostream.h>
int w; // external variable
functa(int x, int y)
{
cout << w ;
w=x+y;
cout << endl << w << enld;
return x%y ;
}
int main( )
{
int a, b, c, d;
cin >> a >> b ;
c=functa(a, b) ;
d=functa(w, b+1);
cout << endl << c << endl << d << endl << w ;
return 0 ;
}
: مثال
بايستي توجه داشت كه اگر در
توابع به متغيرهاي از نوع
مقدار اوليهexternal
تخصيص ندهيم مقدار صفر
بصورت اتوماتيك براي آنها در
.نظر گرفته ميشود
وقت1ي متغيري از نوع registerاعالن ميشود از كامپيوت1ر عم ً
ال درخواس1ت
ميشود كه به جاي حافظه از يكي از رجيسترهاي موجود استفاده نمايد.
کاربرد کالس register
معمو ً
ال از نوع رجيستر براي شاخصهاي دستور تكرار و يا انديسهاي آرايهها
استفاده ميشود .بايستي توجه داشت كه متغيرهاي از نوع رجيستر قابل استفاده
دردستور cinنميباشند
سربارگذاري توابع ()function overloading
در ++Cاين امكان وجود دارد كه دريك برنامه بتوانيم از چند توابع هم نام
استفاده نمائيم مشروط بر اين كه پارامترهاي اين توابع متفاوت باشند( .از
نظر تعداد پارامتر و يا نوع پارامترها و ترتيب آنها)
: مثال
#include <iostream.h>
float addf(float , int);
int addf(int , int);
int main( )
{
int a=5, b=10 ;
float d=14.75 ;
cout << addf(a , b) << endl;
cout << addf(d , b) << endl;
return 0 ;
}
int addf(int x, int y)
{
return x+y ;
}
float addf(float x, int y)
{
return x+y ;
}
فصل هفتم
ساختار ها و اشاره گرها
فهرست مطالب فصل هفتم
.1
.2
.3
.4
.5
.6
.7
ساختارها
ها Union
) ( Pointerاشاره گرها
تعریف آرایه
آرایه های دو بعدی و اشاره گرها
) newتخصیص حافظه بصورت پویا ( عملگر
رشته ها و توابع مربوطه
ساختارها
ساختارها ش1بيه آرايهه1ا بوده بدين صورت ك1ه يك نوع داده گروهي است ك1ه فضاي
پيوس1ته از حافظ1ه اص1لي را اشغال مينمايد .ام1ا عناص1ر س1اختار الزاماً از ي1ك نوع
نميباشن1د بلك1ه اعضاي ي1ك س1اختار ميتوانن1د از نوعهاي مختلف1ه از قبيل char ،
… ، int ، floatباشند.
ر6تعريف ساختا
نام ساختار
struct time
{
int hour ; // 0 – 23
int minute ; // 0 –
59
int second; //
};
اعضا ساختار
:مثال
{ struct account
; int acc_no
;char acc_type
; ]char name[80
; float balance
;}
ساختار accountداراي چهار عضو ميباشد.
acc_noش1مار1ه 1ح1ساباز ن1وع int
acc_typeن1وع ح1ساباز ن1وع char
م1شخصاتص1اح1بح1ساباز ن1وع ر1ش1تة 80ك11رك1تري
name
balanceم1انده 1ح1ساباز ن1وع float
: به دو صورت می توان اعالن یک متغیر از نوع ساختار را نمایش داد
روش اول:
struct account {
int acc_no;
char acc_type;
char name[80];
float balance;
} cust1, cust2, cust3;
روش دوم:
struct account {
int acc_no ;
char acc_type;
char name[80];
float balance;
};
account cust1, cust2, cust3;
به ساختارها ميتوان مقدار اوليه نيز تخصيص داد
;}account cust = {4236, r, Nader Naderi , 7252.5
دسترسي به عناصر يك ساختار
.
بمنظور دسترسي به عناصر يك ساختار از عملگر استفاده
.ميگردد .عملگر .جزء عملگرهاي يكتائي ميباشد
: مثال
cust .acc_no = 4236
cust .acc_type = r
cust . name = Nader Naderi
cust . balance = 7252.5
نکته:
.عضو يك ساختار خود ميتواند يك ساختار ديگر باشد
struct date {
int month;
int day;
int year;
};
struct account {
int acc_no ;
char acc_typer;
char name[80];
float balance ;
date lastpay ; };
account x, y ;
x.lastpay.day
x.lastpay.month
x.lastpay.year
اگرداشته باشيم
بوسيلهlastpay آنگاه عضو
.مشخص ميگردد
:نکته
ميتوان آرايهاي تعريف نمود كه هر عضو آن يك ساختار باشد و حتي به آنها مقادير اوليه تخصيص نمود.
{ struct struc1
;]char name[40
;int pay1
; } ;int pay2
strucl cust[ ]= {nader, 3000 , 40000,
sara, 4200, 6000,
susan, 3700, 25000,
;} saman, 4800 , 2000,
دو عدد مختلط را ميگيرد و،برنامه زير هر عدد مختلط را بصورت يك ساختار در نظر گرفته
مجموع آنها را مشخص و نمايش ميدهد.
#include <iostream.h>
int main( )
{
struct complex{
float a;
float b; } x, y, z;
cout << enter 2 complex numbers << endl ;
cin >> x.a>>x.b ;
cout << endl;
cin >> y.a >> y.b;
z.a = x.a + y.a ;
z.b = x.b + y.b ;
cout << endl << z.a << << z.b;
return 0 ;
}
x = a + ib i2= -1 كه1ي1طور11ب
y = c + id
x+y =(a+c) + i(b+d)
union
ب11اشد .ب11اا1ي1نت11فاو1تك11ه
unionاز ن11ظر س1اخ1تار1يش1بيه structم1ي
ع1ضوهائ1يك11ه ت11شكيل unionم1يدهد ه1مگياز ح1اف1ظه م1شترك1يدر
1ن1س1تفاد1ه 1از unionب11اعث
1ي11ماي1ند .ب11نابرا1ي ا
ك11ام1پيوترا1س1تفاد1ه 1م ن
1ي11ردد.
ص1رف 1هج1وئ1يدر ح1اف1ظه م گ
مثال :
union id
{
;]char color [10
;int size
;} x , y
ه1ر كدام از متغيرهاي xو yي1ك رشت1ه
10كركتري ي11ا ي11ك مقدار از نوع int
ميباش1د وكامپيوت1ر ي1ك بلوك حافظ1ه ك1ه
بتوان1د رشت1ه 10كركتري رادر خود جاي
ده1د ،براي colorو sizeدر نظ1ر
ميگيرد.
: مثال
union xpq
{
int x ;
char y[2] ;
}p;
x
بايت دوم
y[1]
بايت اول
y[0]
اشارهگرها ()Pointers
دادههائ1ي ك1ه در كامپيوت1ر در حافظ1ه اص1لي ذخيره ميشون1د
بايتهاي متوالي از حافظه بسته به نوع dataاشغال ميكنند.
نوع داده
حافظه الزم
مقادير
2بايت
32767تا –32768
4بايت
2147483647تا –2147483648
1بايت
يك كاركتر
char
4بايت
3.4e38ت11ا 1.2e-38
float
8بايت
1.8e308ت11ا 2.2e-308
int
long int
double
اشارهگرها ()Pointers
ب1ا داشت1ن آدرس داده در حافظ1ة اص1لي ميتوان براحت1ي ب1ه آ1ن داده
دس1ترسي پيدا نمود و از طرف ديگ1ر آدرس ه1ر داده در حافظ1ه آدرس
بايت شروع آن داده ميباشد.
;int x = 613
0
1
2
3
4
5
6
7
613
نکته :
در كامپيوتر آدرسها معمو ً
ال دو بايت اشغال مينمايند .اگر آدرس xرا در pxقرار دهيم آنگاه ميگوئيم كه pxبه
xاشاره مينمايد.
x
px
آدرس متغير xرا بوسيله & xنشان ميدهيم و عملگر & را عملگر آدرس مينامند.
int x , *px
; px = &x
:مثال
; int y , x , *px
x
px
26
حال اگر دستور العمل ; x += 10را بدهيم:
x
px
36
حال اگر دستورالعمل * ; px = *px + 7بدهيم.
x
43
px
; x = 26
; px = &x
آرایه یک بعدی و اشاره گرها
اولين عنصر آرايه بوسيله ] x[0مشخص ميشود.
آدرس اولين عنصر آرايه بوسيله &] x[0يا بوسيله xمشخص ميشود.
آدرس iامين عنصر آرايه بوسيله &] x[i-1يا بوسيله ) x(i-1مشخص ميشود.
دو دستورالعمل زير با هم معادلند .
از طرف ديگر اگر داشته باشيم
دو دستورالعمل زير معادلند.
; x[ i ] = 82.5
*(; 82.5 = )x + i
];float x[10
;float *p
]; p = &x[2
; p= x + 2
0 26.5 x
1
24.7
2
5.8
3 -73.2
4 69.0
5 100.5
6 -13.24
7 424.3
8 187.8
9 358.2
ساختارها و اشاره گرها
ميتوان اشارهگري را تعريف نمود كه به اولين بايت يك ساختار ( )structاشاره نمايد.
struct
struc1
{
x
int
fl o at
ch ar
int
px
a
b
c
d
; int a
float
;b
char
;c
; int d
; } x, *px
; px = &x
عبارت x.aمعادل pxaمعادل (* a.)pxميباشد.
آرايههاي دوبعدي و اشارهگرها
يك آرايه دوبعدي بصورت تعدادي آرايه يك بعدي ميتوان تعريف نمود.
اگر xيك ماتريس 5سطري و 4ستوني از نوع اعشاري باشد قب ً
ال اين ماتريس را با
];float x[5][4
معرفي كرديم .حال با استفاده از اشارهگرها بصورت زير معرفي نمائيم:
;]float (*x)[4
آرايههاي دوبعدي و اشارهگرها
;]float (*x)[4
آرايه يك بعدي اول
x
آراي ه يك بعدي دوم
()x+1
آرايه يك بعدي سوم
()x+2
آرايه يك بعدي چهارم
()x+3
آرايه يك بعدي پنجم
()x+4
عنصري از نوع5 در برنامه زير يك آرايهint ايجاد شده و مقادير عناصر آرايه را به چهار طريق نمايش ميدهد.
#include
<iostream.h>
#include
<conio.h>
int main( )
{
int x[ ]={12, 25, 6, 19, 100};
clrscr( );
int *px=x;
//مايد11ي1
ه م ن1ي1لآرا1نصر او1ه ع11 ب1ه1شار1سا1
، ندي1ن1
دو ا11ه ب1ي1ام آرا1ن
for(int i=0; i<=4; i++)
cout << *(x+i) << endl;
//the second method
for(i=0; i<5; i++)
cout << x[ i ] << \n;
//the third method
for(i=0; i<=4; i++)
cout << px[ i ]<<endl;
//the forth method
for(i=0; i<=4; i++)
cout << *(px+i)<<endl;
return 0; }
تخصيص حافظه به صورت پويا يا (عملگر )new
از عملگ1ر newبراي تخيص1يص حافظ1هب1ه ص1ورت پوي1ا
م1ی توان اس1تفاده نمود ،در ضم1ن ميتوان براي
بلوك1ي از حافظ1ه ك1ه تخص1يص يافت1ه مقدار اوليه تعیین
نمود.
براي تخصيص حافظه باندازه 20مقدار از نوع intكه اشارهگر ptxبه آن اشاره نمايد بصورت زير عمل ميشود.
;int *ptx
;]ptx = new int [20
ptxبه اولين داده از نوع intاشاره مينمايد.
1ي11مايد.
ptx+iب11ه i+1ا1م1ينع1نصر از ف11ضايپ11يوس1تها1شار1ه 1م ن
سپس آنرا مقدار داده و مجموع مقادير، عنصري از نوع اعشاري در حافظه ايجاد نمودهn برنامه زير يك فضاي
.رامشخص و نمايش ميدهد
#include
<iostream.h>
int main( )
{
int n;
float *ptr, tot = 0.0;
cout << enter a value for n << endl;
cin >> n;
ptr=new float [n];
for(int j=0; j<n; ++j)
{
cin >> *(ptr + j);
cout << \n ;
}
for(j=0; j<=n-1; ++j)
tot += *(ptr + j);
cout << tot ;
// in order to free the space use
delete[ ] ptr ;
return 0;
}
. عنصري از ساختار را ايجاد مينمايدn برنامه زير آرايههاي
#include
<iostream.h>
#include
<conio.h>
int main( )
{
struct rec {
float a;
int b; } ;
int n;
rec *ptr;
clrscr( );
cout << how many records? \n
cin >> n ;
ptr = new rec[n];
for(int i=0; i<n; ++i) {
cout <<((ptr+i) b=i) << ;
cout <<((*(ptr +i)).a = i+0.5) << endl ;
delete [ ] ptr;
return 0 ; }
. جابهجا مينمايدswap برنامه زير دو مقدار اعشاري را گرفته مقادير آنها را بكمك تابع
#include
<iostream.h>
#include
<conio.h>
void swap(float *, float *);
int main( )
{
float a,b;
cin >> a >> b;
cout << a << endl << b << endl ;
return 0;
}
void swap(float *px , float *py)
{
float t;
t = *px;
*px = *py;
*py = t ;
return;
}
رشتهها و توابع مربوطه
رشتهها در ، ++Cآرايهاي از كركترها ميباشند كه با كركتر \0ختم ميشوند.
char name[ ]=
;sara
s
a
r
a
\0
رشته و اشاره گر
هر رشته از طريق اشارهگري به اولين كركتر آن در دسترس قرار ميگيرد .آدرس يك رشته ،آدرس كركتر
اول آن ميباشد .به رشتهها ميتوان مقدار اوليه تخصيص داد.
;*name = sara
char
. رشته در نظر گرفته آنها را بترتيب حروف الفباء مرتب نموده نمايش ميدهد5 برنامه ذيل پنج اسم را بصورت
#include
<iostream.h>
#include
<string.h>
void sort(char *[ ]);
int main( )
{
char *name[5] = {sara, afsaneh, babak, saman, naser };
sort(name);// display sorted strings
for(int i=0; i<5; ++i)
cout << name[ i ] << endl;
return 0; }
sort(char *name[ ])
{
char *t;
for(int i=0; i<4; ++i)
for(int j=i+1; j<5; ++j)
if(strcmpi(name[ i ], name[ j ]> 0)
{// interchange the two strings
t= name[ i ];
name[ j ] = name[ i ];
name[ i ] = t ;}
return ; }
تابع )strcmpi(s1, s2
رشتههاي s1و s2را ب1ا ه1م مقايس1ه نموده (بدون توج1ه ب1ه حروف كوچ1ك و بزرگ) اگ1ر
رشت1ه s1برابرب1ا رشت1ه s2باش1د مقدار ص1فر و اگ1ر رشت1ه s1كوچكت1ر از رشت1ه s2باش1د
يك مقدار منفي در غير اينصورت يك مقدار مثبت بر ميگرداند.
تابع ) strcmp(s1, s2
رشتههاي s1و s2راب1ا ه1م مقايس1ه نموده اگ1ر s1برابرب1ا s2باش1د مقدار ص1فر و اگ1ر
رشت1ه s1كوچكت1ر از رشت1ه s2باش1د ي1ك مقدار منف1ي در غير اينص1ورت ي1ك مقدار
مثبت برميگرداند.
تابع ) strncmp(s1, s2,n
حداكث1ر nكركت1ر از رشت1ة s1راب1ا nكركت1ر از رشت1ة s2مقايس1ه نموده در ص1ورتيكه
s1كوچكت1ر از s2باش1د ي1ك مقدار منف1ي ،اگ1ر s1مس1اويب1ا s2باش1د مقدار ص1فر در
غير اينصورت يك مقدار مثبت برميگرداند.
تابع (strcat(s1, s2
دو رشت1ة s1و s2را بعنوان آرگومان گرفت1ه رشت1ة s2را ب1ه انتهاي رشت1ة s1اضاف1ه
مينمايد .كركت1ر اول رشت1ة s2روي كركت1ر پايان1ي \0رشت1ة s1نوشت1ه ميشود ونهايت ًا
رشتة s1را برميگرداند.
تابع (strncat(s1, s2,n
دو رشت ه s1و s2ومقدار ص1حيح و مثب1ت nرا بعنوان آرگومان گرفت1ه ،حداكث1ر n
كركت1ر از رشت1ة s2را در انتهاي رشتة s1كپ1ي مينمايد .اولين كركت1ر رشت1ه s2روي
كركتر پاياني \0رشتة s1مينويسد ونهايتاً مقدار رشتة s1را برميگرداند.
تابع (strlen(s
رشتة sرا بعنوان آرگومان گرفته طول رشته را مشخص مينمايد.
تابع (strlen(s
رشتة sرا بعنوان آرگومان گرفته طول رشته را مشخص مينمايد.
تابع )strcpy(s1,s2
دو رشتة s1و s2را بعنوان آرگومان گرفته رشتة s2را در رشتة s1كپي مينمايد و
نهايت ًا مقدار رشتة s1را بر ميگرداند.
تابع (strncpy(s1, s2,n
دو رشتة s1 , s2و مقدار صحيح و مثبت nرا بعنوان آرگومان گرفته ،حداكثر n
كركتر را از رشتة s2در رشتة s1كپي نموده ،نهايتاً مقدار رشتة s1را برميگرداند.
براي استفاده از توابع مربوط به
رشتهها بايستي حتماً در ابتدا برنامه
>include <string.h#را
قرار دهيم.
: مثال
#include
<iostream.h>
#include
<string.h>
#include
<conio.h>
int main( )
{
char *s1= happy birthday;
char *s2= happy holidays ;
clrscr( );
cout << strcmp(s1, s2) << endl;
cout << strncmp(s1, s2, 7) << endl ;
return 0;
}
: مثال
#include
<iostream.h>
#include
<string.h>
#include
<conio.h>
int main( )
{
char *s = sara;
clrscr( );
cout << strlen(s);
return 0; }
. می باشدstrcmp تابع زیر معادل تابع کتابخانه
int nikstrcmp(char s[] , char t[] )
{
int i=0;
while (s[i]==t[i] )
if ( s[i++]=‘\0’ )
return 0;
return (s[i]-t[i]);
}
فصل هشتم
برنامه نویس شی گرا
فهرست مطالب فصل هشتم
.1تعریف شی گرایی
(polymorphism) .2چند ریختی
.3خاصیت ارث بری
(stack) .4پشته
.5ایجاد شی
.6ارث بری
.7سازنده ها و نابود کننده ها
.8توابع دوست
.9کالس های دوست
.10توابع سازنده پارامتر دار
.11توابع سازنده یک پارامتری
.12
.13
.14
.15
.16
.17
.18
.19
.20
.21
staticعضوهای
کالسهای تودرتو
کالس های محلی
objectاستفاده از
ها بعنوان پارامترهای تابع
برگشت اشیاء
انتساب اشیاء
آرایه اشیاء
اشاره گر به اشیاء
اشاره گر this
توابع مجازی و پلی مرفیسم
تعریف شی گرایی
برنامه نويسي شئ گرا يا oopيك روش جديد برنامه
ي
نويسي ميباشد كه در آن از ويژگ
ساختيافته همراه با چند ويژگيهاي قوي جديد استفاده
ميشود .زبان برنامه نويسي ++Cامكان استفاده از oop
را به راحتي فراهم مينمايد.
تعریف شی گرایی
در ، oopبطور كلي مساله به تعدادي زيرگروه قطعات
مربوط بهم شكسته ميشود كه براي هر زير گروه code
و dataتهيه شده و نهايت ًا اين زيرگروهها تبديل به
unitها يا واحدهائي ميشود كه ( objectsيا اشياء)
ناميده ميشوند.
نکته مهم :
تمام زبانهاي برنامه نويسي شيگرا داراي سه
خصوصيت مشترك زير ميباشند :
الف( encapsulation :محصورسازي)
ب( polymorphism :چندريختي)
ج( inheritance:ارث بري)
محصورسازی () Encapsulation
محصورسازي مكانيزمي است كه codeو dataرا بهم وصل نموده و هر دوي آنها را از استفادههاي
غيرمجاز مصون نگه ميدارد .شي يك مؤلفه منطقي است كه dataو codeرا محصور نموده و code
باعث دستكاري و پردازش dataميشود.
ي
( polymorphismچ6ند ر6يخت )
چند ريختي مشخصهاي است كه بيك وسيله امكان ميدهد كه باتعدادي
.از سيستمها يا عميات يا دستگاهها ،مورد استفاده قرار گيرد
6ري
( inheritanceار6ثب) 6
ارث بري فرآيندي است كه بوسيله آن يك شي ( )objectميتواند
خاصيتهاي شي ديگري را دارا شود.
پشته ()stack
پشته ساختاري است كه داراي خاصيت last in first outميباشد .پشته فضاي پيوسته در حافظه اشغال مينمايد.
عملياتي كــه روي پشته انجام ميشوند عبارتند از :
الف ،push :كه باعث ميشود يك عنصر وارد پشته شده.
ب ، pop :كه باعث ميشود يك عنصر از پشته خارج گردد.
ايجاد شي ()object
بمنظور ايجاد ي1ك ش1ي بايس1تي از كلم1ة رزروشده
classاس1تفاده نمود class .از نظ1ر ظاه1ر ش1بيه
س1اختار ي1ا structميباشد .پشت1ه را بعنوان ي1ك
objectميتوان در نظ1ر گرف1ت ك1ه dataآ1ن
شام1ل ي1ك آراي1ه و ي1ك ، tosو عمليات1ي ك1ه روي
اين objectانجام ميشود عبارتست از push،
initialize ، popكردن پشته.
در اسالید بعد مثالی از نحوه ایجاد شی آورده شده است.
مثال :
#define SIZE 100
// this creates the class stack.
{ class stack
private :
;]int stck[SIZE
;int tos
public:
;) (void init
;)void push(int i
;) (int pop
بدي1ن معن1ي اس1ت ك1ه stckو
tosبوس1يله توابع1ي ك1ه عض1و
objectنباشن11د غير قاب11ل
دس1ترسي هس1تند .و اي1ن يك1ي از
روشهاي محص11ور س11ازي اقالم
دادههاست.
بدي1ن معن1ي اس1ت ك1ه بوس1يله س1اير
قطعات برنام11ه قاب11ل دس11ترسي
ميباشد.
;}
نکته :
فق1ط تواب1ع عض1و ميتوانن1د ب1ه متغيرهاي عض1و از نوع private
دس1ترسي داشت1ه باشند .بايس1تي توج1ه داش1ت ك1ه اگ1ر نوع عضوي
مشخص نگردد آن عضو به صورت اتوماتيك privateمی باشد.
نحوه تعریف تابع عضو یک کالس
)void stack : : push(int i
{
{ ) if(tos = = SIZE
;cout << stack is full.
;return
}
; stck[tos]= i
; tos ++
}
عملگ1ر : :مشخ1ص مينماي1د ك1ه تاب1ع متعل1قب1ه كدام objectميباشد .عملگ1ر : :عملگ1ر
scope resolutionناميده ميشود.
: stack برنامه کامل
#include <iostream.h>
#define SIZE 100
// this creates the class stack.
class stack {
int stck[SIZE];
int tos;
public:
void init(int i);
int pop( );
void push(int i);
};
void stack : : init( )
{
tos = 0 ;
}
void stack : : push(int i)
{
if(tos = = size) {
cout << stack is full. ;
return ;
}
stck[tos] = i ;
tos ++ ;
}
int stack : : pop( )
{
if(tos = = 0) {
cout << stack underflow. ;
return 0 ; }
tos - - ;
return stck[tos];
}
int main( )
{
stack st1, st2; // create two objects
st1. init( );
st2.init( );
st1.push(1);
st2.push(2);
st1.push(3);
st2.push(4);
cout << st1.pop( ) << endl;
cout << st1.pop( ) << endl;
cout << st2. pop( ) << endl;
cout << st2. pop( ) << endl;
return 0; }
ارث بری
ارث بري فرآيندي است كه بوسيله آن يك شي ( )objectميتواند
خاصيتهاي شي ديگري را دارا شود.
در اسالید بعد مثالی از ارث بری آورده شده است.
مثال:
class building {
int rooms;
int floors;
int area;
public:
void set_rooms(int num);
int get_rooms( );
void set_floors(int num);
int get_floors( );
void set_area(int num);
int get_area( );
};
// house is derived from building
class house : public building {
int bedrooms;
int baths;
public:
void set_bedrooms(int num);
int get_bedrooms( );
void set_baths(int num);
int get_baths( );
};
.ت1ف گرديده اس1 تعريbuilding ا1اختمان ي1 اي بنام سobject در روبرو
ا نيز1ر بن1طح زي1ه و س1 تعدادي طبق،اختمان داراي تعدادي اطاق1ر س1ه
: از طرف ديگرتوابعي كه براي شي تعريف شده.ميباشد
ا داراي1ه تنه1هن1ف مينمائيم ك1 تعريhouse ديگري بنامobject حال
ي1ه دارای دو اقالم داده اضاف1د بلك1 ميباشbuilding ي1تمام اعضاي ش
ً ا عم1 دراينج.ي ميباشد1ع اضاف1و چهار تاب
ي1 از شhouse ي1ال ش
: ارث ميبردbuilding
نکته :
در مثال قب1ل buildingرا base classو houseرا derived classم1ی نامن1د .ش1ي houseتمام
اعضاي buildingرا دارا اس1ت بعالوه اينك1ه داراي متغيرهاي عضوي اضاف1ي bedrooms ، bathsو
همچنين تواب1ع عضوي )(set_baths()، set_bebrooms()، get_baths()، get_bedroomsنيز
ميباشد. .
سازندهها و نابودكنندهها ()constructors and destructors
1ي1ن1جام
1ت1تومات1يكاز ط1ري1قت11اب1ع ا
ي11ا م1قدار او1ل1يه داد1نب11ص1ور ا
Initialization
ش1ود ب11نام ت11اب1ع constructorي11ا ت11اب1ع س1از1نده .1ت11اب1ع س11از1نده 1ت11اب1ع
م1ي
ب11اشد.
1ي1س1تك11ه ع1ضوياز ك11السب11ود1ه 1و ه1منام ب11ا ك11السم1ي
م1خصوص ا
سازندهها و نابودكنندهها ()constructors and destructors
تاب1ع نابود كننده ي1ا ، destructorعك1س عم1ل تاب1ع س1ازنده را انجام
ميدهد .وقت1ي ك1ه شياي از بين ميرود بص1ورت اتوماتيك تاب1ع نابود كننده
آن فراخواني ميگردد.
توابع دوست ()friend functions
ب1ا اس1تفاده از كلم1ة friendاي1ن امكان وجود دارد ك1هب1ه تابع1ي ك1ه عض1و كالس
نميباش1د اجازه دس1ترسي ب1ه متغيرهاي privateكالس را داد .براي آنك1ه
تابع1ي را دوس1ت اعالن نمائيم از كلم1ه friendقب1ل از تعري1ف تاب1ع اس1تفاده
مينمائيم.
در اسالید بعد مثالی آورده شده است.
#include <iostream.h>
#include <conio.h>
class myclass {
int a,b;
public :
friend int sum(myclass x);
void set_ab(int i, int j);
};
void myclass :: set_ab(int i, int j)
{
a=i;
b=j;
}
//sum is not a member function
int sum(myclass x)
{
return s.a + x.b;
}
int main( )
{myclass n;
clrscr( );
n. set_ab(5,8);
cout << sum(n);
return 0 ; }
: مثال
نکته :
-1كالسي كه از كالس ديگر ارث ميبرد ،توابع دوست آن كالس را
به ارث نميبرند .بعبارت ديگر يك ، derived classتوابع
دوست را به ارث نميبرد.
-2توابع دوست داراي مشخصه نوع ذخيره نميباشند يعني توابع
دوست را نميتوان بصورت staticيا externalتعريف
نمود.
كالسهاي دوست ()friend classes
اين امكان وجود دارد كه يك كالس دوست كالس ديگري باشد .در چنين وضعيتي تابع دوست به
كليه اسامي privateتعريف شده در كالس ديگر دسترسي دارد.
در اسالید بعد مثالی آورده شده است.
#include <iostream.h>
class coins {
enum units {penny, nickel, dime, quarter, half_ dollar};
friend class amount;
};
class amount {
coins :: units money;
public:
void setm( );
int getm( );
} ob;
void amount :: setm( )
{
money = coins :: dime;
}
int amount :: getm( )
{
return money;
}
int main( )
{
ob.setm( );
cout << ob.getm( );
return 0 ;
}
: مثال
توابع سازنده پارامتردار
امكان انتقال آرگومانه1ا ب1ه تواب1ع س1ازنده وجود دارد .معمو ً
ال از اي1ن
آرگومانه11ا براي initializeنمودن ش11ي در زمان ايجاد آ11ن اس11تفاده
ميگردد.
در اسالید بعد مثالی آورده شده است.
: مثال
#include <iostream.h>
#include <conio.h>
class myclass {
int x, y;
public :
myclass(int i, int j) {x = i; y=j; }
void show( ) {cout << x << endl << y; }
};
int main( )
{
myclass obj( 3 , 5);
clrscr( );
obj.show( );
return 0;
}
يك پارامتري6توابع سازنده
#include <iostream.h>
#include <conio.h>
class myclass{
int x;
public:
myclass(int i) {x=i;}
int getx( ) {return x;}
};
int main( )
{
clrscr( );
myclass obj=126; //ن11نتقلك1 مi 126 ه11را ب
cout << obj.getx( );
return 0 ;
}
عضوهاي static
اگر عضو دادهاي بصورت staticاعالن گردد اين بدين معني است كه
كامپيلر فقط يك كپي از متغير مذكور را نگهداري نموده و تمام object
ها بايستي بصورت اشتراكي از آن كپي استفاده نمايند .براي اينكار
ميبايستي از كلمه staticقبل از اعالن عضو استفاده نمود.
در اسالید بعد مثالی آورده شده است.
مثال:
#include <iostream.h>
class shared{
static int a;
int b;
public :
void set(int i, int j) {a=i; b=j; }
void show( );
};
int shared :: a ;
// define a
void shared :: show( )
{
cout << static a: << a << endl;
cout << nonstatic b: << b << endl;
}
int main( )
{
shared x,y;
x.set(1,1); // set a to 1
x.show( );
y.set(4,4); // change a to 4
y.show( );
x.show( );
return 0;
}
( nested classesك66الس6هايت66ودر6تو)
ميتوان يك كالس را در يك كالس ديگر تعريف نمود.
اما بعلت اينكه در ++Cبراي كالسها خاصيت ارث
بري وجود دارد نيازي معموالً به تعريف نمودن يك
كالس در كالس ديگر نيست
ي
( local classesك66الس6هايم6حل )
وقتي كه كالسي در درون يك تابع تعريف ميشود اين
كالس فق1ط براي آ1ن تاب1ع شناخت1ه شده اس1ت و براي
تواب1ع ديگ1ر ناشناخت1ه ميباشد .چنين كالس1ي را كالس
محلي مينامند.
در مورد كالسهاي محلي رعايت نكات زير ضروري است :
.1
.2
.3
تمام توابع عضو بايستي در درون كالس تعريف گردند.
از متغيرهاي محلي ،تابعي كه كالس در آن تعريف شده نميتواند استفاده نمايد.
از متغيرهاي عضوي staticنميتوان استفاده نمود.
استفاده از objectها بعنوان پارامترهاي توابع
از objectها ميتوان بعنوان پارامترهاي توابع استفاده نمود و مكانيز م انتقال آرگومانها و پارامترها بصورت
call by valueميباشد.
برگشت اشياء ()returning objects
مقدار برگشتي يك تابع ميتواند يك objectباشد.
در اسالید بعد مثالی آورده شده است.
#include <iostream.h>
class myclass {
int i ;
public :
void set_ i(int n) { i=n;}
int get_i( ) {return i;}
};
myclass funct( ); // return an object
int main( )
{
myclass ob;
ob=funct( );
cout << ob.get_i( ) << endl;
return 0;
}
myclass funct( )
{
myclass x ;
x.set_i(1);
return x;
}
مثال:
انتساب اشياء ()object assignment
در صورتيكه دو تا objectاز يك نوع باشند
ميتوان يك objectرا بديگري انتساب نمود.
در اسالید بعد مثالی آورده شده است.
: مثال
#include <iostream.h>
#include <conio.h>
class myclass{
int i;
public:
void set_i(int n) {i=n;}
int get_i( ) {return i;}
};
int main( )
{
myclass ob1, ob2;
obl.set_i(126);
ob2= ob1; // assign data from ob1 to ob2
clrscr( );
cout << ob2.get_i( );
retrun 0 ;
}
آرايه اشياء ()array of objects
امكان استفاده از آرايه در مورد اشياء ميباشد.
بعبارت ديگر ميتوان در برنامه ها آرايهاي از objectها
داشته باشيم.
در اسالید بعد مثالی آورده شده است.
مثال:
#include <iostream.h>
#include <conio.h>
class myclass{
int i;
public:
void set_i(int j) {i=j;}
int get_i( ) {return i;}
};
int main( )
{
clrscr( );
myclass ob[3];
int i;
for(i=0; i<3; i++) ob[ i ].set_i(i+1);
for(i=0; i<3; i++)
cout << ob[ i ].get_i( ) << endl;
return 0;
}
اشارهگر به اشياء () pointers to objects
در مورد اشياء نيز از اشارهگرها نيز ميتوان استفاده نمود.
از عملگر در اين مورد استفاده ميشود.
در اسالید بعد مثالی آورده شده است.
: مثال
#include <iostream.h>
#include <conio.h>
class myclass{
int i ;
public:
myclass( ) {i=0;}
myclass(int j) {i=j;}
int get_i( ) {return i;}
};
int main( )
{
myclass ob[3]= {1, 2, 3};
myclass *p;
int i;
p=ob; // get start of array
for(i=0; i<3; i++)
{
cout << p get_i( ) << endl;
p++; // point to next object
}
return 0;
}
اشارهگر )this (this pointer
ه ر تابع عضو يك كالس داراي يك پارامتر مخفي
بنام this pointerميباشد this .اشاره به object
خاصي مينمايد.
در اسالید بعد مثالی آورده شده است.
#include <iostream.h>
class pwr {
double b;
int e;
double val;
public:
pwr(double base, int exp);
double get_pwr( ) {return val;}
};
pwr :: pwr(double base, int exp)
{
this b=base;
this e=exp;
this val =1;
if(exp = = 0) return;
for(; exp > 0 ; exp )
this val = this val *this b;
}
int main( )
{pwr x(4.0, 2) , y(2.5, 1), z(5.7,0);
cout << x.get_pwr( ) << ;
cout << y.get_pwr( ) << ;
cout << z.get_pwr( ) << \n ;
return 0; }
: مثال
توابع مجازي و پلي مرفيسم ()virtual functions
تابع مجازي ،تابعي است كه در base classتعريف شد و
بوسيله derived classتغير داده ميشود .براي اعالن يك
تابع مجازي بايستي از كلمه virtualاستفاده نمائيم.
تغير تابع در كالس مشتق روي تابعي كه در كالس پايه () base class
تعريف شده انجام ميشود.
در اسالید بعد مثالی آورده شده است.
#include <iostream.h>
class base {
public :
virtual void vfunc( ){cout << this is base s vfunc( ) \n ;}
};
class derived1 : public base {
public:
void vfunc( ) {cout << this is derived1 s vfunc( ) " << endl ; }
};
class derived2: public derived1 {
public:
/*vfunc( ) not overridden by derived2.In this case, since derived2 is derived
from derived1, derived1 s vfunc( ) is used */ } ;
int main( )
{
base *p, b;
derived1 d1;
derived2 d2;
//point to base
p = &b;
p vfunc( ); // access base's vfunc
// point to derived1
p=&d1;
p vfunc( ); //access derived1's vfunc( )
//point to derived2
p = &d2;
p vfunc( ); // use derived1 s vfunc( )
return 0 ; }
: مثال