271
ه ت ف ر ش ی پ ی ه ساز م ا رن ب ه ت ف ر ش ی پ ی ه ساز م ا رن ب: ف ل و م: ف ل و م ر مه! ک# ی ن وش# یش داز د ی ه م ر مه! ک# ی ن وش# یش داز د ی ه م ام دزش : ن ام دزش : ن) ر0 ب و# ی پ م ی کا س د ی ه م ه0 ت ش ز( ه ت ف ر ش ی پ ی مه ساز ا رن ب) ر0 ب و# ی پ م ی کا س د ی ه م ه0 ت ش ز( ه ت ف ر ش ی پ ی مه ساز ا رن ب ی : س دز واحداد عد0 ت ی : س دز واحداد عد0 ت3 3 واحد واحد دها :# لان س ده ا یC پ ک ه# ت ه0 ت ام ن دها :# لان س ده ا یC پ ک ه# ت ه0 ت ام ن ر مه! ک# ی ن وش# یش داز د ی ه م ر مه! ک# ی ن وش# یش داز د ی ه م

barname sazi pishrafteh 2 C++

Embed Size (px)

DESCRIPTION

barname sazi pishrafteh 2 C++

Citation preview

Page 1: barname sazi pishrafteh 2 C++

برنامه سازی پیشرفتهبرنامه سازی پیشرفته

مولف : مولف : مهندس داریوش نیک مهرمهندس داریوش نیک مهر

نام درس : نام درس : برنامه سازی پیشرفته ) رشته مهندسی کامپیوتر ( برنامه سازی پیشرفته ) رشته مهندسی کامپیوتر (

تعداد واحد درسی : تعداد واحد درسی : واحد واحد33

نام تهیه کننده اسالیدها :نام تهیه کننده اسالیدها : مهندس داریوش نیک مهر مهندس داریوش نیک مهر

Page 2: barname sazi pishrafteh 2 C++

فهرست مطالبفهرست مطالب

++Cفصل اول : مقدمات زبان فصل دوم : ساختار های تصمیم گیری و تکرار

فصل سوم : سایر ساختار های تکرارفصل چهارم : اعداد تصادفی

فصل پنجم : آرایه هافصل ششم : توابع

فصل هفتم : ساختارها و اشاره گرهافصل هشتم : برنامه نویسی شی گرا

Page 3: barname sazi pishrafteh 2 C++

فصل اولفصل اول

++++CCمقدمات مقدمات

Page 4: barname sazi pishrafteh 2 C++

فهرست مطالب فصل اولفهرست مطالب فصل اول

عملگر انتساب11.

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

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

sizeof عملگر14.

عملگرهای جایگزینی محاسبات15.ی

اولویت عملگرها16.

(Comments) توضیحات17.

توابع کتابخانه18.

++C برنامه در19.

تاریخچه مختصر1.

قانون نامگذاری شناسه ها2.

متغیر ها3.

اعالن متغیر4.

تخصیص مقادیر به متغیر5.

داده های از نوع کرکتر6.

کرکتر های مخصوص7.

رشته ها8.

نمایش مقادیر داده ها9.دریافت مقادیر10.

Page 5: barname sazi pishrafteh 2 C++

++++CCتاریخچه مختصر تاریخچه مختصر

Bjarne stroustrup توسط 1980در اوائل دهه این زبان b توسعه يافته در آزمايشگاه بل طراحي شده. اين زبان عمال

كه امكان نوشتن می باشد Cزبان برنامه نويسي برنامه هاي ساخت يافته شئ گرا را مي دهد.

Page 6: barname sazi pishrafteh 2 C++

قانون نامگذاري شناسه هاقانون نامگذاري شناسه ها

متفاوتحروف كوچك و بزرگ در نامگذاري شناسه ها 1( د.نمي باش

چهار Xy ، XY ، xY ، xyبنابراين ++Cشناسه متفاوت از نظر

مي باشد.

Page 7: barname sazi pishrafteh 2 C++

قانون نامگذاري شناسه هاقانون نامگذاري شناسه ها

در نامگQذاري شناسQه ها از حQروف الفبQاء، ارقQام وزيQر ( 2( اسQQتفاده مي شQQود و حQQداكثر underscoreخQQط )

مي باشQد و شناسQه بايسQتي بQا يQك 31طQول شناسQه رقم شروع نگردد.

Page 8: barname sazi pishrafteh 2 C++

قانون نامگذاري شناسه هاقانون نامگذاري شناسه ها

براي نامگذاري شناسه ها از كلمات كليدي نبايستي استفاده نمود. در ) 3زير بعضي از كلمات كليدي داده شده است.

And Sizeof then xor Template

Float False Friend While continue

extern Private Switch Default Const

delete typedef if this Virtual

Page 9: barname sazi pishrafteh 2 C++

متغيرهامتغيرها

در اسالید بعد به انواع داده ها اشاره .می شود

متغير، مكاني در حافظه اصلي كامپيوتر مي باشد كه در آنجا يك مقدار را

مي توان ذخيره و در برنامه از آن استفاده

نمود. قانون نامگذاري متغيرها همان قانون نامگذاري شناسه ها

مي باشد.

Page 10: barname sazi pishrafteh 2 C++

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

الزمالزمint 32768– تا 32767 بايت 2

unsigned int 0 تا 65535 بايت2

long int – تا 21474836472147483648

بايت 4

unsigned long int 0 تا 4294967295 بايت 4

char يك كاركتر بايت1

unsigned char 128– تا 127 بايت 1

float 3.4e38 1.2 تاe-38 بايت 4

double 1.8e308 2.2 تاe-308 بايت 8

انواع داده ها

Page 11: barname sazi pishrafteh 2 C++

اعالن متغیرهااعالن متغیرها

در اسالید بعد مثال هایی از اعالن متغیر ذکر .شده است

قبل از آنكه در برنامه به متغيرها مقداري تخصيص داده شود و از آنها

استفاده گردد بايستي آنها را در برنامه اعالن نمود.

Page 12: barname sazi pishrafteh 2 C++

براي اعالن متغيرx از نوع int :

int x;

متغيرهاي برای اعالنp و q را از نوع float كه هر :كدام چهار بايت از حافظه را اشغال مي كنند

float p , q;

متغير برای اعالنnext از نوع كركتر كه مي توان كركتر را به آن تخصيص داد و يك بايت 256يكي از

را اشغال مي كند.char next;

چند مثال از اعالن متغیر ها :چند مثال از اعالن متغیر ها :

Page 13: barname sazi pishrafteh 2 C++

تخصيص مقادير به متغيرهاتخصيص مقادير به متغيرها

در اسالید بعد مثال هایی از اعالن متغیر ذکر شده است.

مي توان به متغيرها مقدار اوليه تخصيص نمود. =با استفاده از عملگر

Page 14: barname sazi pishrafteh 2 C++

: :مثالمثال

در دستورالعمل int x=26; Xا ر. اعالن نموده 26 با مقدار اوليه intاز نوع

در دستورالعمل long a=67000 , b=260; تعريف نموده با long int را از نوعa و bمتغيرهاي

مقادير بترتيب.67000 و 260

Page 15: barname sazi pishrafteh 2 C++

داده هاي از نوع كركتر داده هاي از نوع كركتر

در حافظه charبراي نمايش داده هاي از نوع استفاده مي شود. ASCIIكامپيوتر از جدول

كركتر يك عدد 256جدول اسكي به هر يك از تخصيص مي دهد.255 تا 0منحصر بفرد بين

Page 16: barname sazi pishrafteh 2 C++

كركترهاي مخصوصكركترهاي مخصوص

بعض|ي از كركتره|اي مخص|وص ك|ه در ++Cك|امپيلر برنام|ه مي ت|وان از آنه|ا ب|راي ف|رمت بن|دي اس|تفاده ك|رد را تش|خيص مي ده|د. تع|دادي از اين كركتره|اي

ب|ه هم|راه ک|اربرد آنه|ا در اس|الید بع|د آورده مخص|وصشده است .

Page 17: barname sazi pishrafteh 2 C++

كركترهاي مخصوصكركترهاي مخصوص

\n Newline

\t Tab

\b Backspace

\a Beep sound

\” Double quote

\’ Single quote

\0 Null character

\? Question mark

\\ Back slash

مي توان براي a\بعنوان مثال از كركتر استفاده نمود. beepايجاد صداي

char x = '\a;

Page 18: barname sazi pishrafteh 2 C++

رشته هارشته ها

عبارتست از دنباله اي از كركترها كه بين stringرشته يا قرار داده مي شود. در حافظه كامپيوتر انتهاي " "

ختم مي گردد.0\رشته ها بوسيله

در اسالید بعد به دو مثال دقت نمایید.

Page 19: barname sazi pishrafteh 2 C++

: :11مثال مثال

"BOOK STORE"ه كركتري د يك رشته كه به 0\مي باشد كه با توجه به كركتر

انتهاي آن در حافظه اضافه مي شود b يازده بايت را اشغال مي كند. جمع||ا

Page 20: barname sazi pishrafteh 2 C++

: :22مثال مثال

ي|ك رش|ته مي باش|د ك|ه "w" دقت نمایی|د ک|ه دو ب||ايت از حافظ||ه را اش||غال مي كن||د در

ي|ك كرك|تر مي باش|د ك|ه ي|ك ب|ايت 'w'حاليك|ه از حافظه را اشغال مي نمايد.

Page 21: barname sazi pishrafteh 2 C++

نمايش مقادير داده هانمايش مقادير داده ها

كه coutبراي نمايش داده ها بر روي صفحه مانتور از بدنبال آن عملگر درج يعني >> قيد شده باشد استفاده مي گردد. بايستي توجه داشت كه دوكركتر > پشت سر

بصورت يك كركتر تلقي مي گردد.++Cهم توسط

Page 22: barname sazi pishrafteh 2 C++

پيغام برای نمایش good morningنمایش صفحه بر روی : cout << "good morning";

برای نمایش مقدار متغیرX: بر روی صفحه نمایش cout << x ;

:: مثالمثال

Page 23: barname sazi pishrafteh 2 C++

دریافت مقادیر متغیرهادریافت مقادیر متغیرها

ب|ه منظ|ور دري|افت مق|ادير ب|راي متغيره|ا در ض|من اج|راي برنام|ه ك|ه ب|دنبال آن عملگ|ر اس|تخراج يع|ني << cinاز ص|فحه كلي|د، از

قيد شده باشد مي توان استفاده نمود.

Page 24: barname sazi pishrafteh 2 C++

مثال :مثال :

int x;cout >> "Enter a

number:" ;cin << x;

Page 25: barname sazi pishrafteh 2 C++

عملگر انتسابعملگر انتساب

مي باشد كه =عملگر انتساب باعث مي گردد مقدار عبارت در

ارزيابي این عملگرطرف راست آنشده و در متغير طرف چپ

قرار گيرد.

Page 26: barname sazi pishrafteh 2 C++

مثال :مثال :

x=a+b;

x=35 ; x=y=z=26 ;

از عملگرهاي انتساب چندگانه نيز ه مقدار سه کمي توان استفاده نمود.

ميشود.26 برابر با x و y و zمتغير

Page 27: barname sazi pishrafteh 2 C++

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

: پنج عملگر محاسباتي وجود دارد كه عبارتند از ++Cدر

اين عملگرها دو تائي مي باشند زيرا روي دو عملوند عمل مي نمايند. از طرف ديگر عملگرهاي + و – رامي توان بعنوان عملگرهاي يكتائي نيز در نظر گرفت.

جمع +

تفريق -ضرب *

تقسيم /

باقيمانده %

Page 28: barname sazi pishrafteh 2 C++

: :11مثال مثال

– ، + ، *در حالتي كه هر دو عملوند عملگرهاي % ، / ، از نوع صحيح باشد نتيجه عمل از نوع صحيح مي باشد.

عبارت نتیجه

5 + 2 7

5 * 2 10

5 – 2 3

5 % 2 1

5 / 2 2

Page 29: barname sazi pishrafteh 2 C++

: :22مثال مثال

در صورتيكه حداقل يكي از عملوندهاي عملگرهاي / ، * ، – ، + از نوع اعشاري باشد نتيجه عمل از نوع اعشاري

مي باشد.

عبارت نتیجه

5 .0+ 2 7. 0

5* 2. 0 10.0

5. 0 / 2 2.5

5. 0 -2 3. 0

5. 0 / 2. 0 2.5

Page 30: barname sazi pishrafteh 2 C++

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

، افزايش يك واحد ++Cدر به مقدار يك متغير از نوع صحيح را افزايش و بطور مشابه كاهش يك واحد از

مقدار يك متغير از نوع صحيح را كاهش مي نامند..

Page 31: barname sazi pishrafteh 2 C++

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

و - -عملگر كاهش را با ++عملگر افزايش را با

نمايش مي دهند. چون فقط - - و ++عملگرهاي

روي يك عملوند اثر دارند اين دو عملگر نيز جزء

عملگرهاي يكتائي مي باشند.

Page 32: barname sazi pishrafteh 2 C++

مثال :مثال :

:سه دستور العمل ++x;x++;x=x+1;

ر نیز معادل مي باشند و بطريق مشابه سه دستورالعمل زي

معادل مي باشند.

- - y ; y=y-1;y- - ;

Page 33: barname sazi pishrafteh 2 C++

مي توان بدو صورت پيشوندي و پسوندي استفاده نمود. --از عملگرهاي ++ و ر دستورالعمل هاي پيچيده عملگر پيشوندي قبل از انتساب ارزيابي ميشود و عملگر د

پسوندي بعد از انتساب ارزيابي مي شود.

Page 34: barname sazi pishrafteh 2 C++

مثال :مثال :

int x=5;y=++x * 2;

: پس از اجراي دستورالعملهاي فوق y=12

int x=5;y=x++ * 2;

:پس از اجراي دستورالعملهاي فوق y=12

Page 35: barname sazi pishrafteh 2 C++

sizeofsizeofعملگر عملگر

Sizeof ازعملگرهاي يكتائي مي باشد و مشخص كننده تعداد بايت هائي است كه يك نوع داده

اشغال مي كند.

مثال :int x;

cout << sizeof x ; . نمايش داده مي شود2مقدار

cout << sizeof(float) ; . نمايش داده مي شود4مقدار

Page 36: barname sazi pishrafteh 2 C++

عملگرهاي جايگزيني محاسباتيعملگرهاي جايگزيني محاسباتي

++Cبراي ساده تر نوشتن عبارتها در ، مي توان از عملگرهاي جايگزيني

استفاده نمود. محاسبQQQاتي

=+ =- =* =/ =%

Page 37: barname sazi pishrafteh 2 C++

اولويت عملگرهااولويت عملگرها

ارزيابي مقدار يك عبارت رياضي براساس جدول اولويت عملگرها انجام مي گردد. در ذيل جدول اولويت عملگرها براساس بترتيب از بيشترين

اولويت به كمترين اولويت داده شده است.

( )پرانتزها چپ به راست sizeof ++ -- + -عملگرهاي يكتايي ست به چپ ار

% / *عملگرهاي ضرب و تقسيم و باقيمانده چپ به راست +عملگرهاي جمع و تفريق چپ به راست << >>عملگرهاي درج و استخراج چپ به راست =% =/ =* =- =+ =عملگرهاي جايگزيني و انتساب راست به چپ

Page 38: barname sazi pishrafteh 2 C++

: :11مثال مثال

(5+2) *(6+2*2)/2

با توجه به جدول اولويت عملگرها داريم كه

7 *(6+2*2)/2

7*(6+4)/2

7* 10 /2

70 /2

35

Page 39: barname sazi pishrafteh 2 C++

: :22مثال مثال

int a=6 , b=2, c=8, d=12;

d=a++ * b/c ++;

cout << d << c << b << a;

خروجی :

1 9 2 7

Page 40: barname sazi pishrafteh 2 C++

((CommentsCommentsتوضيحات )توضيحات )

توضQيحات در برنامQه بQاعث خوانQائي بيشQتر و درك بهQتر برنامQQه ميشQQود. بنQQابراين توصQQيه بQQر آن اسQQت كQQه حQQتي

+CاالمكQان در Qبرنامه هQا از توQضQيحات اسQتفاده نمQائيم. در کQه QدرQ اسQالیدهایQ ، QتوضQيحQاQت بQدQوQ صQورQت QانجQامQ مQي گQيرQد+

.بعد به آن اشاره شده است

Page 41: barname sazi pishrafteh 2 C++

((CommentsCommentsتوضيحات )توضيحات )

الف: اين نوع توضيح بوسيله // انجام مي شود. كه كامپيوتر هر چيزي را كه بعد از // قرار داده

شود تا انتهاي آن خط اغماض مي نمايد. مثال :

c=a+b;//c is equal to sum of a and b

ختم */ شروع شده و به /*ب:توضيح نوع دوم با قرار گيرد */ و / *مي شود و هر چيزي كه بين

. اغماض مي نمايد :مثال

/ * this is a program

to calcufate sum of

n integer numbers */

Page 42: barname sazi pishrafteh 2 C++

توابع كتابخانهتوابع كتابخانه

مجهز به تعدادي توابع كتابخانه مي باشد. ++Cزبان بعنوان مثال تعدادي توابع كتابخانه براي عمليات

ورودي و خروجي وجود دارند. معموال� توابع كتابخانه مشابه ، بصورت برنامه هاي هدف )برنامه ترجمه شده بزبان ماشين( در قالب فايلهاي كتابخانه دسته بندي

و مورد استفاده قرا رمي گيرند. اين فايلها را مي باشند.h. مي نامند و داراي پسوند headerفايلهاي

Page 43: barname sazi pishrafteh 2 C++

نحوه استفاده از توابع کتابخانه اینحوه استفاده از توابع کتابخانه ای

براي استفاده از توابع كتابخانه خاصي آنرا در headerبايستQQQي نام فايل

قرار include#ابتداي برنامه در دستور دهيم.

#header < include اسم فايل <

Page 44: barname sazi pishrafteh 2 C++

فايل هيدر تابع نوعشرح stdlib.h قدرمطلقi int abs(i)

math.h كسينوسd double cos(d)

math.h ex double exp(d)

math.h loge d double log(d)

math.h Log10 d double log10(d)

math.h سينوسd double sin(d)

math.h جذرd double sqrt(d)

string.h تعداد كركترهاي رشتهs int strlen(s)

math.h تانژانتd double tan(d)

stdlib.h كداسكي كركترc int toascii( c)

stdlib.h تبديل به حروف كوچكint tolower(c )

stdlib.h تبديل به حرف بزرگint toupper(c )

Page 45: barname sazi pishrafteh 2 C++

++++CCبرنامه در برنامه در

اكنون باتوجه به مطالب گفته شده قادر خواهيم بود كه تعدادي بنويسيم. براي نوشتن برنامه ++Cزبان ه برنامه ساده و كوچك ب

قرار دهيم و براي اينكار ) (mainبايستي دستورالعملها را در تابع ی که در اسالیدهای بعد آمده است ،يكي از دو طريقه مي توان ب

عمل نمود.

Page 46: barname sazi pishrafteh 2 C++

:: روش اولروش اول

#include < >int main( )}

1 دستورالعمل ;

2 دستورالعمل ;...

n دستورالعمل ;return 0 ;}

Page 47: barname sazi pishrafteh 2 C++

روش دوم :روش دوم :

#include < >

void main( )

{

1 دستورالعمل ;

2 دستورالعمل ;

.

.

.

n دستورالعمل ;

}

Page 48: barname sazi pishrafteh 2 C++

#include <iostream.h>

int main( )

{

cout <<"C++ is an object oriented language \n" ;

return 0 ;

}

را را C++ is an object oriented languageC++ is an object oriented language پيغام پيغام ای که ای که برنامهبرنامه دهد.دهد. تور نمايش ميتور نمايش ميییروي صفحه مانروي صفحه مان

Page 49: barname sazi pishrafteh 2 C++

برنامه زير يك حرف انگليسي كوچك را گرفته به حرف بزرگ برنامه زير يك حرف انگليسي كوچك را گرفته به حرف بزرگ ..تبديل مي نمايدتبديل مي نمايد

#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; }

Page 50: barname sazi pishrafteh 2 C++

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

#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 ;

}

