ک تابع مجموعه ای از دستورات است که در کنار هم یک کار را انجام می دهند. هر برنامهای که با زبان برنامه نویسی C++ نوشته شده باشد، حداقل دارای یک تابع است که main() نام دارد. میتوان در کل برنامه توابع دیگری اضافه کرد.
می توانید کدهای خود را به توابع جداگانه تقسیم کنید که نحوه تقسیم کد بستگی به خود شما دارد اما معمولا نحوه تقسیم بندی به این صورت است که هر تابع یک کار خاص را انجام میدهد.
اعلان یک تابع اطلاعاتی درباره نام تابع، نوع بازگشتی و پارامترهای آن را به کامپایلر می دهد. تعریف یک تابع فرمت کلی آن را فراهم میکند.
کتابخانه استاندارد C++ شامل چندین توابع داخلی است که برنامه می تواند از آن استفاده کند. برای مثال تابع strcat() برای اتصال دو رشته و تابعmemcpy() برای کپی یک مکان حافظه به مکان دیگر مورد استفاده قرار می گیرد که البته توابع بسیار زیادی در C++ وجود دارد.
معمولا برنامه نویسان توابع را با نام های دیگری مانند method و یا subroutin و یا procedure نیز ضدا می زنند.
شکل کلی تعریف یک تابع در C++ به شکل زیر است:
return_type function_name( parameter list ) { body of the function }
تعریف بالا متشکل از یک بخش header و یک بخش بدنه آن است. در اینجا تمام قسمت های یک تابع توضیح داده خواهد شد:
به دلیل آنکه پارامترها اختیاری هستند ممکن است یک تابع پارامتری نداشته باشد.
کد زیر مثالی برای تابعی به نام max() است که دو پارامتر به نام num1 و num2 را دریافت می کند و بزرگترین آن ها را بر می گرداند.
// // function returning the max between two numbers int max(int num1, int num2) { // local variable declaration int result; if (num1 > num2) result = num1; else result = num2; return result; }
C++
Copy
اعلان تابع اطلاعاتی در مورد نحوه فراخوانی و نام تابع به کامپایلر می دهد. بدنه تابع می تواند به صورت جداگانه تعریف شود.
return_type function_name( parameter list );
C++
Copy
اعلان تابع max() که در بالا به آن اشاره کردیم به صورت زیر است:
int max(int num1, int num2);
C++
Copy
نام پارامتر ها در زمان اعلان تابع اهمیتی ندارد و تنها نوع آنها مهم اند. مثال زیر اعلان یک تابع معتبر را ارائه داده است:
int max(int, int);
C++
Copy
اعلان تابع زمانی مورد نیاز است که تابعی را در یک فایلی تعریف می کنید و در فایلی دیگر به آن تابع احتیاج دارید. در این صورت باید تابع را بالای فایلی که آن را میخواهید فراخوانی کنید اعلان کنید.
در زمان ایجاد یک تابع در C++ باید تعیین کنید که تابع قرار است چه کارهایی انجام دهد و برای استفاده از آن تابع، باید آن را فراخوانی کنید.
هنگامی که برنامه تابعی را فراخوانی می کند، کنترل برنامه به تابع منتقل می شود. یک تابع فراخوانی شده وظایف مشخصی را انجام می دهد و هنگامی که مقادیر بازگشتی آن به دست می آید و یا زمانی که دستورات به پایان می رسند، کنترل برنامه به برنامه اصلی منتقل می شود.
تنها با استفاده از نام تابع و پارامترهای مورد نظر آن می توانید تابع را فراخوانی کنید و اگر تابع مقداری را برگرداند می توانید آن مقدار بازگشتی را ذخیره کنید. به مثال زیر توجه کنید:
#includeusing namespace std; // function declaration int max(int num1, int num2); int main () { // local variable declaration: int a = 100; int b = 200; int ret; // calling a function to get max value. ret = max(a, b); cout << "Max value is : " << ret << endl; return 0; } // function returning the max between two numbers int max(int num1, int num2) { // local variable declaration int result; if (num1 > num2) result = num1; else result = num2; return result; }
C++
Copy
تابع max() را به همراه main() نگه داشتیم و کد منبع را کامپایل کردیم. پس از کامپایل و اجرای کد بالا نتیجه زیر نمایش داده می شود
Max value is : 200
C++
Copy
اگر تابعی بخواهد از آرگومان استفاده کند، باید متغیرهایی را برای دریافت این آرگومان ها اعلان کنید. این متغیرها پارامترهای رسمی تابع نامیده می شوند.
پارامترها همانند سایر متغیرهای محلی در داخل تابع عمل میکنند و بلافاصله پس از ورود به تابع ایجاد میشوند و در زمان خروج نیز از بین می روند.
ردیف | توضیحات |
---|---|
1 | فراخوانی توسط مقدار در این روش مقدار واقعی یک آرگومان در پارامتر تابع کپی می شود و تغییرات صورت گرفته در پارامتر آن تابع تاثیری بر آرگومان آن ندارد. |
2 | فراخوانی توسط اشاره گر در این روش آدرس آرگومان در پارامتر کپی می شود و این آدرس در تابع برای دسترسی به آرگومان مورد استفاده قرار می گیرد. این به معنای آن است که اگر تغییری در پارامتر ایجاد شود، بر آرگومان نیز تاثیر می گذارد. |
3 | فراخوانی با ارجاع در این روش آدرس مرجع آرگومان در پارامتر کپی می شود. این آدری مرجع برای دسترسی به آرگومان در زمان فراخوانی مورد استفاده قرار می گیرد. هر تغییری در پارامتر بر روی آرگومان تاثیر گذار است. |
برای ارسال آرگومان ها به توابع به صورت پیش فرض از فراخوانی با مقدار استفاده می شود که به معنی آن است که توابع نمیتوانند مقدار آرگومان ها را در این حالت تغییر دهند.
وقتی که یک تابع را تعریف می کنید می توانید یک مقدار پیش فرض برای هر یک از آخرین پارامترها را تعیین کنید. این مقدار در زمانی که آرگومان مربوطه در هنگام فراخوانی تابع خالی باشد مورد استفاده قرار می گیرد. این کار با استفاده از عملگرها و مقادیر انتسابی برای آخرین پارامترها صورت می گیرد. اگر آرگومان مشخص شود، این مقدار پیش فرض نادیده گرفته شده و مقدار مشخص شده در نظر گرفته می شود. به مثال زیر توجه کنید:
#includeusing namespace std; int sum(int a, int b = 20) { int result; result = a + b; return (result); } int main () { // local variable declaration: int a = 100; int b = 200; int result; // calling a function to add the values. result = sum(a, b); cout << "Total value is :" << result << endl; // calling a function again as follows. result = sum(a); cout << "Total value is :" << result << endl; return 0; }
C++
Copy
پس از کامپایل و اجرای کد بالا نتیجه زیر نمایش داده می شود
Total value is :300 Total value is :120
از اینکه سایت برنامه نویسان را انتخاب کردید متشکریم با تشکر از سایت ilikephp.
دستورات تصمیم گیری به این صورت عمل می کنند که برنامه نویس یک یا چند شرط را برای ارزیابی یا آزمایش برنامه همراه با یک یا چند دستور همراه می کند و در صورت درست بودن شرط، دستورات باید اجرا شوند. همچنین برنامه نویس باید دستوراتی برای شرایط نادرست بودن شرط نیز در نظر بگیرد.
فرم کلی دستورات تصمیم گیری که در بیشتر زبان های برنامه نویسی وجود دارند به صورت زیر است:
زبان برنامه نویسی C++ دستورات تصمیمگیری زیر را پشتیبانی می کند:
ردیف | توضیحات |
---|---|
1 | دستور if |
2 | دستور if…else عملکرد آن شبیه به دستور if است با این تفاوت که در زمان نادرست بودن عبارت بولین، دستور else اجرا می شود. |
3 | دستور switch دستور switch برای بررسی مقدار یک متغیر نسبت به چندین متغیر استفاده می شود. |
4 | دستور if تو در تو می توانید دستور if یا else if را در داخل یک دستور if و یا else if استفاده کنید. |
5 | دستور switch تو در تو می توانید یک دستور switch را در داخل دستور switch دیگری استفاده کنید. |
در آموزش های قبل عملگر شرطی "?" را توضیح دادیم که میتواند برای جایگزینی دستورات if. else استفاده شود. فرم کلی آن به صورت زیر است:
Exp1 ? Exp2 : Exp3;
EXP1،EXP2 و EXP3 عبارت هستند. به نحوه استفاده از : دقت کنید
مقدار '?' به این صورت محاسبه می شود:
ابتدا شرطی که در بخش EXP1 نوشته شده است بررسی می شود و اگر درست باشد EXP2 اجرا می شود در غیر اینصورت EXP3 اجرا می شود.
از اینکه سایت برنامه نویسان را انتخاب کردید متشکریم با تشکر از سایت ilikephp.
ممکن است در طول برنامه شرایطی ایجاد شود که لازم باشد یک دستور را چندین بار اجرا کنید. به طور کلی دستورها پشت هم اجرا می شوند و اجرای دستورات از اولین دستور تابع آغاز می شود و سپس دوم، سوم و الی آخر.
زبان برنامه نویسی ساختارهای کنترلی مختلفی را فراهم می کند تا به کمک آن بتوان دستور های پیچیده را به راحتی اجرا کرد.
حلقه ها در برنامه نویسی به ما اجازه می دهند تا یک دستور و یا گروهی از آنها را چندین بار اجرا کنیم. فرم کلی یک حلقه به صورت زیر است:
زبان c++ انواع مختلفی از حلقه ها را برای تکرار دستورات شرطی ارائه می دهد:
ردیف | نوع حلقه و توضیحات |
---|---|
1 | حلقه while تا زمانی که شرط حلقه درست باشد یک یا چند دستور را تکرار می کند. شرط حلقه در ابتدای حلقه بررسی می شود. |
2 | حلقه for دستورات موجود در حلقه را تا زمانی که شرط حلقه true شود انجام می دهد. |
3 | حلقه do…while عملکرد آن همانند حلقه while است با این تفاوت که شرط حلقه در آخر بررسی می شود. |
4 | حلقه های تودرتو می توانید انواع حلقه ها را با هم ترکیب کنید و از آن ها استفاده کنید. فرقی نمی کند که حلقه از نوع while،for و یا do while باشد. |
یک دستور حلقه while تا زمانی که شرط داده شده درست باشد، دستوراتی را که مشخص شده است را به طور مکرر اجرا میکند.
نحوه نگارش یک حلقه while در C++ همانند زیر است:
while(condition) { statement(s); }
C++
Copy
در اینجا دستورات ممکن است یک جمله و یا مجموعه ای از دستورات باشد و شرط حلقه هر عبارتی می تواند باشد به شرط آن که true بودن آن هر مقداری غیر از صفر باشد. حلقه تا زمانی که شرط true باشد اجرا می شود.
زمانی که شرط حلقه false شود، برنامه به خط بعدی حلقه منتقل می شود.
نکته مهم و اصلی حلقه while این است که ممکن است حلقه هیچگاه اجرا نشود. زمانی که شرط حلقه بررسی می شود و نتیجه آن false باشد، دستورات درون حلقه نادیده گرفته شده و دستور بعد از حلقه اجرا می شود.
#includeusing namespace std; int main () { // Local variable declaration: int a = 10; // while loop execution while( a < 20 ) { cout << "value of a: " << a << endl; a++; } return 0; }
C++
Copy
پس از کامپایل و اجرای کد بالا نتیجه زیر نمایش داده می شود:
value of a: 10 value of a: 11 value of a: 12 value of a: 13 value of a: 14 value of a: 15 value of a: 16 value of a: 17 value of a: value of a: 19
دستور حلقه for یک دستور کنترل تکرار است که شما را قادر میسازد تا دستوراتی را که نیاز دارید چند بار اجرا شوند را به طور موثرتری بنویسید.
نحوه نگارش دستور حلقه for در C++ به صورت زیر است:
for ( init; condition; increment ) { statement(s); }
توضیح نگارش حلقه for در بالا به صورت زیر است:
جریان حلقه
مثال
#includeusing namespace std; int main () { // for loop execution for( int a = 10; a < 20; a = a + 1 ) { cout << "value of a: " << a << endl; } return 0; }
C++
Copy
پس از کامپایل و اجرای کد بالا نتیجه زیر نمایش داده می شود:
value of a: 10 value of a: 11 value of a: 12 value of a: 13 value of a: 14 value of a: 15 value of a: 16 value of a: 17 value of a: value of a: 19
برخلاف حلقه های for و while که ابتدا شرط حلقه را بررسی می کنند، دستور حلقه do. While شرط حلقه را در انتهای دستورات بررسی میکند.
حلقه do. while شبیه حلقه while است با این تفاوت که دستورات حلقه do. while حداقل یکبار اجرا می شوند.
نحوه نگارش دستورات do. While به شرح زیر است:
do { statement(s); } while( condition );
توجه داشته باشید که عبارت شرطی در انتهای حلقه ظاهر می شود، بنابراین دستورات در حلقه یکبار قبل از بررسی شرط اجرا می شود.
اگر شرط حلقه true باشد، جریان حلقه دوباره به دستور do منتقل می شود و این فرایند تا زمانی که شرط حلقه false شود ادامه دارد.
#includeusing namespace std; int main () { // Local variable declaration: int a = 10; // do loop execution do { cout << "value of a: " << a << endl; a = a + 1; } while( a < 20 ); return 0; }
C++
Copy
پس از کامپایل و اجرای کد بالا نتیجه زیر نمایش داده می شود:
value of a: 10 value of a: 11 value of a: 12 value of a: 13 value of a: 14 value of a: 15 value of a: 16 value of a: 17 value of a: value of a: 19
منظور از ایجاد حلقه های تودرتو این است که یک حلقه را می توان در حلقه دیگری قرار داد. در برنامه نویسی C++ می توان تا 265 سطح حلقه تو در تو ایجاد کرد.
نحوه نگارش حلقه تو در تو for در C++ به شکل زیر است:
for ( init; condition; increment ) { for ( init; condition; increment ) { statement(s); } statement(s); // you can put more statements. }
نحوه نگارش حلقه تو در تو while در C++ به شکل زیر است:
do { statement(s); // you can put more statements. do { statement(s); } while( condition ); } while( condition );
مثال
نمونه کد زیر از حلقه تو در تو for برای پیدا کردن اعداد اول بین 2 تا 100 استفاده می کند:
#includeusing namespace std; int main () { int i, j; for(i = 2; i<100; i++) { for(j = 2; j <= (i/j); j++) if(!(i%j)) break; // if factor found, not prime if(j > (i/j)) cout << i << " is prime\n"; } return 0; }
C++
Copy
نتیجه کد بالا به شکل زیر است:
2 is prime 3 is prime 5 is prime 7 is prime 11 is prime 13 is prime 17 is prime 19 is prime 23 is prime 29 is prime 31 is prime 37 is prime 41 is prime 43 is prime 47 is prime 53 is prime 59 is prime 61 is prime 67 is prime 71 is prime 73 is prime 79 is prime 83 is prime 89 is prime 97 is prime
دستورات کنترل حلقه مراحل اجرا را از حالت نرمال آن تغییر می دهد. وقتی اجرای یک حلقه به پایان می رسد، تمام اشیا و متغیرهایی که در آن محدوده ساخته شده بودند به طور خودکار از بین می روند.
دستورات کنترلی زیر در C++ پشتیبانی می شود:
ردیف | دستور کنترلی و توضیح آن |
---|---|
1 | دستور break دستور حلقه و یا switch را متوقف می کند و بلافاصله دستور بعد از آن را اجرا می کند. |
2 | دستور continue به حلقه می گوید که باقی دستورات را نادیده بگیرد و دستور بعدی حلقه را اجرا کند. |
3 | دستور goto کنترل اجرای برنامه را به بخش مشخص شده با label منتقل می کند و البته با این حال توصیه شده از این دستور در برنامه استفاده نشود. |
حلقه بی نهایت
اگر یک شرط هیچگاه نادرست (false) نشود، حلقه بی نهایت می شود. از آنجایی که هیچ کدام از سه عبارتی که برای حلقه for وجود دارد ضروری نیست، میتوانید یک حلقه بی نهایت را با خالی گذاشتن عبارت شرطی ایجاد کنید.
#includeusing namespace std; int main () { for( ; ; ) { printf("This loop will run forever.\n"); } return 0; }
C++
Copy
وقتی عبارات شرطی وجود نداشته باشند، تصور می شود که شرط درست است. برنامه نویسان C++ از دستور'for (;;)' برای ایجاد یک حلقه بی نهایت استفاده می کنند.
نکته: با استفاده از کلید ترکیبی Ctrl+ C می توانید حلقه بی نهایت را به پایان برسانید.
از اینکه سایت برنامه نویسان را انتخاب کردید متشکریم با تشکر از سایت ilikephp
عملگر نمادی است که به کامپایلر دستور می دهد تا عملیات ریاضی را انجام دهد. در زبان برنامه نویسی C++ مجموعه کاملی از این عملگرها وجود دارد که شامل موارد زیر است:
در این آموزش عملگرهای بالا را به ترتیب توضیح خواهیم داد.
عملگر های ریاضی که در C++ پشتیبانی می شوند در جدول زیر قرار گرفته است:
فرض کنید که متغیر A حاوی مقدار ۱۰ و متغیر B حاوی مقدار 20 باشد:
عملگر | توضیحات | مثال |
---|---|---|
+ | برای جمع دو مقدار مورد استفاده قرار می گیرد | A +B = 30 |
- | مقدار عملوند دوم را از مقدار عملوند اول کم می کند | A –B = -10 |
* | مقدار عملوند دوم را از مقدار عملوند اول کم می کند | A *B = 200 |
/ | دو عملوند را در هم ضرب می کند | B / A = 2 |
% | باقیمانده تقسیم مقدار عملوند دوم بر مقدار عملوند اول را برمی گرداند | B % A = 0 |
++ | به مقدار قبلی عملوند یک واحد اضافه می کن | A++ = 11 |
-- | از مقدار قبلی عملوند یک واحد کم می کند | A-- = 9 |
عملگر های رابطه ای زیر در C++ پشتیبانی می شوند:
فرض کنید متغیر A دارای مقدار 10 و متغیر B دارای مقدار 20 باشد:
عملگر | توضیحات | مثال |
---|---|---|
== | بررسی می کند که مقدار دو عملوند با هم برابر است یا نه و اگر برابر باشد شرط درست است | (A == B) is not true |
!= | در صورت برابر نبودن مقدار دو عملوند شرط درست است | (A != B) is true. |
> | در صورتی که مقدار عملوند A (سمت چپ) از B(سمت راست) بزرگتر باشد شرط درست است | (A > B) is not true. |
< | اگر مقدار عملوند A (سمت چپ) از B (سمت راست) کمتر باشد شرط درست است | (A < B) is true. |
>= | در صورتی که مقدار عملوند A (سمت چپ) بزرگتر یا برابر مقدار عملوند B(سمت راست) باشد شرط درست است | (A >= B) is not true. |
<= | در صورتی که مقدار عملوند A (سمت چپ) کمتر یا برابر مقدار عملوند B(سمت راست) باشد شرط درست است | (A <= B) is true. |
عملگرهای منطقی زیر در C++ پشتیبانی می شود.
فرض کنید متغیر A دارای مقدار 10 و متغیر B دارای مقدار 20 باشد:
عملگر | توضیحات | مثال |
---|---|---|
&& | عملگر AND (و منطقی) در صورتی که هر دو عملوند true باشند شرط true است. | (A && B) is false. |
|| | عملگر OR (یا منطقی) در صورتی که فقط یکی از دو عملوند ها true باشد شرط true است. | (A || B) is true. |
! | برای تغییر وضعیت منطعی عملوند و برع آن استفاده می شود. برای مثال اگر شرط برابر true باشد آن را false می کند. | !(A && B) is true. |
عملگرهای بیتی بر روی بیت ها کار می کنند. جداول حقیقی برای &، |، و ^ به شرح زیر است
p | q | p & q | p | q | p ^ q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
فرض کنید اگر A = 60 و B = 13 باشد، در حال حاضر فرمت باینری آنها به شرح زیر خواهد بود:
A = 0011 1100 B = 0000 1101 ----------------- A&B = 0000 1100 A|B = 0011 1101 A^B = 0011 0001 ~A = 1100 0011
عملگر های بیتی پشتیبانی شده در C++ در جدول زیر شرح داده شده است:
فرض کنید متغیر A دارای مقدار ۶۰ و متغیر B دارای مقدار ۱۳ باشد:
عملگر | توضیحات | مثال |
---|---|---|
& | عملگر باینری AND که اگر هر دو عملوند true باشند یک بیت را در نتیجه کپی می کند. | (A & B) که برابر با 12 است و می شود 00001100 |
| | عملگر باینری OR که اگر یکی از عملوند ها true باشد یک بیت را در نتیجه کپی می کند. | (A | B) که برابر با 61 است و می شود 00111101 |
^ | عملگر باینری XOR که اگر هر دو عملوند true یا false نباشند یک بیت در نتیجه کپی می کند. | (A ^ B) will give 49 which is 0011 0001 |
~ | به عملگر یکانی نقیض معروف است و کار آن برع مقدار است. هر جا 1 بود 0 می کند و بلعکس. | ( A ^ B) که برابر است با 49 و می شود 00110001 |
<< | عملگر باینری شیفت چپ | A << 2 که برابر است با 240 و می شود 11110000 |
>> | عملگر باینری شیفت راست | A >> 2 که برابر است با 15 و می شود 0000111 |
عملگر های انتسابی پشتیبانی شده در C++:
عملگر | توضیحات | مثال |
---|---|---|
= | عملگر انتساب ساده که مقدار عملوند راست را در عمولند سمت چپ قرار می دهد | A + B = C که مقدار A + B را در C قرار می دهد |
+= | مقدار عملوند سمت راست را با عمولمند سمت چپ جمه می کند و در ر عملوند سمت چپ قرار می دهد. | C += A که برابر است با C = C + A |
-= | مقدار عملوند سمت راست را از عملوند سمت چپ کم کرده و در عملوند سمت چپ قرار می دهد. | C += A که برابر است با C = C - A |
*= | مقدار عمولند سمت راست را در عملوند سمت چپ ضرب کرده و در عملوند سمت چپ قرار می دهد. | C *= A که برابر است با C = C * A |
/= | مقدار عملوند سمت راست را تقسیم بر مقدار عملوند سمت چپ کرده و نتیجه آن را در عملوند سمت چپ قرار می دهد | C /= A که برابر است با C = C / A |
%= | نتیجه باقیمانده تقسیم مقدار دو عملوند را در عملوند سمت چپ قرار می دهد | C %= A که برابر است با C = C % A |
<<= | عملگر انتساب شیفت به چپ | C <<= 2 که برابر است با C = C << 2 |
>>= | عملگر انتساب شیفت به راست | C >>= 2 که برابر است با C = C >> 2 |
&= | عملگر بیتی AND | C &= 2 که برابر است با C = C & 2 |
^= | عملگر انتساب exclusive OR بیتی | C ^= 2 که برابر است با C = C ^ 2 |
|= | عملگر انتساب inclusive OR بیتی | C |= 2 که برابر است با C = C | 2 |
عملگر متفرقه قابل استفاده در C++:
ردیف | عملگرها و توضیحات |
---|---|
1 | sizeof اندازه متغیر را بر می گرداند |
2 | Condition ? X : Y اگر شرط درست باشد مقدار متغیر x و اگر غلط باشد مقدار متغیر y را بر می گرداند |
3 | , برای انجام دنباله ای از عملیات مورد استفاده قرار می گیرد و مقداری که تولید شده در آخرین عملیاتی که کاما آن را جدا کرده است را بر می گرداند |
4 | . (dot) and -> (arrow) برای دسترسی به اعضای کلاس، union ها و struct ها مورد استفاده قرار می گیرد. |
5 | Cast برای تبدیل نوع انواع داده ها مورد استفاده قرار می گیرد. |
6 | & این عملگر اشاره گر آدرس یک متغیر را بر میگرداند. |
7 | * این عملگر اساره گر به یک متغیر اشاره می کند. مثلا *var; به متغیر var اشاره می کند |
اولویت یک عملگر ترتیب اجرای آن را در یک عبارت تعیین میکند که بر نتیجه عبارت تاثیر گذار است. برخی اولویت بالاتری نسبت به سایر آن ها دارند. برای مثال عملگر ضرب دارای اولویت بالاتری نسبت به عملگر به علاوه است.
برای مثال در عبارت x = 7 + 3 * 2، مقدار x برابر با ۱۳ است و مقدار آن ۲۰ نمی باشد زیرا * اولویت بالاتری نسبت به + دارد. بنابراین ابتدا 2*3 انجام می شود و سپس مقدار آن با 7 جمع می شود. در جدول زیر اولویت عملگرها به ترتیب بیشترین اولویت قرار گرفته است. آن هایی که اولویت کمتری دارند در انتهای جدول قرار داده شدهاند. در یک عبارت ابتدا اجرای عملگری انجام میشود که اولویت بالاتری دارند.
دسته بندی | عملگرها | ترتیب |
---|---|---|
پسوند | () [] -> . ++ - - | چپ به راست |
یگانی | + - ! ~ ++ - - (type)* & sizeof | راست به چپ |
ضربی | * / % | چپ به راست |
افزودنی | + - | چپ به راست |
شیفت | << >> | چپ به راست |
رابطه ای | < <= > >= | چپ به راست |
برابری یا تساوی | == != | چپ به راست |
بیتی AND | & | چپ به راست |
بیتی XOR | ^ | چپ به راست |
بیتی OR | | | چپ به راست |
منطقیAND | && | چپ به راست |
منطقی OR | || | چپ به راست |
شرطی | ?: | راست به چپ |
انتسابی | = += -= *= /= %=>>= <<= &= ^= |= | راست به چپ |
کاما | , | چپ به راست |
از اینکه سایت برنامه نویسان را انتخاب کردید متشکریم با تشکر از سایتilikephp.
یک کلاس حافظه محدوده حضور متغیر در برنامه (scope) و مدت حضور یا طول عمر متغیرها و یا توابع ( Life Time ) را در یک برنامه C++ تعیین می کند.
پس با توصیفات بالا متوجه میشوید که از این پس میتوانید برنامه ای بنویسید که اولا حافظه زیادی اشغال نکند و از منابع حافظه کامپیوتر به صورت بهینه استفاده کند و دوما سرعت اجرای بالاتری داشته باشند و سوما برنامه دارای خطای کمتر و عیب یابی سریع تری نیز میشود.
در زبان c++ 5 نوع کلاس حافظه وجود دارد. کلاس های حافظه زیر را میتوان در یک برنامه C++ استفاده کرد.
auto یک کلاس حافظه پیش فرض برای تمامی متغیر های محلی است و اگر نوع کلاس حافظه تعیین نشود، auto برای آن در نظر گرفته می شود.
{ int mount; auto int month; }
C++
Copy
مثال فوق دو متغیر را با یک کلاس حافظه یکسان تعریف می کند. کلاس حافظه auto فقط می تواند در داخل توابع، مانند متغیرهای محلی استفاده شود.
کلاس حافظه register یا ثبات برای تعریف متغیرهای محلی استفاده میشود که باید به جای RAM در register یا ثبات های CPU ذخیره می شوند. بنابراین سرعت انجام عملیات با آنها بسیار بالاست و در نتیجه موجب افزایش سرعت اجرای برنامه میشود اما محدودیت هایی ر ا نیز ایجاد میکنندکه در زیر به برخی از آنها به اختصار اشاراه می کنیم.
{ register int miles; }
C++
Copy
register باید تنها برای متغیرهایی که نیاز به دسترسی سریع مانند شمارنده ها دارند استفاده شود. لازم به ذکر است که تعریف register به این معنی نیست که متغیر در یک register ذخیره خواهد شد. بلکه به این معنی است که ممکن است با توجه به سخت افزار و محدودیت های پیاده سازی در یک register ذخیره شود.
کلاس حافظه static به کامپایلر میگوید تا به جای آنکه یک متغیر محلی را هر بار که وارد و خارج محدوده می شود ایجاد کند و از بین ببرد، در طول برنامه حفظ کند. بنابراین ساختن متغیرهای محلی به صورت static اجازه می دهد تا ارزش خود را در تمام مدت فراخوانی های توابع حفظ کنند.
static modifier ممکن است بر روی متغیرهای سراسری اعمال شود. از زمانی که این کار انجام شود محدوده یا scope یک متغیر که در آن اعلان شده است محدود می شود.
در C++ هنگامی که static در یکی از اعضای کلاس ها مورد استفاده قرار می گیرد تنها یک نسخه از آن عضو را می توان بین اشیاء دیگر کلاس ها به اشتراک گذاشت.
#include// Function declaration void func(void); static int count = 10; /* Global variable */ main() { while(count--) { func(); } return 0; } // Function definition void func( void ) { static int i = 5; // local static variable i++; std::cout << "i is " << i ; std::cout << " and count is " << count << std::endl; }
C++
Copy
وقتی کد بالا کامپایل و اجرا شود نتیجه زیر نشان داده خواهد شد
i is 6 and count is 9 i is 7 and count is 8 i is 8 and count is 7 i is 9 and count is 6 i is 10 and count is 5 i is 11 and count is 4 i is 12 and count is 3 i is 13 and count is 2 i is 14 and count is 1 i is 15 and count is 0
کلاس حافظه extern یا خارجی برای ارجاع به یک متغیر سراسری که برای همه فایل های برنامه قابل مشاهده است استفاده می شود . گاهی برنامه ای که می نویسیم خیلی طولانی است که بهتر است برنامه را به واحدهای کوچکتری تقسیم بندی کرد. اگر بخواهیم که متغیرهایی را که در واحد اصلی تعریف شده اند را در واحدهای فرعی استفاده کنیم و دیگر آنها را دوباره در واحدهای فرعی تعریف نکنیم، میتوانیم متغیرهای مورد نظر را با استفاده از کلاس حافظه خارجی یا extern تعریف کنیم . اگر از extern استفاده کنید نمی توانید متغیر را مقدار دهی اولیه کنیدراما می توانید نام آن را در یک مکان ذخیره کنید. در زمان استفاده از extern تنها می توانید آن را اعلان کنید. از این کلاس حافظه عموما در پروژه های بزرگ که حاوی چندین فایل هستند استفاده می شود. مثال زیر نحوه استفاده از کلاس حافظه extern را به طور کامل توضیح داده است.
هنگامی که چندین فایل دارید و یک متغیر یا تابع سراسری را تعریف می کنید که در سایر فایل ها نیز استفاده می شود، extern در فایل دیگری برای ارجاع متغیر یا تابع تعریف شده استفاده می شود. برای درک اینکه extern در کجا استفاده می شود فقط بدانید که برای اعلان یک متغیر سراسری یا یک تابع در فایل دیگر استفاده میشود.
extern modifier اغلب زمانی مورد استفاده قرار می گیرد که دو یا چند فایل متغیرهای سراسری و یا توابع یکسانی را اشتراک بگذارند که در زیر توضیح داده شده است.
#includeint count ; extern void write_extern(); main() { count = 5; write_extern(); }
C++
Copy
#includeextern int count; void write_extern(void) { std::cout << "Count is " << count << std::endl; }
C++
Copy
در اینجا، کلمه کلیدی extern برای اعلان شمارش در یک فایل دیگر مورد استفاده قرار می گیرد. در حال حاضر این دو فایل را به صورت زیر کامپایل کنید.
$g++ main.cpp support.cpp -o write
تلاش کنید تا به درستی برنامه را بنویسید و نتیجه را به صورت زیر بررسی کنید
$./write 5
کلاس حافظه mutable تنها بر روی اعضای کلاس که بعدها در ادامه این آموزش ها توضیح داده خواهد شد اجرا می شود. پس از آن که یک شی را const تعریف می کنید، دیگر نمی توانید مقادیر اعضای آن را تغییر دهید. اما اگر عضوی از این کلاس را mutable تعریف کنید، می توانید حتی در حالیکه آن را const تعریف کرده اید، مقادیر آن را تغییر دهید. در جلسات بعدی بیشتر در مورد این نوع کلاس حافظه توضیح خواهیم داد.
از اینکه سایت برنامه نویسان را انتخاب کردید متشکریمبا تشکر از سایت ilikephp.
با استفاده از نوع داده ای اصلاح کننده ها (Data Type Modifier) های موجود در زبان برنامه نویسی C++ می توانید نوع متغیرها را تغییر دهید.
لیست انواع نوع داده ای اصلاح کننده ها در اینجا قرار گرفته است:
اصلاح کننده های signed، unsigned ،long و short می توانند برداده های مبتنی بر integrer اعمال شوند. علاوه بر آن signed و unsigned می توانند بر char و long نیز اعمال شوند. برای مثال unsigned long int.
Modifire های signed و unsigned می توانند به عنوان پیشوندی برای Modifire های long و short استفاده شوند.
می توانید به راحتی با استفاده از کلمه unsigned ، short و یا long بدون int این کار را انجام دهید و برنامه خود به طور اتوماتیک int را تشخیص میدهد. برای مثال در هر دو دستور زیر متغیر عدد صحیح بدون علامت است:
unsigned x; unsigned int y;
برای درک بهتر تفاوت Modifire های signed و unsigned بهتر است قطعه کد کوتاه زیر را اجرا کنید.
#includeusing namespace std; /* This program shows the difference between * signed and unsigned integers. */ int main() { short int i; // a signed short integer short unsigned int j; // an unsigned short integer j = 50000; i = j; cout << i << " " << j; return 0; }
C++
Copy
پس از اجرای کد بالا نتیجه زیر نشان داده خواهد شد:
-15536 50000
نتیجه کد بالا به دیلیل آن است که unsigned short که الگوی بیتی 50000 است به صورت 15،536- تفسیر می شود.
Type qualifier ها اطلاعات اضافی را در مورد متغیرهای قبل از آنها ارائه می دهند. در جدول زیر انواع type qualifire ها در زبان برنامه نویسی C++ ارائه شده است.
شماره | Qualifier و معنی آن |
---|---|
1 | const اشیا و متغیرهایی که از نوع const تعریف می شوند در حین اجرای برنامه غیر قابل تغییر هستند. |
2 | volatile اصلاح کننده یا متغیر volatile به کامپایلر می گوید که مقدار متغیر ممکن است به شیوه ای که صراحتا توسط برنامه مشخص نشده تغییر نکند. متغیرهایی از نوع volatile متغیرهایی هستند که ممکن است مقدار آنها توسط یک پردازش خارجی تغییر یابد. این پردازش میتواند وقوع یک وقفه، یا تغییر از طریق یک پردازش موازی باشد. |
3 | restrict کلمه کلیدی restrict به کامپایلر دستور می دهد که از بارگذاری مجدد یک متغیر جلوگیری کرده و برای بهینه سازی کدها از مقدار قبلی که بارگذرای شده است، استفاده کند.
از اینکه سایت برنامه نویسان را انتخاب کردید متشکریم با تشکر از سایت ilikephp. |
ثابت ها به مقادیر ثابت اشاره میکنند که ممکن است در طول برنامه تغییر نکنند که به آن ها لیترال (لفظ) نیز می گویند. یک ثابت می تواند از هر نوع داده ای که در زبان برنامه نویسی C++ وجود دارد باشد که شامل عدد صحیح، اعداد اعشاری، کاراکترها، رشته ها و مقادیر بولی است. ثابت ها دقیقا مانند متغیر های معمولی هستند با این تفاوت که پس از تعریف آن ها، مقادیرشان غیرقابل تغییر میشود.
یک لیترال عددی می تواند یک ثابت دهدهی، دسیمال و یا هگزادسیمال باشد. برای مثال از پیشوند 0X و یا 0x در هگزادسیمال و از پیشوند 0 برای اعداد دهدهی استفاده می شود و اعداد دسیمال پیشوندی ندارند.
یک لیترال عددی می تواند پسوند نیز داشته باشد که ترکیبی از U و L برای unsigned و long است. پسوند می تواند با حروف بزرگ و کوچک و با هر ترتیبی باشد. چند نمونه از لیترال عددی به این ترتیب است:
212 // Legal 215u // Legal 0xFeeL // Legal 078 // Illegal: 8 is not an octal digit 032UU // Illegal: cannot repeat a suffix
همچنین مثال هایی از سایر مدلهای لیترال عددی به شرح زیر است:
85 // decimal 0213 // octal 0x4b // hexadecimal 30 // int 30u // unsigned int 30l // long 30ul // unsigned long
یک لیترال اعشاری تشکیل شده از یک عدد صحیح، یک نقطه اعشار، یک قسمت کسری و یک بخش توان است. لیترال های اعشاری قابل نمایش به صورتدسیمال و نمایی هستند.
اگر بخواهید به صورت دسیمال نمایش دهید، باید از یک نقطه اعشار یا توان و یا هرد دو استفاده کنید و اگر قصد دارید آن را به صورت نمایی نشان دهید باید از بخش عدد صحیح یا بخش کسری و یا هر دو استفاده کنید.
چند مثال از لیترال های اعشاری در زیان برنامه نویسی C++ :
3.14159 // Legal 314159E-5L // Legal 510E // Illegal: incomplete exponent 210f // Illegal: no decimal or exponent .e55 // Illegal: missing integer or fraction
به طور کلی دو نوع لیترال بولی وجود دارد که همه آنها بخشی از کلمات کلیدی استاندارد ++C هستند.
توجه کنید که مقدار true برابر با یک و یا مقدار false برابر با صفر نیست.
لیترال کاراکتری در تک کوتیشن قرار می گیرد. اگر لیترال کاراکتری با L شروع شود ( تنها حروف بزرگ) مانند (L'x ') ، باید در نوع متغیر wchar_t ذخیره شود. در غیر این صورت لیترال های کاراکتری (مثلا "x") را می توان در یک متغیر ساده از نوع char ذخیره شود.
یک لیترال کاراکتری شامل یک کاراکتر ساده مانند ('x') ، کاراکتر کنترلی مانند ('\t') و یا کاراکتر جهانی مانند ('\u02c0') است.
کاراکتر های به خصوصی در C++ وجود دارند که اگر قبل از آنها یک بک اسلش (\) قرار بگیرد، معنی خاصی پیدا می کنند برای مثال برای خط جدید n\، یا برای تب t\ استفاده می شود. در اینجا لیستی از این کاراکتر ها برای شما قرار گرفته است.
کاراکترهای کنترلی | عملکرد |
---|---|
\\ | درج کاراکتر بک اسلش \ |
\' | درج کاراکتر تک کوتیشن ' |
\" | درج کاراکتر دابل کوتیشن " |
\? | درچ کاراکتر علامت سوال ? |
\a | صدای اخطار یا بیپ |
\b | جرکت به عقب یا Backspace |
\f | Form feed |
\n | خط جدید |
\r | Carriage return |
\t | ایجاد فاصله افقی |
\v | ایجاد فاصله عمودی |
\ooo | درج اعداد بر مبنای 8 از یک تا 3 عدد |
\xhh . . . | درج اعداد بر مبنای 16 از یک تا چند عدد |
#includeusing namespace std; int main() { cout << "Hello\tWorld\n\n"; return 0; }
C++
Copy
پس از کامپایل و اجرای کد بالا نتیجه زیر نمایان خواهد شد.
Hello World
لیترال رشته ای در داخل دو کوتیشن می گیرد و کاراکترهای آن مانند یک لیترال کاراکتری است.
شما می توانید یک خط طولانی را به چندین خط کوتاه با استفاده از لیترال رشته ای تبدیل کنید و آنها را با استفاده از فضای خالی سفید از بقیه جدا کنید.
در اینجا مثال هایی از فرم مختلف لیترال رشته ای قرار داده شده است که هر سه فرم کاملا نتیجه یکسانی دارند:
"hello, dear" "hello, \ dear" "hello, " "d" "ear"
روش بسیار ساده ای در++C برای تعریف ثابت ها وجود دارد.
نحوه استفاده از دستور #define برای تعریف یک ثابت به صورت زیر است:
#define identifier value
حال به شرح آن می پردازیم:
#includeusing namespace std; #define LENGTH 10 #define WIDTH 5 #define NEWLINE '\n' int main() { int area; area = LENGTH * WIDTH; cout << area; cout << NEWLINE; return 0; }
C++
Copy
پس از کامپایل و اجرای کد بالا نتیجه زیر نمایش داده خواهد شد.
50
می توانید با استفاده از پیشوند const به اعلان یک ثابت از نوع خاص بپردازید.
const type variable = value;
حال به شرح آن می پردازیم:
#includeusing namespace std; int main() { const int LENGTH = 10; const int WIDTH = 5; const char NEWLINE = '\n'; int area; area = LENGTH * WIDTH; cout << area; cout << NEWLINE; return 0; }
C++
Copy
پس از کامپایل و اجرای کد بالا نتیجه زیر نمایش داده خواهد شد.
50
توجه کنید که برای نوشتار خوب و خوانایی بهتر در برنامه نویسی بهتر است برای تعریف ثابت ها از حروف بزرگ استفاده کنید.
از اینکه سایت برنامه نویسان را انتخاب کردید متشکریم با تشکر از سایت ilikephp.
به قسمتی از برنامه که برنامه نویس می تواند در آن حوزه متغیرهای خود را تعریف یا اعلان کند، scope گفته میشود.
به طور کلی سه محدوده یا scope برای تعریف یا اعلان متغیر وجود دارد:
توابع و پارامترهای آنها را در فصل های بعدی به طور کامل توضیح خواهیم داد. در اینجا قصد داریم در مورد متغیرهای محلی و سراسری صحبت کنیم.
متغیر هایی که در داخل یک تابع یا یک حوزه اعلان میشوند متغیرهای محلی نامیده می شوند. این متغیر ها تنها در محدوده ای که تعریف شده اند (تابع یا محدوده) میتوانند استفاده شوند. متغیرهای محلی برای توابعی که خارج از آنها باشد قابل شناسایی نیستند. در اینجا مثالی برای استفاده از متغیرهای محلی درC++ خواهیم داشت:
#includeusing namespace std; int main () { // Local variable declaration: int a, b; int c; // actual initialization a = 10; b = 20; c = a + b; cout << c; return 0; }
C++
Copy
متغیرهای سراسری در خارج از تمام توابع و به طور معمول در بالای برنامه تعریف می شود و مقدار خود را در تمام مدت برنامه حفظ خواهند کرد.
یک متغیر سراسری می تواند توسط هر تابعی قابل دسترسی باشد. به عبارت دیگر برای استفاده در تمام مدت برنامه بعد از اعلان در دسترس است. در اینجا مثالی برای استفاده از متغیر سراسری و محلی در زبان C++ ارائه خواهیم داد:
#includeusing namespace std; // Global variable declaration: int g; int main () { // Local variable declaration: int a, b; // actual initialization a = 10; b = 20; g = a + b; cout << g; return 0; }
C++
Copy
یک برنامه می تواند نامی یکسان و مشابه برای متغیر سراسری ومحلی داشته باشد. اما در نظر داشته باشید که متغیر محلی به متغیر سراسری اولیت دارد. برای مثال:
#includeusing namespace std; // Global variable declaration: int g = 20; int main () { // Local variable declaration: int g = 10; cout << g; return 0; }
C++
Copy
پس از کامپایل و اجرای کد بالا نتیجه زیر نمایش داده خواهد شد.
10
وقتی که یک متغیر محلی تعریف می شود توسط سیستم مقداردهی اولیه نمی شود و باید خودتان آن را مقدارهی کنید. اما متغیرهای سراسری به طور خودکار توسط سیستم، زمانی که آنها را تعریف می کنید مقداردهی اولیه میشوند.
در جدول زیر مقدار پیش فرضی که یک متغیر سراسری بر اساس نوع داده ای خود می گیرد را آورده ایم:
نوع داده | مقدار پیش فرض |
---|---|
int | 0 |
char | '\0' |
float | 0 |
double | 0 |
pointer | NULL |
این یک تمرین خوب برای این است که متغیر ها را به درستی مقداردهی کنید. در غیر این صورت در برخی موارد برنامه ها می توانند نتایج غیرمنتظرهای را تولید کند.
از اینکه سایت برنامه نویسان را انتخاب کردید متشکریم با تشکر از سایت ilikephp.
همانطور که از نام متغیرها پیداست، محلی برای ذخیره داده ها در حافظه با قابلیت نام گذاری هستند که می توانند توسط برنامه تغییر پیدا کند. در C++ هر متغیر یک نوع خاص دارد که اندازه و لایه آن را در حافظه مشخص می کند.
در واقع محدوده ای از مقدارهایی که می توانند در آن حافظه ذخیره شوند و مجموعه عملیاتی که می تواند به آن متغیر اعمال شود.
نام یک متغیر باید حتما با یک حرف یا underscore ( _ ) شروع شود و نیز می تواند از مجموعه ای از حروف، اعداد و underscore ( _ ) تشکیل شده باشد. حروف بزرگ و کوچک متمایز هستند چرا که C++ نسبت به حروف حساس است.
همانطور که در قسمت قبل توضیح داده شد متغیرهای اصلی زیر در++C وجود دارند.
شماره | نوع و توضیحات |
---|---|
1 | bool مقدار بولی ( true یا false را ذخیره میکند) |
2 | char برای ذخیره داده های کاراکتری مانند : 'a' , 'z' , 'W' بکار می رود |
3 | int برای ذخیره اعداد صحیح مانند 198، -4، 4568 استفاده می شود |
4 | float برای ذخیره اعداد اعشاری مثل 52.5، 2765.11 بکار می رود |
5 | double برای اعداد اعشاری بزرگتر از float استفاده می شود |
6 | void هیچ مقداری را نمی گید. عدم وجود نوع داده ای را نشان می دهد |
7 | wchar_t برای ذخیره بزرگترین میدان انواع کاراکترهای تعریف شده استفاده می شود |
C++ همچنین اجازه می دهد تا انواع مختلفی از متغیرها مانند آرایه ها (array)، کلاس ها (classess)، اشاره گرها (pointer)، داده های شمارشی (enum) و . را تعریف کنیم که در قسمت های بعدی آنها را توضیح خواهیم داد.
در اینجا قصد داریم تا نحوه تعریف، declare و استفاده از انواع مختلف متغیر ها را توضیح دهیم.
هنگام تعریف یک متغیر در واقع به کامپایلر می گوید که کجا و چه مقدار از فضای حافظه برای ایجاد یک متغیر را نیاز داریم . با تعریف یک متغیر نوع آن را مشخص میکنیم که شامل یک یا چند متغیر از همان نوع است.
یک متغیر در C++ به صورت زیر تعریف می شود:
type variable_list;
در اینجا type باید یک نوع داده ای معتبر باشد که شامل، char, w_char, int, float, double, bool، double و یا هر شی تعریف شده توسط کاربر است. variable_list ممکن است شامل یک یا چند شناسه یا نام باشد که توسط کاما جدا می شوند. برخی از declarations های معتبر در زیر آمده است
int i, j, k; char c, ch; float f, salary; double d;
C++
Copy
خط int i، j، k؛ متغیرها را تعریف می کند و به کامپایلر دستور می دهد متغیرهایی با نام i، j و k از نوع int ایجاد کند. همچینین می توانید متعیرها را در هنگام تعریف مقداردهی نیز کنید که برای انکار از عملگر تساوی (=) استفاده می کنند.
مثال:
type variable_name = value;
چند مثال برای این عبارت بالا آورده شده است:
extern int d = 3, f = 5; // declaration of d and f. int d = 3, f = 5; // definition and initializing d and f. byte z = 22; // definition and initializes z. char x = 'x'; // the variable x has the value 'x'.
C++
Copy
برای تعریف بدون یک initializer: متغیرهایی با طول ذخیره سازی استاتیک به طور ضمنی با NULL (تمام بایت ها مقدار 0 هستند) initialized می شوند؛ مقدار initial تمام متغیرهای دیگر تعریف نشده است.
در زمانیکه برنامه حاوی چندین سورس فایل باشد و بخواهیم از یک متغییر سراسری در خارج از آن فایلی که تعریف شده (define) استفاده کنیم، باید آن متغییر را در جایی غیر از فایل اصلی اعلان کنیم.
اعلان یک متغیر کامپایلر را آگاه می کند که متغیری با نام و نوع داده ای خاص وجود دارد تا کامپایلر بتواند در ادامه بدون نیاز به جزئیات کامل در مورد متغیر آن را کامپایل کند. اعلان یک متغیر تنها در زمان کامپایل مفهوم دارد و کامپایلر در زمان اتصال به برنامه به متغیر واقعی تعریف شده نیاز دارد.اعلان متغیر زمانی مفید است که از چندین فایل استفاده می کنید و متغیرهای خود را در یکی از فایل هایی که در زمان اتصال برنامه در دسترس هستند، تعریف می کنید. برای اعلان یک متغیر می توانید از کلمه کلیدی extern در هر مکان استفاده منید که معمولا آن را در header برنامه استفاده می کنند. اگرچه شما می توانید یک متغیر را چند بار در برنامه C++ خود اعلان کنید، اما می توان آن را فقط یک بار در یک فایل، یک تابع یا یک بلوک از کد تعریف کرد.
مثال
مثال زیر را در نظر بگیرید که متغیر در بالا declare شده است، اما در داخل تابع اصلی تعریف شده است.
#includeusing namespace std; // Variable declaration: extern int a, b; extern int c; extern float f; int main () { // Variable definition: int a, b; int c; float f; // actual initialization a = 10; b = 20; c = a + b; cout << c << endl ; f = 70.0/3.0; cout << f << endl ; return 0; }
C++
Copy
وقتی کد های مثال بالا کامپایل و اجرا شود نتیجه زیر نمایش داده خواهد شد.
30 23.3333
دقیقا همان مفهومی که در زمان اعلان متغیر استفاده شد برای اعلان تابع نیز مورد استفاده قرار می گیرد. برای مثال:
// function declaration int func(); int main() { // function call int i = func(); } // function definition int func() { return 0; }
C++
Copy
دو نوع عبارت در ++C وجود دارد:
Lvalue: آدرسی از حافظه است که قابلیت ذخیره کردن در آن وجود دارد. یک Lvalue ممکن است در سمت راست یا چپ یک تساوی قرار بگیرد. (مانند متغیرها که می توانند در هر دو طرف تساوی قرار بگیرند)
Rvalue: آدرسی از حافظه است که تنها میتوان اطلاعات آن قسمت از حافظه را خواند و تغییری در آن ممکن نیست. (مانند اعداد که فقط می توانند در سمت راست یک تساوی قرار بگیرند و نمی توان مقداری را به آن ها نسبت داد)
در مثال زیر متغیر g را میبینید که در دو طرف تساوی مورد استفاده قرار گرفته است
// متغیر ها می توانند در هر دو طرف تساوی قرار بگیرند int g = 20; int b = g;
C++
Copy
در مثال زیر که همواره یک عبارت غلط است نمی توان یک عدد را به عددی دیگر نسبت داد.
10 = 20;
از اینکه سایت برنامه نویسان را انتخاب کردید متشکریم با تشکر از سایت ilikephp.
در هنگام نوشتن برنامه، با هر زبان برنامه نویسی که باشید، باید از متغیرهای مختلف برای ذخیره اطلاعات استفاده کنید. متغیرها در واقع مکان رزرو شده برای ذخیره مقادیر هستند. این بدان معنی است که وقتی یک متغیر ایجاد میکنید، مقداری از حافظه را رزرو می کنید. ممکن است بخواهید اطلاعاتی از انواع داده ها مثل نوع داده بولی (boolean)، نوع داده اعشار (floating point)، نوع داده اعشار با دقت مضاعف (double floating point)، نوع داده عدد صحیح (integer)، نوع داده کاراکتر (wide character) را ذخیره کنید. بر اساس نوع داده متغیر ، سیستم عامل قسمتی از حافظه را به آن اختصاص می دهد و تصمیم می گیرد که چه چیزی در حافظه ذخیره شود.
++C یک مجموعه کامل از انواع داده ای را ارائه می دهد. در جدول زیر 7 نوع داده ای اصلی در C++ را مشاهده می کنید.
نوع داده ای | کلمه کلیدی |
---|---|
Boolean | bool |
Character | char |
Integer | int |
Floating point | float |
Double floating point | double |
Valueless | void |
Wide character | wchar_t |
بعضی از انواع داده های اصلی را می توان با استفاده از یک یا چند اصلاح کننده، اصلاح کرد.
• signed
• unsigned
• short
• long
جدول زیر نوع متغیر ها به همراه مقدار حافظه ای که برای ذخیره مقادیر آنها نیاز است، حداکثر و حداقل مقداری را که می توانند ذخیره کنند را نشان میدهد.
جدول
اندازه متغیر ها می تواند با توجه به کامپایلر و سیستمی که استفاده می کنید با آنچه که در جدول نشان داده شده است متفاوت باشد. در زیر مثالی برای نشان دادن اندازه داده های مختلف بر روی کامپیوتر شما ارائه شده است.
#includeusing namespace std; int main() { cout << "Size of char : " << sizeof(char) << endl; cout << "Size of int : " << sizeof(int) << endl; cout << "Size of short int : " << sizeof(short int) << endl; cout << "Size of long int : " << sizeof(long int) << endl; cout << "Size of float : " << sizeof(float) << endl; cout << "Size of double : " << sizeof(double) << endl; cout << "Size of wchar_t : " << sizeof(wchar_t) << endl; return 0; }
C++
Copy
در مثال بالا برای شروع خط جدید از endl در انتهای خروجی استفاده شده است. endl باعث خالی شدن بافر C++ می شود. همچنین از عملگر << برای انتقال مقادیر به صفحه نمایش استفاده شده است و نیز با استفاده از تابع sizeof() برای گرفتن اندازه انواع داده های مختلف استفاده می کنیم.
پس از کامپایل و اجرای کد بالا نتیجه زیر نمایش داده خواهد شد که میتواند در هر کامپیوتری متفاوت باشد.
Size of char : 1 Size of int : 4 Size of short int : 2 Size of long int : 4 Size of float : 4 Size of double : 8 Size of wchar_t : 4
می توانید با استفاده از اعلان typedef یک نام برای نوع داده ای مورد نظر خود انتخاب کنید. در زیر مثال ساده از نحوه تعریف یک نوع داده ای جدید با استفاده از اعلان typedef ارائه شده است.
typedef type newname;
در مثال زیر به کامپایلر می گوییم که feet نام جدیدی برای نوع داده ای int است.
typedef int feet;
C++
Copy
حال با نام جدید feet که برای نوع داده ای int ایجاد کرده اید می توانید یک متغیر جدید به نام distance ایجاد کرده و مقدار دهی کنید.
feet distance = 12;
C++
Copy
برای تعریف مقادیر قابل شمارش از انواع داده ای شمارشی یا enum استفاده می شود. enum یک نوع داده ای است که توسط کاربر و با یک نام اختیاری تعریف می شود. هر نوع داده ای enum از تعدادی شمارنده یا enumerator تشکیل می شود.
برای تعریف یک نوع داده شمارشی، از کلمه کلیدی enum استفاده می شود. در زیر چگونگی تعریف یک نوع شمارشی را مشاهده می کنید.
enum enum-name { list of names } var-list;
در بالا enum-name نام نوع شمارنده (نام کل مجموعه) است و در قسمت list of names میتونادی چندین نام را که با کاما از هم جدا شده اند تعریف کنید.
برای مثال کد زیر یک شمارنده برای چند نوع رنگ را تعریف میکند که colors نامیده میشود و متغیر c برای نوع colors در نظر گرفته شده است. و در نهایت c برابر blue قرار داده شده است.
enum color { red, green, blue } c; c = blue;
C++
Copy
به طور پیش فرض مقدار نام اول یعنی red برابر با 0، نام دوم برابر با 1، نام سوم برابر با 2 است و این روند به همین ترتیب ادامه خواهد داشت. اما با اضافه کردن یک آغازگر میتوانید نام و مقدار اولیه دلخواه را به آن بدهید. برای مثال در مثال زیر green مقدار ۵ را دارد.
enum color { red, green = 5, blue };
C++
Copy
در اینجا blue مقدار 6 را خواهد داشت زیرا هر کدام باید بزرگتر از مورد قبلی خود باشند.
از اینکه سایت برنامه نویسان را انتخاب کردید متشکریم با تشکر از سایت ilikephp.
درباره این سایت