برنامه سازي C++

Preview:

DESCRIPTION

برنامه سازي C++. فهرست مطالب. مقدمات زبان C++ ساختار های تصمیم گیری و تکرار سایر ساختار های تکرار اعداد تصادفی آرایه ها توابع ساختارها و اشاره گرها برنامه نویسی شی گرا. عملگر انتساب عملگر های محاسباتی عملگرهای افزایش و کاهش عملگر sizeof عملگرهای جایگزینی محاسباتی - PowerPoint PPT Presentation

Citation preview

++Cبرنامه سازي

فهرست مطالب

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

ساختار های تکرار سایرتصادفی اعداد

ها آرایهتوابع

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

++Cبخش اول: مقدمات زبان

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

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

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

sizeof عملگر14.

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

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

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

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

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

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

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

متغیر ها3.

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

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

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

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

رشته ها8.

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

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

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

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

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

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

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

مي باشد.

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

:نامگذاري شناسه ها) 2 از حروف الفباء• ارقام •) underscoreزير خط (• 31حداكثر طول شناسه •. نميشهشناسه با يك رقم شروع •

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

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

And Sizeof then xor Template

Float False Friend While continue

extern Private Switch Default Const

delete typedef if this Virtual

متغيرها

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

متغ�ير، مك�اني در حافظ�ه اص��لي ك��امپيوتر مي باش��د ك��ه در آنج��ا ي��ك مق��دار را مي ت�����وان ذخ�����يره و در برنام����ه از آن اس����تفاده نم���ود. ق���انون نامگ���ذاري متغيره���ا هم���ان ق���انون نامگ������ذاري شناس������ه ها

مي باشد.

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

int 32768 –تا 32767 بايت 2

unsigned int 0 تا 65535 بايت2

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

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

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

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

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

انواع داده ها

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

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

قبrrrل از آنكrrrه در برنامrrrه بrrrه متغيرهrrا مقrrداري تخصrrيص داده شrrود و از آنهrrا اسrrتفاده گrrردد بايسrتي آنهrا را در برنامrه اعالن

نمود.

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

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

float p , q;

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

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

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

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

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

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

:مثال

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

.نموده

در دستورالعمل long int a=67000 , b=260;

تعريف long int را از نوعa و b متغيرهاي نموده با مقادير بترتيب

.67000 و 260

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

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

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

تخصيص مي دهد.

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

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

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

ب��ه از اين كركتره��اي مخص��وص بع�د آنه�ا در اس�ًالید هم�راه ک�اربرد

آورده شده است .

رشته ها

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

ختم 0حافظه كامپيوتر انتهاي رشته ها بوسيله \مي گردد.

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

:1مثال

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

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

:2مثال

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

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

را اشغال مي نمايد.

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

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

ش��ده باش��د اس��تفاده مي گ��ردد. بايس��تي توج��ه +Cداش�ت ك�ه دوكرك�تر > پش�ت س�ر هم توس�ط

+ بصورت يك كركتر تلقي مي گردد.

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

cout << "good morning;"

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

مثال :

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

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

اس�تخراج يع�ني << قي�د ش�ده باش�د مي ت�وان اس�تفاده نمود.

مثال :

int x;cout >> "Enter a

number; ":cin << x;

عملگر انتساب

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

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

قرار گيرد.

مثال :

x=a+b;

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

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

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

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

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

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

جمع +

تفريق -ضرب *

تقسيم /

باقيمانده %

:1مثال

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

عبارت نتیجه

5 + 2 7

5 * 2 10

5 – 2 3

5 % 2 1

5 / 2 2

:2مثال

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

مي باشد.

عبارت نتیجه

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

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

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

صحيح را كاهش مي نامند..

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

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

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

روي يrrك عملونrrد اثrrر دارنrrد اين دو عملگrrrrر نrrrrيز جrrrrزء عملگرهrاي يكتrائي مي باشrند.

مثال :

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

x;++x=x+1;

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

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

- -y ; y=y-1;

y; - -

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

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

مثال :

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

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

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

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

sizeofعملگر

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

اشغال مي كند.

مثال :int x;

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

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

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

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

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

=+ =- =* =/ =%

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

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

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

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

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

:1مثال

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

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

7)* 6+2*2/(27)*6+4/(27 *10/ 2

70/ 235

:2مثال

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

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

خروجی :

1 9 2 7

)Commentsتوضيحات (

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

Cيردrrام مي گrrورت انجrrدو صrrيحات بrrدر ++، توض کrrه . اسالیدهای بعد به آن اشاره شده است

)Commentsتوضيحات (

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

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

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

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

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

* /this is a program

to calcufate sum of n integer numbers/*

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

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

h مي نامنrrrrrد و داراي پسrوند .headerفايلهrrrrrاي مي باشند.

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

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

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

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

فايل هيدر تابع نوعشرح 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 )

++Cبرنامه در

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

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

روش اول :

#include < >int main( )}

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

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

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

روش دوم :

#include < >

void main( )

{

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

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

.

.

.

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

}

#include <iostream.h>

int main( )

{

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

return 0 ;

}

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

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

#include <iostream.h>

#include <ctype.h>

int main( )

{

char c1 , c2;

cout << "Enter a lowercase letter:“;

cin >> c1;

c2 = toupper(c1);

cout << c2 ;

return 0;

}

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

#include <iostream.h>

int main( )

{

float x,y,s,p ;

cin >> x >> y ;

s= x+y ;

p=x*y;

cout << s << p;

return 0 ;

}

بخش دوم: ساختارهای تصمیم گیری و تکرار

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

عملگر شرطی2.

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

عملگر کاما4.

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

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

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

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

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

مساوي = =

مخالف ! =

بزرگتر <

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

كوچكتر >

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

عملگر شرطی

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

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

expression _ test ? expression _ true : expression _ false

:1مثال

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

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

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

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

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

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

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

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

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

IF

if( عبارت ) {

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

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

else {

; دستورالعمل 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;}

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

عملگر كاما

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

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

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

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

مثال :

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

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

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

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

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

AND

OR

NOT

ترتيب بصورت زير نشان داده ميشود.ه ++ ب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

چند مثال :

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

cout << x << endl ;

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

If (x)

x = 6 ;

برابر با صفر شود . 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ميشود. شكل كلي دستور

for) 1 عبارت 2 عبارت ; ;3(عبارت {; دستورالعمل 1 ; دستورالعمل 2 . . . 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 ;}

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

#include <iostream.h>

int main( )

{

int n, i=1 ;

long int s = 0 ;

cin >> n ;

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

cout << s ;

return 0 ; }

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

#include <iostream.h>

int main( )

{

int j=0 ;

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

return 0 ;

}

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

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

ايجاد 3 ، 2 ، 1 ارقام برنامه زير كليه اعداد سه رقمي كه بامي شوند را نمايش مي دهد.

فصل سوم

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

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

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

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

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

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

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

()cin.get تابع6.

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

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

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

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

while( شرط)

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

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

for و whileتفاوت دستورهای

زمrrrاني forدسrrrتورالعمل اسrتفاده ميشrود كrه تعrداد دفعrrrrات تكrrrrرار از قبrrrrل مشrrخص و معين باشrrد. در صrrrورتيكه تعrrrداد دفعrrrات تكrrrrرار مشrrrrخص نباشrrrrد بايسrrrتي از دسrrrتورالعمل

while .استفاده نمود

مثال :

int x=0

while(x<5)

cout << x ++<< endl;

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

01234

#include <iostream.h>void 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;}

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

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

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

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

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

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

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

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

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

.ميشود

مثال :

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

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

breakدستورالعمل

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

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

:1مثال #include <iostream.h>void 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 ; }

:2مثال

#include <iostream.h>void main( ){int count = 0 ;while( 1 ){

count ++ ;if(count > 10 )break ;

}cout << "counter : " << count << "\n";}

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

continueدستورالعمل

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

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

:1مثال

#include <iostream.h>void 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 ;}

:2مثال #include <iostream.h>void 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 ;}

switchدستورالعمل

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

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

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

است.

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

statement; break;case valuetwo:

statement; break;

case valuen : statement;

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;

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

#include <iostream.h>

int main( )

{

char x;

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

cout << x ;

return 0 ;

}

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

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

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

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

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

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

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

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

فصل چهارم

اعداد تصادفی

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

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

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

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

اعداد تصادفی

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

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

#include <stdlib.h>

#include < iostream.h>

int main( )

{

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

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

}

را ايجاد مي نمايد.32767 و 0 عدد تصادفي بين 10برنامه زير

نکته :

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

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

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

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

( ) )srand( را ايجاد مي نمايد. 32767 و 0 عدد تصادفي بين 10برنامه زير

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

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

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

را نمايش مي دهد.1 و 0 اعداد شانسي بين 10برنامه زير

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

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

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

typedef type newtype;

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

اسم جديد

مثال :

typedef int integer ;

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

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

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

مثال :

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

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

0 2 3 41

چند مثال :

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

توجه :

بايسrتي در نظrر داشrت كrه داده هrاي از نrوع شمارشrي در عمليrrrrrrrrrات ورودي و خrrrrrrrrروجي شrrrrrrrrركت نمي نماينrrد. بعبrrارت ديگrrر مقrrادير داده هrrاي از نrrوع شمارشrrrrي بايسrrrrتي در برنامrrrrه تعrrrrيين نمrrrrود. دسrrrrتورالعلهاي ورودي و

در cout و cinخrروجي ماننrد مrورد داده هrاي شمارشrي

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

فصل پنجم

آرایه ها

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

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

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

آرایه یک بعدی

آرايه يك فضاي پيوسته از حافظه اصلي كامپيوتر را در خود رمي باشد كه مي تواند چندين مقدا

جاي دهد.

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

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

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

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

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

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

int x[5] ;

x

0 1 2 3 4

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

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

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

x

4 2 5 17 300 1 2 3 4

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

int x[5];

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

cin >> x[ i ] ;

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

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

cout << x[ i ] ;

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

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

x

12 5 7 0 00 1 2 3 4

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

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

int x[5] = {0};

x

0 0 0 0 00 1 2 3 4

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

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

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

#include <iostream.h>void main( ){const int arrsize = 100 ;float x[ arrsize], tot = 0.0 ;for(int j=0; j<arrsize; j++)

cin >> x[ j ];for(int j=0; j<arrsize; j++)

cout << x[ j ] << endl;for(int j=0; j<arrsize; j++)

tot += x[ j ] ;cout << tot ;}

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

#include <iostream.h>#include <conio.h>void main( ){

float x[20], s;int j ;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; }

) Bubble sort عدد اعشاري را گرفته بروش حبابي ( 100برنامه زير بصورت صعودي مرتب مي نمايد.

#include <iostream.h>#include <conio.h>void main ( ){float x[100] , temp;int i,j; 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;

}

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

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

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]

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

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

0 1 2 3

0 1 2 3 41 5 6 7 82 9 10 11 12

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

0 1 2 3

0 1 0 0 01 2 3 0 02 4 5 6 0

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

0 1 2 3

0 1 2 3 41 5 0 0 02 0 0 0 0

در يك آراية دوانديسي، هر سطر، در حقيقت آرايه اي يك انديسي است. در

اعالن آرايه هاي دوانديسي ذكر تعداد ستونها الزامي است.

0 1 2 3

0 1 2 3 41 5 0 0 0

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

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

#include <iostream.h>#include <conio.h>void 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; }

فصل ششم

توابع

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

تعریف تابع1.

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

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

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

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

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

تعریف توابع

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

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

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

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

{

declaration and statements

}

نام تابع

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

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

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

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

char low_to_up (char c1)

{

char c2;

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

return (c2) ;

}

نام تابع

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

char

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

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

a b10 15

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

x y10 15

z15

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

.همنام باشند

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

#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

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

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

.گردد

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

prototype ةrني پيش نمونrابع يعrت تrrابع كrrه شrrامل نrrام تrrابع، نrrوع مقrrrدار برگشrrrتي تrrrابع، تعrrrداد پارامترهrائي را كrه تrابع انتظrار دريrrrrافت آنrrrrرا دارد و انrrrrواع پارامترهrا و تrرتيب قرارگrرفتن اين پارامترهrrrrrا را بrrrrrه اطالع

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

است.

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

}

در صrورتي كrه تrابع مقrداري بrrrر نگردانrrrد نrrrوع مقrrrدار

اعالن voidبرگشrتي تrابع را مي كrrrنيم. و در صrrrورتيكه تrrابع مقrrداري را دريrrافت

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

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

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

a در main

20

a در modify

20

a در modify

40

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

20

40

20

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

a در main

20

a در modify

20

a در modify

40

تrrrابع احضrrrار نrrrوع این در حافظه هrrrrاي مrrrrورد اسrrrrتفاده آرگومانهrrrrrrrrا و پارامترهrrrrrrrrا

از هم متمايزنrد و هرگونrه تغيrير در پارامترهrrا باعrrrrrث تغيrrrrrر در

آرگومانهاي متناظر نمي گردد.

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

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

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

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

f(n) = n !

f(n) =

1 n=0 اگر

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

n!= 1* 2* 3* … *(n-2) *(n-1) *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 نحوه محاسبهطریق تابع بازگشتی

:دنباله فیبوناچی … ,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)

) را مشخص و 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) ) ;

}

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

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

را بعنوان پارامتر مي گيرد. 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 ;}

: خروجی12345

34567

در صrورتيكه آرايrه بيش از يrك بعrد داشrته باشrد بعrدهاي دوم بrrه بعrrد بايسrrتي در تعريrrف تrابع و پيش نمونrه تrابع ذكrر

گردد.

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

#include <iostream.h>void printarr (int [ 2 ][ 3 ]);int main( ){

int arrl [2][3] = { {1,2,3}, {4,5,6} };int arr2 [2][3]= {1,2,3,4,5};int arr3 [2][3]={ {1,2}, {4} };printarr (arr1);cout << endl ;printarr (arr2);cout << endl ;printarr (arr3);return 0 ;

}void printarr (int a[2][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

خروجی :

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

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

inlineاشکال توابع

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

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

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

#include <iostream.h>

inline float cube(const float s) {return s*s*s; }

void main( )

{

float side ;

cin >> side ;

cout << side << cube(side) << endl ;

}

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

تاكنون وقrrتي تrrابعي را احضrrار مي كrrرديم •ارامترهrاي پيrك كrپي از مقrادير آرگومانهrا در

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

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

وش رمrورد اسrتفاده قrرار مي گrيرد. اين 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: ی

25510

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

x y b

5 10 100

ادامه خروجی :

100

نکته :

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

بrدان معrني اسrت كrه بrا تغيrير مقrrrدار اين پrrrارامتر در تrrrابع احضrrار شrrده مقrrدار آرگومrrان

متناظر نيز تغيير مي نمايد.

دو مقدار اعشاري را مبادله مي نمايد.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اشاره شده بعنوان مثال حافظة يك متغير در مورد طول عمر و وسعت و دامنة متغير بحث

مي نمايد.

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

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

.1automatic

.2static

.3external

.4register

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

پس از اتمrrام اجrrراي تrrابع از بين automaticمتغيرهrrاي مي رود بعبrارت ديگrر وسrعت و دامنrة متغيرهrاي از نrوع

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

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

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

بلكه براي فراخواني بعدي تابع باقي مي ماند.در اسالید بعد به یک مثال از کاربرد این نوع کالس حافظه می

پردازیم.

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

بايسrتي توجrه داشrت كrrه اگrrر در توابrrع بrrه متغيرهrrrrاي از نrrrrوع

static هrrrدار اوليrrrمق تخصrrrrrيص نrrrrrدهيم مقrدار صrفر بصrورت اتوماتيrrك بrrراي آنهrrا در نظrrrrrrر گرفتrrrrrrه

مي شود.

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

قرار دارد.

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

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

بايسrتي توجrه داشrت كrrه اگrrر در توابrrع بrrه متغيرهrrrrاي از نrrrrوع

external هrrدار اوليrrمق تخصrrrrrيص نrrrrrدهيم مقrدار صrفر بصrورت اتوماتيrrك بrrراي آنهrrا در نظrrrrrrر گرفتrrrrrrه

مي شود.

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

از يكي از رجيسترهاي موجود استفاده نمايد. را میتrوان از کالس char و intتنهrا متغییرهrای از نrوع رجیستر اعالن نمود.

register int i;

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.

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

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

و اشاره گرها ها آرایه4.

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

ساختارها

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

عناصrر سrاختار الزامrا� از يrك نrوع امrااشrغال مي نمايrد. نمي باشrند بلكrه اعضrاي يrك سrاختار مي تواننrد از نوع هrاي

، … باشند. char ، int ، floatمختلفه از قبيل

تعريف ساختار

struct time {int hour ; // 0 –

23int minute ; // 0 –

59int second; //} ;

نام ساختار

اعضا ساختار

مثال :

struct account {

int acc_no ;char acc_type;char name[80] ;float balance ;

};

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

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

balance مانده حساب از نوع 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 = rcust .name = Nader Nadericust .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 ; آنگاه عضو lastpay بوسيله

x.lastpay.day x.lastpay.monthx.lastpay.year

مشخص مي گردد.

نکته :

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

struct struc1 {

char name[40];int pay1;int pay2;

} ; struct cust[ ]= {nader, 3000 , 40000,

ali, 4200, 6000, reza, 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 بطوريكه

y = c + idx+y =(a+c) + i(b+d)

)Pointersاشاره گرها (

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

اشغال مي كنند.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

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

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

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

1

2

3

4613

5

6

7

نکته :

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

px x

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

int x , *pxpx = &x ;

مثال :

int y , x , *px ;

x = 26 ;

px = &x ;

26

px x

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

36

px x

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

43

px x

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

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;

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

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

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

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

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

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

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

char name[ ]= sara;

s

a

r

a

\0

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

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

مي توان مقدار اوليه تخصيص داد.

char *name = sara;

رشته در نظر گرفته آنها را بترتيب حروف 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; }void 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[ j ];name[ j ] = name[ i ];name[ i ] = t ;

};

strcmpi(s1, s2)تابع

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

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

strcmp(s1, s2) تابع

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

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

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

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

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

strcat(s1, s2(تابع

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

برميگرداند.

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

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

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

strlen(s(تابع

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

strcpy(s1,s2)تابع

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

مي گرداند.

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

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

را برميگرداند.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 << strcpy(s1, s2) << 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.

static عضوهای12.

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

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

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

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

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

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

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

this اشاره گر20.

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

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

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

ويژگي ساخت يافته همراه با ويژگي هاي قوي

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

راحتي فراهم مي نمايد.

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

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

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

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

نکته مهم :

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

:مي باشند

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

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

(ارث بري) inheritanceج:

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

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

بrاعث code را محصrور نمrوده و code و dataمؤلفrه منطقي اسrت كrه مي شود. dataدستكاري و پردازش

polymorphism(چند ريختي)

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

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

inheritance(ارث بري)

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

شود.

)stackپشته (

last inپشته ساختاري است كه داراي خاصيت first out مي باشد. پشته فضاي پيوسته در

ملياتي كrrه روي پشته . عحافظه اشغال مي نمايدانجام مي شوند عبارتند از :

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

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

)objectايجاد شي (

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

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

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

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

};

بدين معrrني اسrrت كrrه stck و tos يلهrrrrrrrrrrبوس

objectتrوابعي كrه عضrو نباشrrrrند غrrrrير قابrrrrل دسترسrي هسrتند. و اين يكي از روش هrrrrrrrrrrاي محصrrrور سrrrازي اقالم

داده هاست.

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

مي باشد.

نکته :

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

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

باشد.

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

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

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

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

ارث بری

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

شود.

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

مثال :

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

:شده

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

}; تعريrrrrrف house ديگrrrrrري بنrrrrrام objectحال مي نمrائيم كrه نrه تنهrا داراي تمrام اعضrاي شrي

buildingهrrد بلكrrدارای مي باش دو اقالم داده اضrافي و چهrار تrابع اضrافي مي باشrد. دراينجrا

ارث building از شrrrrrrي houseعمال� شrrrrrrي :مي برد

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

};

نکته :

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

توابrع و همچrنينbedrooms ، bathsداراي متغيرهrاي عضrوي اضrافي ()نrيز set_baths()، set_bebrooms()، get_baths()، get_bedroomsعضrوي

مي باشد.

constructors andسازنده ها و نابودكننده ها (destructors(

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

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

constructors andسازنده ها و نابودكننده ها (destructors(

، عكس عمrل تrابع destructorتrابع نrابود كننrده يrا سrازنده را انجrام مي دهrد. وقrتي كrه شrي اي از بين مي رود بصrrrورت اتوماتيrrrك تrrrابع نrrrابود كننrrrده آن

فراخواني مي گردد.

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

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

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

استفاده مي نمائيم.

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

<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نمي باشند يعني توابع دوست را نمي توان

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

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

}

مثال :

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

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

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

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

مثال :

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

توابع سازنده يك پارامتري#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 ;

}

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

}

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

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

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

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

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

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

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

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

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

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

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

ها بعنوان 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)اشاره گر

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

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

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

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

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.

Recommended