Page 51: barname sazi pishrafteh 2 C++

فصل دومفصل دوم

ساختارهای تصمیم گیری و تکرارساختارهای تصمیم گیری و تکرار

Page 52: barname sazi pishrafteh 2 C++

فهرست مطالب فصل دومفهرست مطالب فصل دوم

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

عملگر شرطی2.

دستورالعمل شرطی3.

عملگر کاما4.

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

For دستورالعمل6.

Page 53: barname sazi pishrafteh 2 C++

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

براي تعيين این عملگرهااز اينكه آيا دو عدد با هم معادلند يا يكي از ديگري بزرگتر يا كوچكتر

مي باشد استفاده مي گردد. عملگرهاي رابطه اي عبارتند از:

= = مساوي

! = مخالف

< بزرگتر

=< مساوي يا بزرگتر

> كوچكتر

=> مساوي يا كوچكتر

Page 54: barname sazi pishrafteh 2 C++

عملگر شرطیعملگر شرطی

:شكل كلي عملگر شرطي بصورت زير مي باشد

مي باشد كه داراي ++Cعملگر شرطي تنها عملگري در سه عملوند مي باشد.

expression _ test ? expression _ true : expression _ false

Page 55: barname sazi pishrafteh 2 C++

: :11مثال مثال

int x=10,y=20,b;b=(x>y) ? x : y ;

yاين دو دستور العمل باعث ميشوند كه ماكزيمم مقادير

قرار بگيرد.b در xو

: :22مثال مثال x>=10 ? cout << "passed" : cout << "failed" ;

بزرگتر يا مساوي ده باشد رشتة xاگر مقدار

passedرشته در غير اينصورت failed نمايش دادهميشود.

Page 56: barname sazi pishrafteh 2 C++

دستورالعمل شرطيدستورالعمل شرطي

شرطي را توسط این دستورآنكه شرط ه تست نموده و بسته ب

درست يا غلط باشد عكس العمل خاصي را نشان دهيم.

IF

if( عبارت ) {

; دستورالعمل1 .

n دستورالعمل ; }

else {

; دستورالعمل 1 .

n دستورالعمل ; }

Page 57: barname sazi pishrafteh 2 C++

11مثال مثال : :

if(x != y)

{

cout << x ;

++ x ;

}

else

{

cout << y ;

- - y ;

}

Page 58: barname sazi pishrafteh 2 C++

22مثال مثال ::

#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;}

.برنامه زير يك عدد اعشاري را از ورودي گرفته جذر آنرا محاسبه مي نمايد.برنامه زير يك عدد اعشاري را از ورودي گرفته جذر آنرا محاسبه مي نمايد

Page 59: barname sazi pishrafteh 2 C++

عملگر كاماعملگر كاما

تعدادي عبارت را مي توان با كاما بهم متصل نمود و تشكيل يك عبارت

ه اين عبارتها ب پيچيده تري را داد.ترتيب از چپ به راست ارزيابي شده و

مي باشد. nمقدار عبارت معادل عبارت

عبارت , 3 عبارت ,. , …nعبارت )(1 عبارت ,2

Page 60: barname sazi pishrafteh 2 C++

مثال :مثال :

عبارت زير را در نظر ;int a=2 , b=4 , c=5 اگر داشته باشيم:بگيريد

(++ a , a+b, ++ c, c+b)

مي با شد.10 كه معادل b+cمقدار عبارت برابر است با

Page 61: barname sazi pishrafteh 2 C++

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

با استفاده از عملگرهاي منطقي مي توان شرطهاي تركيبي :در برنامه ايجاد نمود. عملگرهاي منطقي عبارتست از

AND

OR

NOT

ترتيب بصورت زير نشان داده ميشود.ه ب++Cكه در &&||!

Page 62: barname sazi pishrafteh 2 C++

جدول درستی سه عملگر شرطیجدول درستی سه عملگر شرطی

a && b b a True true true False false true False true false False false false

a || b b a True true true True false true True true false False false false

!a a False true True false

Page 63: barname sazi pishrafteh 2 C++

چند مثال :چند مثال :

if ((x= = 5) ||(y != 0))

cout << x << endl ;

نمايش داده شود . x مخالف صفر باشد مقدار y يا 5 برابر با xاگر

if(x)

x = 0 ;

برابر با صفر شود . x مخالف صفر باشد، آنگاه xاگر مقدار

Page 64: barname sazi pishrafteh 2 C++

برنامه زير طول سه پاره خط را از ورودي گرفته مشخص مي نمايد كه آيا برنامه زير طول سه پاره خط را از ورودي گرفته مشخص مي نمايد كه آيا

تشكيل يك مثلث ميدهد يا خير؟تشكيل يك مثلث ميدهد يا خير؟

#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 ;}

Page 65: barname sazi pishrafteh 2 C++

ForForدستورالعمل دستورالعمل

براي تكرار دستورالعملها استفاده forاز دستور العمل : بصورت زير مي باشد forميشود. شكل كلي دستور

for( 1 عبارت 2 ; عبارت ;3)عبارت {; دستورالعمل 1 ; دستورالعمل 2 . . . n دستورالعمل ; }

Page 66: barname sazi pishrafteh 2 C++

#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 ;}

را از ورودي گرفته فاكتوريل آنرا nبرنامه زير عدد صحيح و مثبت محاسبه ونمايش مي دهد.

Page 67: barname sazi pishrafteh 2 C++

#include <iostream.h>

int main( )

{

int n, i=1 ;

long s = 0 ;

cin >> n ;

for(; i<=n; i++) s += i;

cout << s ;

return 0 ; }

را محاسبه n تا 1برنامه زير مجموع اعداد صحيح و متوالي بين نموده و نمايش مي دهد.

Page 68: barname sazi pishrafteh 2 C++

#include <iostream.h>

int main( )

{

int j=0 ;

for( ; j <= 9 ; ) cout << j++ << endl;

return 0 ;

}

را نمايش مي دهد.9 تا 0برنامه زير ارقام

Page 69: barname sazi pishrafteh 2 C++

#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 ;}

ايجاد ايجاد 33 ، ، 22 ، ، 11ارقام ارقام برنامه زير كليه اعداد سه رقمي كه بابرنامه زير كليه اعداد سه رقمي كه بامي شوند را نمايش مي دهد.مي شوند را نمايش مي دهد.

Page 70: barname sazi pishrafteh 2 C++

فصل سومفصل سوم

سایر ساختارهای تکرارسایر ساختارهای تکرار

Page 71: barname sazi pishrafteh 2 C++

فهرست مطالب فصل سومفهرست مطالب فصل سوم

while دستورالعمل1.

do while دستورالعمل2.

break دستورالعمل3.

continue دستورالعمل4.

switch دستورالعمل5.

()cin.get تابع6.

()><static_cast عملگر7.

جدول اولویت عملگرها8.

Page 72: barname sazi pishrafteh 2 C++

whilewhileدستورالعمل دستورالعمل براي تكرار يك دستورالعمل ساده forاز اين دستور العمل مانند دستورالعمل

يا تركيبي استفاده مي گردد. شكل كلي اين دستور العمل بصورت زير مي باشد.

while( شرط)

}1 دستورالعمل ; 2 دستورالعمل ; . .

n دستورالعمل ; }

Page 73: barname sazi pishrafteh 2 C++

forforو و whilewhileتفاوت دستورهای تفاوت دستورهای

زماني forدستورالعمل استفاده ميشود كه تعداد

دفعات تكرار از قبل مشخص و معين باشد. در

صورتيكه تعداد دفعات تكرار مشخص نباشد

بايستي از دستورالعمل while.استفاده نمود

Page 74: barname sazi pishrafteh 2 C++

مثال :مثال :

int x=0

while(x<5)

cout << x ++<< endl;

با اجراي قطعه برنامه فوق مقادير زير نمايش داده : ميشود

01234

Page 75: barname sazi pishrafteh 2 C++

#inclode <iostream.h>int main( ){int count = 0 , n;float x, sum = 0 , avg ;cin >> n ; /* تعداد مقادير ورودي n*/while(count < n){cin >> x ;sum += x ;++ count ; }avg = sum / n ;cout << avg << endl;return 0 ; }

مقدار از نوع اعشاري را گرفته ميانگين آنها را مقدار از نوع اعشاري را گرفته ميانگين آنها را nn برنامة فوق برنامة فوق قرار مي دهد. قرار مي دهد.avgavgمحاسبه و در متغير محاسبه و در متغير

Page 76: barname sazi pishrafteh 2 C++

do whiledo whileدستورالعمل دستورالعمل

اين دستور العمل نيز براي تكرار يك دستورالعمل ساده يا تركيبي استفاده مي شود. شكل كلي اين

دستورالعمل بصورت زير مي باشد.

do}1 دستورالعمل ; 2 دستورالعمل ; . . n دستورالعمل ; } while( شرط);

Page 77: barname sazi pishrafteh 2 C++

whilewhileو و do whiledo whileتفاوت دستورهای تفاوت دستورهای

ابتدا whileدر دستورالعمل مقدار شرط ارزيابي شده

do while در دستورالعمل اماابتدا دستورالعمل اجرا شده سپس مقدار شرط ارزيابي

بنابراینمي گردد. do whileدستورالعمل

حداقل يك بار انجام

.ميشود

Page 78: barname sazi pishrafteh 2 C++

مثال :مثال :

#include <iostream.h>int main( ){int count = 0;docout << count ++<<endl ;while(count <= 9);return 0 ; }

را روي ده خط 9 تا 0ارقام نمايش مي دهد

Page 79: barname sazi pishrafteh 2 C++

breakbreakدستورالعمل دستورالعمل

for , while ,do) اين دستورالعمل باعث توقف دستورالعملهاي تكرارwhile).شده و كنترل به خارج از اين دستورالعملها منتقل مي نمايد

Page 80: barname sazi pishrafteh 2 C++

: :11مثال مثال #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 ; }

Page 81: barname sazi pishrafteh 2 C++

::22مثال مثال

#include <iostream.h>int main( ){int count = 0 ;while( 1 ){count ++ ;if(count > 10 )break ;}cout << "counter : " << count << "\n";return 0 ;}

Page 82: barname sazi pishrafteh 2 C++

::33مثال مثال

#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 ; }

Page 83: barname sazi pishrafteh 2 C++

::44مثال مثال

#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 ; }

Page 84: barname sazi pishrafteh 2 C++

continuecontinueدستورالعمل دستورالعمل

مي توان در continueاز دستورالعمل do while ، while ، forدستورالعملهاي تكرار

استفاده نمود. اين دستورالعمل باعث مي شود كه كنترل بابتداي دستورالعملهاي تكرار

منتقل گردد.

Page 85: barname sazi pishrafteh 2 C++

::11مثال مثال

#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 ; }

Page 86: barname sazi pishrafteh 2 C++

::22مثال مثال

#include <iostream.h>int main( ){int n , navg = 0 ;float x, avg, sum = 0 ;cin >> n ; / * عبارت از تعداد اعداد ورودي 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 ; }

Page 87: barname sazi pishrafteh 2 C++

switchswitchدستورالعمل دستورالعمل

( if elseشرطی) دستورالعمل از همانطور که می دانیدبصورت تودرتو استفاده نمود ولي از طرفي می توان

اگر عمق استفادة تو در تو از اين دستورالعمل زياد +C براي حل اين مشكل . گردد، درك آنها مشكل ميشود

كه عمال� يك دستورالعمل چند switch ، دستورالعمل + انتخابي مي باشد را ارائه نموده است.

Page 88: barname sazi pishrafteh 2 C++

SwitchSwitchشکل کلی دستور العمل شکل کلی دستور العمل switch(عبارت){case valueone :

statement; break;case valuetwo:

statement; break;

case valuen : statement;

break;default: statement ; }

Page 89: barname sazi pishrafteh 2 C++

11مثال مثال : :#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 * /}

Page 90: barname sazi pishrafteh 2 C++

: :22مثال مثال #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;

}}

Page 91: barname sazi pishrafteh 2 C++

: :)( )( cin.getcin.getتابع تابع

اين تابع يك كركتر را از صفحه كليد مي گيرد. براي استفاده از اين تابع در ابتداي برنامه :بايستي داشته باشيم

#include <iostream.h>

Page 92: barname sazi pishrafteh 2 C++

char x;

x = cin.get( );

cout << x ;

قطعه برنامه ذيل يك كركتر را از صفحه كليد گرفته و نمايش مي دهد.قطعه برنامه ذيل يك كركتر را از صفحه كليد گرفته و نمايش مي دهد.

Page 93: barname sazi pishrafteh 2 C++

#include <iostream.h>

int main( )

{

char x;

while((x = cin.get( ) !=EOF)

cout << x ;

return 0 ;

}

� CTRLCTRL ZZ برنامة ذيل يك سطر متن انگليسي كه بهبرنامة ذيل يك سطر متن انگليسي كه به ختم ميشود را گرفته دقيقا � ختم ميشود را گرفته دقيقا نمايش مي دهد.نمايش مي دهد.

EOFمعني ه بEnd of File تعريف iostream.hمي باشد كه در

- 1شده و مقدار آن برابر با مي باشد. مقدار آن در سيستم

. ctrl z عبارتست از DOSعامل

Page 94: barname sazi pishrafteh 2 C++

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; }

استفاده شده است. استفاده شده است.switchswitch و دستور و دستور )()(cin.getcin.getدر قطعه برنامه ذيل ازتابع در قطعه برنامه ذيل ازتابع

Page 95: barname sazi pishrafteh 2 C++

#include <iostream.h>int main( ){char next;while((next = cin.get( ) ) !=EOF)if(next != ) cout << next ;return 0 ; }

( آنرا ( آنرا blankblankبرنامة ذيل يك سطر متن انگليسي را گرفته كركترهاي خالي )برنامة ذيل يك سطر متن انگليسي را گرفته كركترهاي خالي )حذف نموده و نمايش ميدهد.حذف نموده و نمايش ميدهد.

Page 96: barname sazi pishrafteh 2 C++

static_caststatic_castعملگر عملگر

به نوع ديگرdataاز اين عملگر براي تبديل موقت يك نوع استفاده مي شود. اين عملگر يك عملگر يكتائي مي باشد.

Page 97: barname sazi pishrafteh 2 C++

11مثال مثال ::

int x = 25 ;float y ;y = static_cast < float >(x) ;

int x = 25 ;float y ;y = static_cast < float >(x) ;

موقتا� بصورت x مقدار آيد و در می اعشاري در

برابر با yنتيجه مقدار شود. بايستي می 25.0

توجه داشت كه نوع متغير xشود بلكه عوض نمي

موقتا� مقدار آن بصورت اعشاري در آمده است.

Page 98: barname sazi pishrafteh 2 C++

22مثال مثال ::

float x = 14.75 ;cout << static_cast < int >(x) << endl;cout << x ;

float x = 14.75 ;cout << static_cast < int >(x) << endl;cout << x ;

نمايش 14 ابتدا مقدار داده ميشود و سپس

نمايش داده 14.75مقدار

ميشود.

Page 99: barname sazi pishrafteh 2 C++

جدول اولویت عملگرهاجدول اولویت عملگرها

) (چپ به راست

Static_cast < >( ) ++ -- + - sizeofراست به چپ % / *چپ به راست - +چپ به راست << >>چپ به راست =< < => >چپ به راست =! = =چپ به راست : ?راست به چپ =% =/ =* =- =+ =راست به چپ ,چپ به راست

Page 100: barname sazi pishrafteh 2 C++

فصل چهارمفصل چهارم

اعداد تصادفیاعداد تصادفی

Page 101: barname sazi pishrafteh 2 C++

فهرست مطالب فصل چهارمفهرست مطالب فصل چهارم

تولید اعداد تصادفی1.

( typedef ) تعریف نوع داده2.

داده های از نوع شمارشی3.

فرمت های مختلفه مقادیر خروجی4.

Page 102: barname sazi pishrafteh 2 C++

اعداد تصادفیاعداد تصادفی

مقادير تصادفي يا شانسي در اكثر برنامه هاي كاربردي در زمينه شبيه سازي و بازيهاي كامپيوتري نقش مهمي را ايفا مي نمايند.

بايستي از تابع 32767 و 0براي ايجاد يك عدد تصادفي صحيح بين rand.استفاده نمائيم ) (

Page 103: barname sazi pishrafteh 2 C++

#include <stdlib.h>

#include < iostream.h>

int main( )

{

for(int j=1; j<=10; ++j)

cout << rand( ) << \n ;return 0 ;

}

را ايجاد مي نمايد. را ايجاد مي نمايد.3276732767 و و 00 عدد تصادفي بين عدد تصادفي بين 1010برنامه زير برنامه زير

Page 104: barname sazi pishrafteh 2 C++

نکته :نکته :

گيريم. می اگر برنامة فوق را چندبار اجرا نمائيم جواب يكساني را از كامپيوتري استفاده نمائيم. ) (srandبراي تصادفي كردن اعداد مي بايستي از تابع نياز دارد.unsignedاين تابع به يك آرگومان صحيح از نوع

گفته مي شود.seed به اين آرگومان

) (srandدر اسالید بعد برنامه قبلی را با تابع نوشته ایم.

Page 105: barname sazi pishrafteh 2 C++

#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 ; }

( () ( ) ( srandsrand) ) را ايجاد مي نمايد. را ايجاد مي نمايد.3276732767 و و 00 عدد تصادفي بين عدد تصادفي بين 1010برنامه زير برنامه زير

Page 106: barname sazi pishrafteh 2 C++

#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 ; }

برنامه زير نتيجه پرتاب دو تاس را نمايش مي دهد.برنامه زير نتيجه پرتاب دو تاس را نمايش مي دهد.

Page 107: barname sazi pishrafteh 2 C++

#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 ;}

را نمايش مي دهد. را نمايش مي دهد.11 و و 00 اعداد شانسي بين اعداد شانسي بين 1010برنامه زير برنامه زير

Page 108: barname sazi pishrafteh 2 C++

((typedeftypedefتعريف نوع داده )تعريف نوع داده )

مي تQوان بQراي تعريQف نQوع داده هQاي جديQد كQه معQادل typedefاز شQQكQل كليQ نQQوQع دQادQه هQQاي موجQQود QباشQQد اQسQQتفQادهQ QنمQQوQد.

: عبارتست از

typedef type newtype;

نشاندهنده نوع داده موجود

اسم جديد

Page 109: barname sazi pishrafteh 2 C++

مثال :مثال :

typedef int integer;

د : را بصورت زير تعريف نموx و yحال مي توان integer x,y;

Page 110: barname sazi pishrafteh 2 C++

داده هاي از نوع شمارشيداده هاي از نوع شمارشي

استفاده مي گردد.enumبمنظور معرفي داده هاي از نوع شمارشي از كلمه مثال :

enum color {red, blue, green, yellow, brown} ;

color يك نوع داده شمارشي مي باشد.

0 2 3 41

Page 111: barname sazi pishrafteh 2 C++

:: چند مثالچند مثال

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

Page 112: barname sazi pishrafteh 2 C++

:: توجهتوجه

بايستي در نظر داشت كه داده هاي از نوع شمارشي

در عمليات ورودي و خروجي شركت

نمي نمايند. بعبارت ديگر مقادير داده هاي از نوع

شمارشي بايستي در برنامه تعيين نمود.

دستورالعلهاي ورودي و در cout و cinخروجي مانند

مورد داده هاي شمارشي نمي توان استفاده نمود.

Page 113: barname sazi pishrafteh 2 C++

فرمتهای مختلفه مقادیر خروجیفرمتهای مختلفه مقادیر خروجی

double x=1050 ;

cout << setiosflags(ios : : fixed | ios: : showpoint ) << setw(23) << setprecision(2) << x << endl ;

نمایش 23 با طول میدان xمقدار با دو رقم اعشار نمایش xمقدار داده می شود.

داده می شود.

بصورت زیر نمایش xبنابراین مقدار داده می شود :

1050.00 شانزده ستون خالی

بطور غیر علمی با نقطه xمقدار اعشار ثابت نمایش داده می شود.

Page 114: barname sazi pishrafteh 2 C++

فصل پنجمفصل پنجم

آرایه هاآرایه ها

Page 115: barname sazi pishrafteh 2 C++

فهرست مطالب فصل پنجمفهرست مطالب فصل پنجم

آرایه یک بعدی1.

آرایه دو بعدی ( ماتریس ها )2.

Page 116: barname sazi pishrafteh 2 C++

آرایه یک بعدیآرایه یک بعدی

آرايه يك فضاي پيوسته از حافظه اصلي كامپيوتر

.مي باشد كه مي تواند چندين مقدا را در خود جاي دهد

كليه عناصر يك آرايه از يك نوع مي باشند.

عناصر آرايه بوسيله انديس آنها مشخص مي شوند.

، انديس آرايه از صفر شروع مي شود.++C در

Page 117: barname sazi pishrafteh 2 C++

کاربرد آرایه هاکاربرد آرایه ها

آرايه ها در برنامه نويسي در مواردي كاربرد دارند كه بخواهيم اطالعات و داده ها را در طول اجراي

.برنامه حفظ نمائيم

Page 118: barname sazi pishrafteh 2 C++

int x[5] ;

x

0 1 2 3 4

x[0]اولين عنصر x[4]پنجمين عنصر

Page 119: barname sazi pishrafteh 2 C++

تخصیص مقادیر اولیه به عناصر آرایه : تخصیص مقادیر اولیه به عناصر آرایه :

int x[5]= {4, 2, 5, 17, 30};

x

4 2 5 17 300 1 2 3 4

Page 120: barname sazi pishrafteh 2 C++

دریافت مقادیر عناصر آرایه :دریافت مقادیر عناصر آرایه :

int x[5];

for(int i=0; i<=4; ++i)

cin >> x[ i ] ;

نمایش مقادیر عناصر آرایه :نمایش مقادیر عناصر آرایه :

for(int i=0; i<=5; ++i) cout << x[ i ] ;

Page 121: barname sazi pishrafteh 2 C++

تعداد مقادير اوليه كمتر از تعداد عضوهاي آرايه باشد عضوهاي باقيمانده تعداد مقادير اوليه كمتر از تعداد عضوهاي آرايه باشد عضوهاي باقيمانده اگراگر ..بطور اتوماتيك، مقدار اوليه صفر مي گيرندبطور اتوماتيك، مقدار اوليه صفر مي گيرند

int x[5] = {12, 5, 7};

x

12 5 7 0 00 1 2 3 4

Page 122: barname sazi pishrafteh 2 C++

بايستي توجه داشت كه آرايه ها به صورت ضمني مقدار اوليه صفر نمي گيرند. بايستي توجه داشت كه آرايه ها به صورت ضمني مقدار اوليه صفر نمي گيرند. برنامه نويس بايد به عضو اول آرايه، مقدار اوليه صفر تخصيص دهد تا برنامه نويس بايد به عضو اول آرايه، مقدار اوليه صفر تخصيص دهد تا

عضوهاي باقي مانده بطور اتوماتيك، مقدار اوليه صفر بگيرند.عضوهاي باقي مانده بطور اتوماتيك، مقدار اوليه صفر بگيرند.

int x[5] = {0} ;

x

0 0 0 0 00 1 2 3 4

Page 123: barname sazi pishrafteh 2 C++

ايجاد مي نمايد. ايجاد مي نمايد. floatfloatدستور زير يك آرايه يك بعدي شش عنصري از نوع دستور زير يك آرايه يك بعدي شش عنصري از نوع

float x[ ] = {2.4, 6.3, -17.1, 14.2, 5.9, 16.5} ;

x

2.4 6.3 -17.1 14.2 5.9 16.50 1 2 3 4 5

Page 124: barname sazi pishrafteh 2 C++

عدد اعشاري و مثبت را گرفته تشكيل يك آرايه ميدهد سپس عدد اعشاري و مثبت را گرفته تشكيل يك آرايه ميدهد سپس 100100برنامه ذيل برنامه ذيل مجموع عناصر آرايه را مشخص نموده نمايش مي دهد.مجموع عناصر آرايه را مشخص نموده نمايش مي دهد.

#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 ; }

Page 125: barname sazi pishrafteh 2 C++

عدد اعشاري را گرفته تشكيل يك آرايه داده سپس عدد اعشاري را گرفته تشكيل يك آرايه داده سپس 2020برنامه ذيل برنامه ذيل كوچكترين عنصر آرايه را مشخص و نمايش مي دهد.كوچكترين عنصر آرايه را مشخص و نمايش مي دهد.

#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;}

Page 126: barname sazi pishrafteh 2 C++

( ( BubbleBubble sortsort عدد اعشاري را گرفته بروش حبابي ) عدد اعشاري را گرفته بروش حبابي ) 100100برنامه زير برنامه زير بصورت صعودي مرتب مي نمايد.بصورت صعودي مرتب مي نمايد.

#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 ;}

Page 127: barname sazi pishrafteh 2 C++

آرايه هاي دوبعدي )ماتريس ها(آرايه هاي دوبعدي )ماتريس ها(

ماتريسها بوسيله آرايه هاي دوبعدي در كامپيوترنمايش داده ميشوند.

int a[3][4];

0ستون 1ستون 2ستون 3 ستون

0سطر a[0][0] a[0][1] a[0][2] a[0][3]

1سطر a[1][0] a[1][1] a[1][2] a[1][3]

2سطر a[2][0] a[2][1] a[2][2] a[2][3]

Page 128: barname sazi pishrafteh 2 C++

تخصیص مقادیر اولیه به عناصر آرایه : تخصیص مقادیر اولیه به عناصر آرایه :

int a[3][4]={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12} } ;

0 1 2 3

0 1 2 3 4

1 5 6 7 8

2 9 10 11 12

Page 129: barname sazi pishrafteh 2 C++

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

Page 130: barname sazi pishrafteh 2 C++

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

Page 131: barname sazi pishrafteh 2 C++

در يك آراية دوانديسي، هر سطر، در حقيقت آرايه اي يك انديسي است. در اعالن آرايه هاي دوانديسي ذكر تعداد ستونها الزامي است.

0 1 2 3

0 1 2 3 4

1 5 0 0 0

int a[ ][4]={1,2,3,4,5};

Page 132: barname sazi pishrafteh 2 C++

را گرفته مجموع عناصر آن را مشخص را گرفته مجموع عناصر آن را مشخص 44**33برنامه زير يك ماتريس برنامه زير يك ماتريس نموده و نمايش مي دهد.نموده و نمايش مي دهد.

#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 ;}

Page 133: barname sazi pishrafteh 2 C++

فصل ششمفصل ششم

توابعتوابع

Page 134: barname sazi pishrafteh 2 C++

فهرست مطالب فصل ششمفهرست مطالب فصل ششم

تعریف تابع1.

تابع بازگشتی2.

توابع درون خطی3.

انتقال پارامترها از طریق ارجاع4.

( storage classes ) کالس های حافظه5.

سربارگذاری توابع6.

Page 135: barname sazi pishrafteh 2 C++

تعریف توابعتعریف توابع

استفاده از توابع در برنامه ها به برنامه نويس اين امكان را مي دهد كه بتواند برنامه هاي خود را به صورت قطعه قطعه برنامه بنويسد. تا كنون كليه برنامه هائي

. استفاده نموده ايم) (mainكه نوشته ايم فقط از تابع

Page 136: barname sazi pishrafteh 2 C++

: : شكل كلي توابع بصورت زير مي باشندشكل كلي توابع بصورت زير مي باشند

return-value-type function-name (parameter-list)

{

declaration and statements

}

نام تابع

نوع مقدار برگشتي

انتقال اطالعات از تابع احضار كننده به تابع فراخوانده شدهلیست پارامتر ها جهت

تعريف اعالن هاي تابع و دستورالعملهاي اجرائي

Page 137: barname sazi pishrafteh 2 C++

..تابع زير يك حرف كوچك را به بزرگ تبديل مي نمايدتابع زير يك حرف كوچك را به بزرگ تبديل مي نمايد

char low_to_up (char c1)

{

char c2;

c2 = (c1>= a && c1<= z )?( A + c1- a ): c1;

return (c2) ;

}

نام تابع

نوع مقدار برگشتی پارامتری از نوع

char

Page 138: barname sazi pishrafteh 2 C++

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

#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’

آرگومان

Page 139: barname sazi pishrafteh 2 C++

دو مقدار صحيح را گرفته بزرگترين آنها را برميگرداند. دو مقدار صحيح را گرفته بزرگترين آنها را برميگرداند.maximummaximumتابع تابع

int maximum(int x, int y)

{

int z ;

z=(x >= y)? x : y;

return z;

}

Page 140: barname sazi pishrafteh 2 C++

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

#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;}

a b10 15

a, b آرگومانهای تابعmaximum

x y10 15

z15

Page 141: barname sazi pishrafteh 2 C++

اسامي پارامترها و آرگومانهاي يك تابع مي توانند

.همنام باشند

Page 142: barname sazi pishrafteh 2 C++

برنامه زير يك مقدار مثبت را گرفته فاكتوريل آنرا محاسيه نموده برنامه زير يك مقدار مثبت را گرفته فاكتوريل آنرا محاسيه نموده ..نمايش مي دهدنمايش مي دهد

#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 ;}

n در main

3

x!=1*2*3*4*…*)x-1(*x

n در factorial

3

i در factorial

2,3,4

prod در factorial

6

Page 143: barname sazi pishrafteh 2 C++

وقتي در تابعي، تابع ديگر احضار مي گردد بايستي تعريف تابع

احضار شونده قبل از تعريف تابع احضار كننده در برنامه ظاهر

.گردد

Page 144: barname sazi pishrafteh 2 C++

بخQQواهیم در برنامه هQا ابتQدا اگQر ظQاهر گQردد بايسQتي mainتQابع

prototype ةQني پيش نمونQابع يعQت تQQابع كQQه شQQامل نQQام تQQابع، نQQوع مقQQQدار برگشQQQتي تQQQابع، تعQQQداد پارامترهQQائي را كQQه تQQابع انتظQQار دريQQQQQافت آنQQQQQرا دارد و انQQQQQواع پارامترهQQا و تQQرتيب قرارگQQرفتن اين پارامترهQQQQQا را بQQQQQه اطالع

كامپيلر برساند.

در اسالید بعد مثالی در این زمینه آورده شده است.

Page 145: barname sazi pishrafteh 2 C++

#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);}

Page 146: barname sazi pishrafteh 2 C++

در صQورتي كQه تQابع مقQداري بQر نگردانQد نQوع مقQدار برگشQتي تQابع

اعالن مي كQQQQنيم. و در voidرا صQورتيكه تQابع مقQداري را دريQافت

void از parameter- listنكنQد بجQاي يا ) ( استفاده ميگردد.

در اسالید بعد مثالی در این زمینه آورده شده است.

Page 147: barname sazi pishrafteh 2 C++

#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 ; }

بر نمی تابع مقداري گرداند.

Page 148: barname sazi pishrafteh 2 C++

( (Call By ValueCall 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 ; }

a در main

20

aدر modify

20

aدر modify

40

خروجی برنامه :

20

40

20

Page 149: barname sazi pishrafteh 2 C++

( (Call By ValueCall 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 ; }

a در main

20

aدر modify

20

aدر modify

40

در این نوع احضار تابعحافظه هاي مورد استفاده

آرگومانها و پارامترها از هم متمايزند و هرگونه تغيير

در پارامترها باعQQQث تغيQQQر در آرگومانهاي متناظر

نمي گردد.

Page 150: barname sazi pishrafteh 2 C++

نQوع مقQدار برگشQتي زمQان کQههر مي باشQد نيQازي بQه ذكQر intتQابع و همچQQنين نيQQازي بQQه یسQQتآن ن

تعريQQQQQف پيش نمونQQQQQه تQQQQQابع نمي باشد.

Page 151: barname sazi pishrafteh 2 C++

((recursive functionsrecursive functionsتابع بازگشتي )تابع بازگشتي )

توابعي هستند كهrecursiveتوابع بازگشتي يا وقتي احضار شوند باعث مي شوند كه خود را احضار نمايند.

Page 152: barname sazi pishrafteh 2 C++

نحوه محاسبه فاکتوریل از طریق تابع نحوه محاسبه فاکتوریل از طریق تابع بازگشتیبازگشتی

n != 1*2*3*…*(n-1) *n

f(n) = n !

f(n) =1 n=0 اگر

n *f(n-1) اينصورت غير در

n!= 1* 2* 3* … *(n-2) *(n-1) *n

n!=(n-1)! *n

در اسالید بعد تابع بازگشتی مورد نظر پیاده سازی شده است.

Page 153: barname sazi pishrafteh 2 C++

تابع بازگشتی محاسبه فاکتوریلتابع بازگشتی محاسبه فاکتوریل

#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) ) ;

}

Page 154: barname sazi pishrafteh 2 C++

امین مقدار دنباله فیبناکی از امین مقدار دنباله فیبناکی از nn نحوه محاسبهنحوه محاسبهطریق تابع بازگشتیطریق تابع بازگشتی

: دنباله فیبناکی … ,34 , 21 ,13 ,8 ,5 ,3 ,2 ,1 ,1 , 0

در اسالید بعد تابع بازگشتی مورد نظر پیاده سازی شده است.

=fib(n)= جملهn امn=1 0اگر

n=2 1اگر

-fib(n در غير اينصورت1)+fib(n-2)

Page 155: barname sazi pishrafteh 2 C++

( را مشخص و ( را مشخص و fibonaccifibonacci امين مقدار دنبالة فيبناكي ) امين مقدار دنبالة فيبناكي )nnبرنامه زير برنامه زير نمايش مي دهد.نمايش مي دهد.

#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) ) ;

}

Page 156: barname sazi pishrafteh 2 C++

برنامه زير يك خط متن انگليسي را گرفته آنرا وارون نموده نمايش برنامه زير يك خط متن انگليسي را گرفته آنرا وارون نموده نمايش مي دهد.مي دهد.

#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 ;

}

Page 157: barname sazi pishrafteh 2 C++

اسQتفاده از آرايه هQا بعنQوان پQارامتر تابع مجاز است.

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

Page 158: barname sazi pishrafteh 2 C++

را بعنوان پارامتر مي گيرد. را بعنوان پارامتر مي گيرد.aa آرايه آرايه modifymodifyدر برنامه زير تابع در برنامه زير تابع

#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 ;}

: خروجی12345

34567

Page 159: barname sazi pishrafteh 2 C++

در صQورتيكه آرايQه بيش از يQك بعQد داشQQته باشQQد بعQQدهاي دوم بQQه بعQQد بايسQQQتي در تعريQQQف تQQQابع و پيش

نمونه تابع ذكر گردد.

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

Page 160: barname sazi pishrafteh 2 C++

#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 2 3 4 5 6 1 2 3 4 5 0 1 2 0 4 0 0

خروجی :

Page 161: barname sazi pishrafteh 2 C++

((inlineinlineتوابع درون خطي )توابع درون خطي )

بدين معني است كه به كامپيلر دستور مي دهد كه inlineكلمه )در زمان مقتضي( يك كپي از دستورالعلمهاي تابع در همان جا توليد نمايد تا از احضار تابع ممانعت بعمل آورد.

Page 162: barname sazi pishrafteh 2 C++

inlineinlineاشکال توابع اشکال توابع

ر چند كپي از دستورالعملهاي تابع د ، بجاي داشتن تنها يك كپي از تابعبرنامه اضافه مي شود كه باعث بزرگ شدن اندازه يا طول برنامه مي شود.

براي توابع كوچك استفاده مي گردد.inline بنابراين از

Page 163: barname sazi pishrafteh 2 C++

مثالی از توابع درون خطیمثالی از توابع درون خطی

#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 ;

}

Page 164: barname sazi pishrafteh 2 C++

انتقال پارامترها از طريق ارجاعانتقال پارامترها از طريق ارجاع

ارامترهاي متناظرپتاكنون وقتي تابعي را احضار مي كرديم يك كپي از مقادير آرگومانها در. شد ناميده call by valueن روش احضار بوسيله مقدار يا ای قرار مي گرفت .

متناظر حافظه مربوط به آرگومانها و پارامترهاي در انتقال پارامترها از طريق ارجاع در حقيقتcall by referenceوش ر بصورت اشتراكي مورد استفاده قرار مي گيرد. اين

. ناميده مي شود

Page 165: barname sazi pishrafteh 2 C++

انتقال پارامترها از طريق ارجاعانتقال پارامترها از طريق ارجاع

مي نمايند در عملcall by reference در اين روش پارامترهائي كه از طريق استفاده مي شود.واضح است& پيش نمونه تابع قبل از نام چنين پارامترهائي از كه در تعريف تابع نيز بهمين طريق عمل مي شود.

Page 166: barname sazi pishrafteh 2 C++

مثال :مثال :

#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

25

51

0

تغییر xمقدار آرگومان نمی کند.

x y b

5 10 100

ادامه خروجی :

100

Page 167: barname sazi pishrafteh 2 C++

نکته :نکته :

بصورت پارامتري call byوقتي reference دانQردد اين بQاعالن مي گ

معQني اسQت كQه بQا تغيQير مقQدار اين پQارامتر در تQابع احضQار شQده مقQدار آرگومQQQان متنQQQاظر نQQQيز تغيQQQير

مي نمايد.

Page 168: barname sazi pishrafteh 2 C++

دو مقدار اعشاري را مبادله مي نمايد. دو مقدار اعشاري را مبادله مي نمايد.fswapfswapبرنامه زير با استفاده از برنامه زير با استفاده از

#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 ;

}

Page 169: barname sazi pishrafteh 2 C++

((storage classesstorage classesكالس هاي حافظه )كالس هاي حافظه )

متغيرها بدو طريق متمايز مشخص مي شوند يكي بوسيله نوع (type آنها و ديگري بوسيله كالس حافظه آنها. نوع متغير قبال� )

، . . . ولي كالس int ، float ، doubleاشاره شده بعنوان مثال حافظة يك متغير در مورد طول عمر و وسعت و دامنة متغير بحث

مي نمايد.

در اسالید بعد به انواع کالس حافظه می پردازیم.

Page 170: barname sazi pishrafteh 2 C++

:: بطور كلي كالس حافظه متغيرها به چهار دستة تقسيم مي گرددبطور كلي كالس حافظه متغيرها به چهار دستة تقسيم مي گردد

.1automatic

.2static

.3external

.4register

Page 171: barname sazi pishrafteh 2 C++

در درون يك تابع تعريف مي شوند و در automaticتغيرهاي م تابعي كه اعالن مي شود بصورت متغيرهاي محلي براي آن تابع

پس automaticمي باشند. حافظه تخصيص داده شده به متغيرهاي از اتمام اجراي تابع از بين مي رود بعبارت ديگر وسعت و دامنة

تابعي مي باشد كه متغير در آن اعالن automaticمتغيرهاي از نوع گرديده است.

Page 172: barname sazi pishrafteh 2 C++

نيز در درون توابع تعريف ميشوند و از نظر وسعت و دامنه staticغيرهاي متشبيه

اين به هستند ولي در خاتمة اجراي تابع، حافظه وابسته automaticمتغيرهاي

بين نمي رود بلكه براي فراخواني بعدي تابع باقي مي ماند. نوع متغيرهQQQا از

در اسالید بعد به یک مثال از کاربرد این نوع کالس حافظه می پردازیم.

Page 173: barname sazi pishrafteh 2 C++

مثال :مثال :

#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 مقدار اوليه

تخصيص ندهيم مقدار صفر بصورت اتوماتيك براي آنها

در نظر گرفته مي شود.

Page 174: barname sazi pishrafteh 2 C++

متغيرهQائي هسQتند كQه در externalمتغيرهQاي از نQوع بQيرون از توابQع اعالن ميشQوند و وسQعت و دامنQه فعQاليت آنهQا كليQه تQوابعي مي باشQد كQه در زيQر دسQتور اعالن متغQير

قرار دارد.

در اسالید بعد به یک مثال از کاربرد این نوع کالس حافظه می پردازیم.

Page 175: barname sazi pishrafteh 2 C++

<include <iostream.h#مثال :مثال :int w; // external variablefuncta(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 مقدار اوليه

تخصيص ندهيم مقدار صفر بصورت اتوماتيك براي آنها

در نظر گرفته مي شود.

Page 176: barname sazi pishrafteh 2 C++

اعالن مي شQQود از كQQامپيوتر عمال� register وقQQتي متغQQيري از نQQوع دQرخواسQت مي شQود كQه بQه QجQاي حاQفظQه Qاز QيكيQ از رجيسQترهاي

Q.د استفاده نمايدQموجو

Page 177: barname sazi pishrafteh 2 C++

registerregisterکاربرد کالس کاربرد کالس

معموال� از نوع رجيستر براي شاخص هاي دستور تكرار و يا انديسهاي آرايه ها استفاده مي شود. بايستي توجه داشت كه متغيرهاي از نوع رجيستر قابل استفاده

نمي باشندcin دردستور

Page 178: barname sazi pishrafteh 2 C++

function functionسربارگذاري توابع )سربارگذاري توابع )overloadingoverloading ) )

اين امكان وجود دارد كه دريك برنامه بتوانيم از ++Cدر چند توابع هم نام استفاده نمائيم مشروط بر اين كه

)از نظر تعداد پارامتر .پارامترهاي اين توابع متفاوت باشند و يا نوع پارامترها و ترتيب آنها(

Page 179: barname sazi pishrafteh 2 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 ;}

Page 180: barname sazi pishrafteh 2 C++

فصل هفتمفصل هفتم

ساختار ها و اشاره گرهاساختار ها و اشاره گرها

Page 181: barname sazi pishrafteh 2 C++

فهرست مطالب فصل هفتمفهرست مطالب فصل هفتم

ساختارها1.

.2Union ها

(Pointer ) اشاره گرها3.

تعریف آرایه4.

آرایه های دو بعدی و اشاره گرها5.

( new تخصیص حافظه بصورت پویا ( عملگر6.

رشته ها و توابع مربوطه7.

Page 182: barname sazi pishrafteh 2 C++

ساختارهاساختارها

سQاختارها شQبيه آرايه هQا بQوده بQدين صQورت كQه يQك نQوع داده گQروهي امQااQسQت كQهQ فQضQايQ پQيوQسQته اQز QحافظQهQ اصQليQ را QاQشQغالQ ميQ نمايQد.

عنQاصQر سQاختارQ QالزامQا� Qاز QيQك QنQوع نQمي باشQنQد بQلكQهQ اعQضQاي QيQك سQاخQتار باشند.… ، char ، int ، floatمي QتوانQند Qاز Qنوع هQاي مQختQلQفه از قبيQل

Page 183: barname sazi pishrafteh 2 C++

تعريف ساختارتعريف ساختار

struct time {int hour ; // 0 –

23int minute ; // 0 –

59int second; //} ;

نام ساختار

اعضا ساختار

Page 184: barname sazi pishrafteh 2 C++

:: مثالمثال

struct account {int acc_no ;char acc_type;char name[80] ;float balance ;};

داراي چهار عضو مي باشد.accountساختار acc_no شماره حساب از نوع int

acc_type نوع حساب از نوع char name كركتري 80 مشخصات صاحب حساب از نوع رشتة

balance مانده حساب از نوع float

Page 185: barname sazi pishrafteh 2 C++

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

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;

: روش اول

: روش دوم

Page 186: barname sazi pishrafteh 2 C++

به ساختارها مي توان مقدار اوليه نيز تخصيص دادبه ساختارها مي توان مقدار اوليه نيز تخصيص داد

account cust = {4236, r, Nader Naderi , 7252.5};

Page 187: barname sazi pishrafteh 2 C++

دسترسي به عناصر يك ساختاردسترسي به عناصر يك ساختار

استفاده.بمنظور دسترسي به عناصر يك ساختار از عملگر .مي گردد . عملگر. جزء عملگرهاي يكتائي مي باشد

Page 188: barname sazi pishrafteh 2 C++

مثال :مثال :

cust .acc_no = 4236

cust .acc_type = rcust . name = Nader Nadericust . balance = 7252.5

Page 189: barname sazi pishrafteh 2 C++

:: نکتهنکته

عضو يك ساختار خود مي تواند يك ساختار ديگر باشد. 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 ;

آنگاه عضو lastpay بوسيلهx.lastpay.day x.lastpay.monthx.lastpay.year

مشخص مي گردد.

Page 190: barname sazi pishrafteh 2 C++

:: نکتهنکته

كه هر عضو آن يك ساختار باشد و حتي به آنها مقادير اوليه تخصيص نمود.نمود مي توان آرايه اي تعريف

struct struc1 {char name[40];int pay1;int pay2; } ; strucl cust[ ]= {nader, 3000 , 40000,

sara, 4200, 6000, susan, 3700, 25000, saman, 4800 , 2000, };

Page 191: barname sazi pishrafteh 2 C++

برنامه زير هر عدد مختلط را بصورت يك ساختار در نظر گرفته، دو برنامه زير هر عدد مختلط را بصورت يك ساختار در نظر گرفته، دو ..عدد مختلط را مي گيرد و مجموع آنها را مشخص و نمايش مي دهدعدد مختلط را مي گيرد و مجموع آنها را مشخص و نمايش مي دهد

#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 بطوريكه y = c + idx+y =)a+c( + i)b+d(

Page 192: barname sazi pishrafteh 2 C++

unionunion

union از نظر ساختاري شبيه struct مي باشد . با اين ميدهد همگي از unionتفاوت كه عضوهائي كه تشكيل

حافظه مشتركي در كامپيوتر استفاده مي نمايند. باعث صرفه جوئي در unionبنابراين استفاده از

حافظه مي گردد.

Page 193: barname sazi pishrafteh 2 C++

مثال :مثال :

union id {char color [10];int size; } x , y;

y و xهر كQدام از متغيرهQاي يQQQQQQQQQك رشQQQQQQQQQته

كركQتري يQا يQك مقQدار از 10كQامپيوتر و مي باشQدintنQوع

Qه بتوانQه كQوك حافظQك بلQدي كركQتري رادر خQود 10رشQته

، جQاي دهQد size و colorبQراي

.در نظر مي گيرد

Page 194: barname sazi pishrafteh 2 C++

مثال :مثال :

union xpq {int x ;char y[2] ; } p ;

x بايت دوم بايت اول

y[0] y[1]

Page 195: barname sazi pishrafteh 2 C++

((PointersPointersاشاره گرها )اشاره گرها )

داده هQائي كQه در كQامپيوتر در حافظQه اصQلي ذخQيره ميشQوند بايت هQاي متQوالي از حافظQه

اشغال مي كنند.dataبسته به نوع

ررمقاديمقادي نوع دادهنوع داده حافظه الزمحافظه الزمint 32768– تا 32767 بايت 2

long int 2147483648– تا 2147483647 بايت 4

char يك كاركتر بايت1

float 3.4e38 1.2 تاe-38 بايت 4

double 1.8e308 2.2 تاe-308 بايت 8

Page 196: barname sazi pishrafteh 2 C++

((PointersPointersاشاره گرها )اشاره گرها )با داشQتن آدرس داده در حافظQة اصQلي مي تQوان

وبراحQQتي بQQه آن داده دسترسQQي پيQQدا نمQQود از طQرف ديگQر آدرس هQر داده در حافظQه آدرس بQايت

شروع آن داده مي باشد.int x = 613; 0

1

2

3

6134

5

6

7

Page 197: barname sazi pishrafteh 2 C++

نکته :نکته :

px را در xدر كامپيوتر آدرس ها معموال� دو بايت اشغال مي نمايند. اگر آدرس اشاره مي نمايد.x به pxقرار دهيم آنگاه مي گوئيم كه

px x

را عملگر آدرس مي نامند. & نشان ميدهيم و عملگر x& را بوسيله xآدرس متغير

int x , *pxpx = &x ;

Page 198: barname sazi pishrafteh 2 C++

:: مثالمثال

int y , x , *px ;

x = 26 ;

px = &x ;

26

px x

: را بدهيم ;x += 10حال اگر دستور العمل

36

px x

بدهيم. ;px = *px + 7*حال اگر دستورالعمل

43

px x

Page 199: barname sazi pishrafteh 2 C++

آرایه یک بعدی و اشاره گرهاآرایه یک بعدی و اشاره گرها

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

. مشخص مي شودx[0]اولين عنصر آرايه بوسيله

x يا بوسيله x[0]&آدرس اولين عنصر آرايه بوسيله .مشخص مي شود

.شودمشخص مي x(i-1) يا بوسيله x[i-1]& امين عنصر آرايه بوسيله iآدرس

دو دستورالعمل زير با هم معادلند .x[ i ] = 82.5;

(*x + i = )82.5; از طرف ديگر اگر داشته باشيم

float x[10];float *p;

دو دستورالعمل زير معادلند.p = &x[2]; p= x + 2;

Page 200: barname sazi pishrafteh 2 C++

ساختارها و اشاره گرهاساختارها و اشاره گرها

اشاره نمايد.(struct) مي توان اشاره گري را تعريف نمود كه به اولين بايت يك ساختار

struct struc1

{ int a

; float

b ; char

c; int d

;} x, *px ;

px x a int b float c char d int

px = &x ;

مي باشد.a(.px)* معادل pxa معادل x.aعبارت

Page 201: barname sazi pishrafteh 2 C++

آرايه هاي دوبعدي و اشاره گرهاآرايه هاي دوبعدي و اشاره گرها

يك آرايه دوبعدي بصورت تعدادي آرايه يك بعدي مي توان تعريف نمود.

ستوني از نوع اعشاري باشد قبال� اين 4 سطري و 5 يك ماتريس xاگر ماتريس را با

float x[5][4];

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

float (*x)[4];

Page 202: barname sazi pishrafteh 2 C++

آرايه هاي دوبعدي و اشاره گرهاآرايه هاي دوبعدي و اشاره گرها

float (*x)[4];

x اول بعدي يك آرايه

)x+1( دوم بعدي يك آرايه

)x+2( سوم بعدي يك آرايه

)x+3( چهارم بعدي يك آرايه

)x+4( پنجم بعدي يك آرايه

Page 203: barname sazi pishrafteh 2 C++

ايجاد شده و مقادير عناصر آرايه ايجاد شده و مقادير عناصر آرايه intint عنصري از نوع عنصري از نوع 55در برنامه زير يك آرايه در برنامه زير يك آرايه ..را به چهار طريق نمايش مي دهدرا به چهار طريق نمايش مي دهد

#include <iostream.h>#include <conio.h> int main( ){int x[ ]={12, 25, 6, 19, 100};clrscr( );int *px=x; نام آرايه بدون انديس، اشاره به عنصر اول آرايه مي نمايد//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; }

Page 204: barname sazi pishrafteh 2 C++

تخصيص حافظه به صورت پويا يا تخصيص حافظه به صورت پويا يا ((newnew)عملگر )عملگر

بnewQاز عملگQر راي تخيصQيص تQQوان حافظQQه بQQه صQQورت پويQQا می

ضQمن در ، نمQود مي تQوان اسQتفاده بQراي بلQوكي از حافظQه كQه تخصQيص

.تعیین نموديافته مقدار اوليه

Page 205: barname sazi pishrafteh 2 C++

به آن اشاره به آن اشاره ptxptx كه اشاره گر كه اشاره گر intint مقدار از نوع مقدار از نوع 2020 براي تخصيص حافظه باندازه براي تخصيص حافظه باندازه نمايد بصورت زير عمل مي شود.نمايد بصورت زير عمل مي شود.

int *ptx;

ptx = new int [20];

ptx به اولين داده از نوع intاشاره مي نمايد .

ptx+i به i+1.امين عنصر از فضاي پيوسته اشاره مي نمايد

Page 206: barname sazi pishrafteh 2 C++

عنصري از نوع اعشاري در حافظه ايجاد نموده، عنصري از نوع اعشاري در حافظه ايجاد نموده، nnبرنامه زير يك فضاي برنامه زير يك فضاي سپس آنرا مقدار داده و مجموع مقادير رامشخص و نمايش مي دهد.سپس آنرا مقدار داده و مجموع مقادير رامشخص و نمايش مي دهد.

#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; }

Page 207: barname sazi pishrafteh 2 C++

عنصري از ساختار را ايجاد مي نمايد. عنصري از ساختار را ايجاد مي نمايد.nnبرنامه زير آرايه هاي برنامه زير آرايه هاي

#include <iostream.h>#include <conio.h> int main( ){struct rec {float a;int b; } ;int n; rec *ptr; clrscr( );cout << how many records? \ncin >> 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 ; }

Page 208: barname sazi pishrafteh 2 C++

جا به جا جا به جا swapswapبرنامه زير دو مقدار اعشاري را گرفته مقادير آنها را بكمك تابع برنامه زير دو مقدار اعشاري را گرفته مقادير آنها را بكمك تابع مي نمايد.مي نمايد.

#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; }

Page 209: barname sazi pishrafteh 2 C++

رشته ها و توابع مربوطهرشته ها و توابع مربوطه

ختم ميشوند. \0 ، آرايه اي از كركترها مي باشند كه با كركتر ++Cرشته ها در

char name[ ]= sara;

s

a

r

a

\0

Page 210: barname sazi pishrafteh 2 C++

رشته و اشاره گررشته و اشاره گر

هر رشته از طريق اشاره گري به اولين كركتر آن در دسترس قرار مي گيرد. آدرس يك رشته، آدرس كركتر اول آن مي باشد. به رشته ها مي توان مقدار اوليه

تخصيص داد.

char *name = sara;

Page 211: barname sazi pishrafteh 2 C++

رشته در نظر گرفته آنها را بترتيب حروف رشته در نظر گرفته آنها را بترتيب حروف 55برنامه ذيل پنج اسم را بصورت برنامه ذيل پنج اسم را بصورت الفباء مرتب نموده نمايش مي دهد.الفباء مرتب نموده نمايش مي دهد.

#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 ; }

Page 212: barname sazi pishrafteh 2 C++

strcmpi(s1, s2)strcmpi(s1, s2)تابع تابع

را بQQا هم مقايسQQه نمQQوده )بQQدون توجQQه بQQه s2 و s1رشQQته هاي باشQد s2 برابQر بQا رشQته s1حQروف كوچQك و بQزرگ( اگQر رشQته

باشQد يQك مقQدار s2 كوچكQتر از رشQته s1مقQدار صQفر و اگQر رشQته منفي در غير اينصورت يك مقدار مثبت بر مي گرداند.

Page 213: barname sazi pishrafteh 2 C++

strcmp(s1, s2strcmp(s1, s2 ((تابع تابع

s2 برابQر بQا s1 را بQا هم مقايسQه نمQوده اگQر s2 و s1شQته هاي ر باشQد يQك s2 كوچكQتر از رشQته s1باشQد مقQدار صQفر و اگQر رشQته

مقدار منفي در غير اينصورت يك مقدار مثبت برمي گرداند.

Page 214: barname sazi pishrafteh 2 C++

strncmp(s1, s2,nstrncmp(s1, s2,n ((تابع تابع

مقايسQه s2 كركQتر از رشQتة n را بQا s1 كركQتر از رشQتة nحداكثر باشQد يQك مقQدار منفي، s2 كوچكQتر از s1نمQوده در صQورتيكه

باشQد مقQدار صQفر در غQير اينصQورت يQك s2 مسQاوي بQا s1اگQر مقدار مثبت برميگرداند.

Page 215: barname sazi pishrafteh 2 C++

strcat(s1, s2strcat(s1, s2))تابع تابع

را بQه s2 را بعنQوان آرگومQان گرفتQه رشQتة s2 و s1دو رشQتة روي s2 اضQافه مي نمايQد. كركQتر اول رشQتة s1انتهQاي رشQتة را s1 نوشQته مي شQود ونهايتQا� رشQتة s1 رشQتة \0كركQتر پايQاني

برميگرداند.

Page 216: barname sazi pishrafteh 2 C++

strncat(s1, s2,nstrncat(s1, s2,n))تابع تابع

را بعنQوان آرگومQان n ومقQدار صQحيح و مثبت s2 و s1دو رشQته كQپي s1 را در انتهQاي رشQتة s2 كركQتر از رشQتة nگرفتQه، حQداكثر

رشQتة \0 روي كركQتر پايQاني s2مي نمايQد. اولين كركQتر رشQته s1 مي نويسد ونهايتا� مقدار رشتة s1.را برميگرداند

Page 217: barname sazi pishrafteh 2 C++

strlen(sstrlen(s))تابع تابع

را بعنوان آرگومان گرفته طول رشته را مشخص sرشتة مي نمايد.

Page 218: barname sazi pishrafteh 2 C++

strlen(sstrlen(s))تابع تابع

را بعنوان آرگومان گرفته طول رشته را مشخص sرشتة مي نمايد.

Page 219: barname sazi pishrafteh 2 C++

strcpy(s1,s2)strcpy(s1,s2)تابع تابع

را در s2 را بعنوان آرگومان گرفته رشتة s2 و s1دو رشتة را بر s1 كپي مي نمايد و نهايتا� مقدار رشتة s1رشتة

مي گرداند.

Page 220: barname sazi pishrafteh 2 C++

strncpy(s1, s2,nstrncpy(s1, s2,n))تابع تابع

را بعنوان آرگومان n و مقدار صحيح و مثبت s1 , s2دو رشتة كپي نموده، s1 در رشتة s2 كركتر را از رشتة nگرفته، حداكثر

را برميگرداند.s1نهايتا� مقدار رشتة

Page 221: barname sazi pishrafteh 2 C++

براي استفاده از توابع مربوط به رشته ها بايستي

حتما� در ابتدا برنامه #include <string.h> را قرار

دهيم.

Page 222: barname sazi pishrafteh 2 C++

مثال :مثال :

#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; }

Page 223: barname sazi pishrafteh 2 C++

مثال :مثال :

#include <iostream.h>

#include <string.h>

#include <conio.h>

int main( )

{

char *s = sara;

clrscr( );

cout << strlen(s);

return 0; }

Page 224: barname sazi pishrafteh 2 C++

می باشد. می باشد.strcmpstrcmpتابع زیر معادل تابع کتابخانه تابع زیر معادل تابع کتابخانه

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]);

}

Page 225: barname sazi pishrafteh 2 C++

فصل هشتمفصل هشتم

برنامه نویس شی گرابرنامه نویس شی گرا

Page 226: barname sazi pishrafteh 2 C++

فهرست مطالب فصل هشتمفهرست مطالب فصل هشتم

تعریف شی گرایی1.

(polymorphism) چند ریختی2.

خاصیت ارث بری3.

(stack) پشته4.ایجاد شی5.ارث بری6.سازنده ها و نابود کننده ها7.توابع دوست8.کالس های دوست9.

توابع سازنده پارامتر دار10.

توابع سازنده یک پارامتری11.

staticعضوهای 12.

کالسهای تودرتو13.

کالس های محلی14.

ها objectاستفاده از 15.بعنوان پارامترهای تابع

برگشت اشیاء16.

انتساب اشیاء17.

آرایه اشیاء18.

اشاره گر به اشیاء19.

thisاشاره گر 20.

توابع مجازی و پلی 21.مرفیسم

Page 227: barname sazi pishrafteh 2 C++

تعریف شی گراییتعریف شی گرایی

يك روش oopبرنامه نويسي شئ گرا يا جديد برنامه نويسي مي باشد كه در آن از

ويژگي ساختيافته همراه با چند ويژگي هاي قوي جديد استفاده مي شود. زبان

امكان استفاده از ++Cبرنامه نويسي oop.را به راحتي فراهم مي نمايد

Page 228: barname sazi pishrafteh 2 C++

تعریف شی گراییتعریف شی گرایی

، بطور كلي مساله به تعدادي oopدر زيرگروه قطعات مربوط بهم شكسته

و codeمي شود كه براي هر زير گروه data تهيه شده و نهايتا� اين زيرگروه ها

ها يا واحدهائي مي شود كه unitتبديل به objects.يا اشياء( ناميده ميشوند(

Page 229: barname sazi pishrafteh 2 C++

نکته مهم :نکته مهم :

تمام زبانهاي برنامه نويسي شي گرا داراي سه خصوصيت مشترك زير

:مي باشند

)محصورسازي(encapsulationالف:

)چندريختي(polymorphismب:

)ارث بري( inheritanceج:

Page 230: barname sazi pishrafteh 2 C++

( (EncapsulationEncapsulationمحصورسازی )محصورسازی )

را بهم وصل نموده و هر دوي data و codeصورسازي مكانيزمي است كه محآنها را از استفاده هاي غيرمجاز مصون نگه مي دارد. شي يك مؤلفه منطقي

data باعث دستكاري و پردازش code را محصور نموده و code و dataاست كه مي شود.

Page 231: barname sazi pishrafteh 2 C++

polymorphismpolymorphism)چند ريختي( )چند ريختي(

چند ريختي مشخصه اي است كه بيك وسيله امكان ميدهد كه باتعدادي از سيستمها يا عميات يا

.دستگاهها، مورد استفاده قرار گيرد

Page 232: barname sazi pishrafteh 2 C++

inheritanceinheritance)ارث بري( )ارث بري(

ارث بري فرآيندي است كه بوسيله آن يك شي (object مي تواند خاصيت هاي شي ديگري را دارا )

شود.

Page 233: barname sazi pishrafteh 2 C++

((stackstackپشته )پشته )

پشته فضاي مي باشد. last in first outپشته ساختاري است كه داراي خاصيت ملياتي كQQه روي پشته انجام مي شوند عبارتند از :ع .پيوسته در حافظه اشغال مي نمايد

، كه باعث مي شود يك عنصر وارد پشته شده.push الف: ، كه باعث مي شود يك عنصر از پشته خارج گردد. pop ب:

Page 234: barname sazi pishrafteh 2 C++

((objectobjectايجاد شي )ايجاد شي )

بمنظQور ايجQاد يQك شQي بايسQتي از اسQتفاده نمQود. classكلمQة رزروشQده

class اQاختار يQبيه سQاهر شQر ظQاز نظ struct كQوان يQته را بعنQد. پشQمي باش object هQQرفت كQQر گQQوان در نظQQمي ت

data كQه و يQك آرايQامل يQآن ش tos و ، انجQQام objectعمليQاتي كQه روي اين

push، initialize مي شود عبارتست از، pop.كردن پشته

در اسالید بعد مثالی از نحوه ایجاد شی آورده شده است.

Page 235: barname sazi pishrafteh 2 C++

مثال :مثال :

#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( );

};

بدين معQQني اسQQت كQQه stck و tos يلهQQQQQبوس

objectتQوابعي كQه عضQو نباشQQQQند غQQQQير قابQQQQل دسترسQي هسQتند. و اين يكي از روش هQQQQQQQQQQاي محصQQQور سQQQازي اقالم

داده هاست.

بدين معQQني اسQQت كQQه بوسQQيله سQQاير قطعQQات برنامQه قابQل دسترسQي

مي باشد.

Page 236: barname sazi pishrafteh 2 C++

نکته :نکته :

فقQط توابQع عضQو مي تواننQد بQه متغيرهQاي عضQو دسترسQي داشQته باشQند. بايسQتي privateاز نQوع

توجQهQ داشQت QكQه اگQر نQوع عQضQويQ مشQخصQ نگQردQد آن می باشد. privateعضQو به صورتQ اتQوماQتيك

Page 237: barname sazi pishrafteh 2 C++

نحوه تعریف تابع عضو یک کالسنحوه تعریف تابع عضو یک کالس

void stack : : push(int i){ if(tos = = SIZE ) { cout << stack is full.; return; } stck[tos]= i ; tos ++ ;}

objectعملگQر: : مشQخص مي نمايQد كQه تQابع متعلQق بQه كQدام مي باشQQQQQQQQQQQQQQQQد. عملگQQQQQQQQQQQQQQQQر : : عملگQQQQQQQQQQQQQQQQر

scope resolution .ناميده مي شود

Page 238: barname sazi pishrafteh 2 C++

: : stackstackبرنامه کامل برنامه کامل

#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 objectsst1. 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; }

Page 239: barname sazi pishrafteh 2 C++

ارث بریارث بری

ارث بري فرآيندي است كه بوسيله آن يك شي (object مي تواند خاصيت هاي شي ديگري را دارا )

شود.

در اسالید بعد مثالی از ارث بری آورده شده است.

Page 240: barname sazi pishrafteh 2 C++

:: مثالمثال

تعريQف building اي بنQام سQاختمان يQا object روبQرودر گرديQده اسQت. هQرQ سQاختمQان داQراي QتعQدQادي اطQاق، تعQدادي طبقQه و سQطح زيQر QبنQا نQيQز مي باشQد. ازQ طQرف QديگرتQوابعي

: QكهQ برQاي شي تعرQيف شده

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( ); }; تعريQQQف houseديگQQQري بنQQQام objectحال

مي نمQائيم كQه نQه تنهQا داراي تمQام اعضQاي شQي buildingهQQد بلكQQدارای مي باش دو اقالم داده

اضQافي و چهQار تQابع اضQافي مي باشQد. دراينجQا ارث building از شQQQي houseعمال� شQQQي

:مي برد// 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( ); };

Page 241: barname sazi pishrafteh 2 C++

نکته :نکته :

می derived class را house و base class را building مثQال قبQلدر را دارا اسQت بعالوه اينكQه building تمQام اعضQاي house شQي . نامنQد

و همچQQنينbedrooms ، bathsداراي متغيرهQQاي عضQQوي اضQQافي ،()set_baths()، set_bebrooms()، get_bathsتوQابQQQع عضQQQوي

get_bedrooms)(.نيز مي باشد .

Page 242: barname sazi pishrafteh 2 C++

constructors and constructors andسازنده ها و نابودكننده ها )سازنده ها و نابودكننده ها )destructorsdestructors))

Initialization ابعيQق تQك از طريQورت اتوماتيQه دادن بصQدار اوليQا مقQي يQا تQابعQ سQاQزنQده.Q تQابع سQاQزنده تQابع constructorاQنجQام Qمي QشQود بQنQاQم تQابQع

س بQودQه وQ QهمنQام QبQاQ كالس مQي باشد. Qكال Qي ازQعضوQ كه QتQسQخصوصي اQم

Page 243: barname sazi pishrafteh 2 C++

constructors and constructors andسازنده ها و نابودكننده ها )سازنده ها و نابودكننده ها )destructorsdestructors))

، عكس عمQل تQابع سQازنده destructorتQابع نQابود كننQده يQا Qبين مي رود Qاز Qي ايQQQه شQQQك QيQتQQQوق Q.دQQQهQد Qام ميQQQانجQ اQر بصQورت اتوQماتيQك تQابع QنQابQود كنQنQده آن فQراخQواني مي گQردد.

Page 244: barname sazi pishrafteh 2 C++

((friend functionsfriend functionsتوابع دوست )توابع دوست )

اين امكQان وجQود دارد كQه بQه friendبQا اسQتفاده از كلمQة Q هQQي بQQترسQدس QازهQQد اجQQاشQمي بQو كالس نQQه عضQQك QابعيQQت

بQرQاي آنكQه تQابQعي را دوسQتQ كالس Qرا داد.privateQمتغيرهQاي ن نمQائيم Qاز كلمQه QالQاعfriend تفادهQسQع اQابQف تQعريQتQ زQل اQقب

مي نمائيم.

در اسالید بعد مثالی آورده شده است.

Page 245: barname sazi pishrafteh 2 C++

<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 ; }

Page 246: barname sazi pishrafteh 2 C++

نکته : نکته :

-كالسي كه از كالس ديگر ارث مي برد ، توابع 1دوست آن كالس را به ارث نمي برند. بعبارت

، توابع دوست را به ارث derived classديگر يك نمي برد.

-توابع دوست داراي مشخصه نوع ذخيره 2نمي باشند يعني توابع دوست را نمي توان

تعريف نمود.external يا staticبصورت

Page 247: barname sazi pishrafteh 2 C++

((friend classesfriend classesكالسهاي دوست )كالسهاي دوست )

اين امكان وجود دارد كه يك كالس دوست كالس ديگري باشد . در تعريف شده در privateچنين وضعيتي تابع دوست به كليه اسامي

كالس ديگر دسترسي دارد.

در اسالید بعد مثالی آورده شده است.

Page 248: barname sazi pishrafteh 2 C++

#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 ; }

مثال :مثال :

Page 249: barname sazi pishrafteh 2 C++

توابع سازنده پارامتردارتوابع سازنده پارامتردار

مكQان انتقQال آرگومانهQا بQه توابQع سQازنده وجQود ا initializeدارد. معمQQوال� از اين آرگومانهQQا بQQراي

نمودن شي در زمان ايجاد آن استفاده ميگردد.

در اسالید بعد مثالی آورده شده است.

Page 250: barname sazi pishrafteh 2 C++

مثال :مثال :

#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; }

Page 251: barname sazi pishrafteh 2 C++

توابع سازنده يك پارامتريتوابع سازنده يك پارامتري#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; // منتقل كن i 126 را بهcout << obj.getx( );return 0 ; }

Page 252: barname sazi pishrafteh 2 C++

staticstaticعضوهاي عضوهاي

اعالن گردد اين بدين static اگر عضو داده اي بصورت معني است كه كامپيلر فقط يك كپي از متغير

ها بايستي objectمذكور را نگهداري نموده و تمام براي بصورت اشتراكي از آن كپي استفاده نمايند.

قبل از اعالن عضو staticاينكار مي بايستي از كلمه استفاده نمود.

در اسالید بعد مثالی آورده شده است.

Page 253: barname sazi pishrafteh 2 C++

:: مثالمثال#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 avoid shared :: show( ) { cout << static a: << a << endl; cout << nonstatic b: << b << endl; }int main( ){ shared x,y; x.set(1,1); // set a to 1x.show( );y.set(4,4); // change a to 4y.show( );x.show( );return 0; }

Page 254: barname sazi pishrafteh 2 C++

nested classesnested classes)كالسهاي تودرتو( )كالسهاي تودرتو(

مي توان يك كالس را در يك كالس ديگر تعريف نمود. اما بعلت اينكه در

C++ براي كالسها خاصيت ارث بري وجود دارد نيازي معموال� به تعريف

نمودن يك كالس در كالس ديگر نيست

Page 255: barname sazi pishrafteh 2 C++

local classeslocal classes)كالسهاي محلي( )كالسهاي محلي(

وقQQتي كQQه كالسQQي در درون يQQك تQQابع تعريQف مي شQود اين كالس فقQط بQراي آن تQQابع شQQناخته شQQده اسQQت و بQQراي توابQع ديگQر ناشQناخته مي باشQد. چQنين

كالسي را كالس محلي مي نامند.

Page 256: barname sazi pishrafteh 2 C++

: : در مورد كالسهاي محلي رعايت نكات زير ضروري استدر مورد كالسهاي محلي رعايت نكات زير ضروري است

تمام توابع عضو بايستي در درون كالس تعريف گردند.1.

از متغيرهاي محلي، تابعي كه كالس در آن تعريف شده نمي تواند استفاده نمايد.2.

نمي توان استفاده نمود.staticاز متغيرهاي عضوي 3.

Page 257: barname sazi pishrafteh 2 C++

ها بعنوان ها بعنوان objectobjectاستفاده از استفاده از پارامترهاي توابعپارامترهاي توابع

ها مي توان بعنوان پارامترهاي توابع استفاده نمود و مكانيزم objectاز مي باشد.call by valueانتقال آرگومانها و پارامترها بصورت

Page 258: barname sazi pishrafteh 2 C++

((returning objectsreturning objectsبرگشت اشياء )برگشت اشياء )

باشد. objectمقدار برگشتي يك تابع مي تواند يك

در اسالید بعد مثالی آورده شده است.

Page 259: barname sazi pishrafteh 2 C++

:: مثالمثال#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; }

Page 260: barname sazi pishrafteh 2 C++

((object assignmentobject assignmentانتساب اشياء )انتساب اشياء )

از يك نوع باشندobjectدر صورتيكه دو تا را بديگري انتساب نمود.object مي توان يك

در اسالید بعد مثالی آورده شده است.

Page 261: barname sazi pishrafteh 2 C++

مثال :مثال :

#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 ; }

Page 262: barname sazi pishrafteh 2 C++

((array of objectsarray of objectsآرايه اشياء )آرايه اشياء )

.امكان استفاده از آرايه در مورد اشياء مي باشد ها object بعبارت ديگر مي توان در برنامه ها آرايه اي از

داشته باشيم.

در اسالید بعد مثالی آورده شده است.

Page 263: barname sazi pishrafteh 2 C++

:: مثالمثال

#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; }

Page 264: barname sazi pishrafteh 2 C++

pointers to pointers toاشاره گر به اشياء )اشاره گر به اشياء )objectsobjects ))

در مورد اشياء نيز از اشاره گرها نيز مي توان استفاده نمود. در اين مورد استفاده مي شود. از عملگر

در اسالید بعد مثالی آورده شده است.

Page 265: barname sazi pishrafteh 2 C++

مثال :مثال :

#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; }

Page 266: barname sazi pishrafteh 2 C++

thisthis ( (this pointerthis pointer))اشاره گر اشاره گر

ر تابع عضو يك كالس داراي يك پارامتر مخفيهobject اشاره به this مي باشد. this pointer بنام

خاصي مي نمايد.

در اسالید بعد مثالی آورده شده است.

Page 267: barname sazi pishrafteh 2 C++

<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; }

Page 268: barname sazi pishrafteh 2 C++

virtual virtualتوابع مجازي و پلي مرفيسم )توابع مجازي و پلي مرفيسم )functionsfunctions))

تعريف شد وbase classتابع مجازي، تابعي است كه در تغير داده ميشود. براي اعالن يكderived class بوسيله

استفاده نمائيم.virtual تابع مجازي بايستي از كلمه ( base classتغير تابع در كالس مشتق روي تابعي كه در كالس پايه )

تعريف شده انجام مي شود.

در اسالید بعد مثالی آورده شده است.

Page 269: barname sazi pishrafteh 2 C++

<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 basep = &b;p vfunc( ); // access base's vfunc// point to derived1 p=&d1;p vfunc( ); //access derived1's vfunc( )//point to derived2p = &d2;p vfunc( ); // use derived1 s vfunc( )return 0 ; }

Page 270: barname sazi pishrafteh 2 C++
Page 271: barname sazi pishrafteh 2 C++

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

And -- or bitor not_eq compl

keywords and alternative tokens.keywords and alternative tokens.