سایت برنامه نویسان



ک تابع مجموعه ای از دستورات است که در کنار هم یک کار را انجام می دهند. هر برنامه‌ای که با زبان برنامه نویسی C++ نوشته شده باشد، حداقل دارای یک تابع است که  main() نام دارد. می‌توان در کل برنامه توابع دیگری اضافه کرد.
می توانید کدهای خود را به توابع جداگانه تقسیم کنید که نحوه تقسیم کد بستگی به خود شما دارد اما معمولا نحوه تقسیم بندی به این صورت است که هر تابع یک کار خاص را انجام میدهد.
اعلان یک تابع اطلاعاتی درباره نام تابع، نوع بازگشتی و پارامترهای آن را به کامپایلر می دهد. تعریف یک تابع فرمت کلی آن را فراهم می‌کند.
کتابخانه استاندارد C++ شامل چندین توابع داخلی است که برنامه می تواند از آن استفاده کند. برای مثال تابع strcat() برای اتصال دو رشته و تابعmemcpy() برای کپی یک مکان حافظه به مکان دیگر مورد استفاده قرار می گیرد که البته توابع بسیار زیادی در C++ وجود دارد.
معمولا برنامه نویسان توابع را  با نام های دیگری مانند method و یا subroutin و یا procedure نیز ضدا می زنند.

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

شکل کلی  تعریف یک تابع در C++ به شکل زیر است:
 

return_type function_name( parameter list ) {
   body of the function
}

تعریف بالا متشکل از یک بخش header و یک بخش بدنه آن است. در اینجا تمام قسمت های یک تابع توضیح داده خواهد شد:

  • return type : نوع داده ای که تابع بعد از اتمام کارش قرار است برگرداند را مشخص میکند. اگر قرار است تابع هیچ مقداری برنگرداند می توانید آن را void تعریف کنید.
  • function name : نشان دهنده نام واقعی یک تابع است. اسم تابع و لیست پارامترهای آن امضای یک تابع را تشکیل می دهند.
  • parameter list : یک پارامتر مانند یک  placeholder عمل می کند و زمانی که یک تابع فراخوانی می شود یک مقدار به پارامتر منتقل می شود. این مقدار به عنوان پارامتر یا آرگومان در نظر گرفته می شود. منظور از لیست پارامترها، نوع، ترتیب و تعداد پارامترهای یک تابع است.

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

مثال

کد زیر مثالی برای تابعی به نام 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++  باید تعیین کنید که تابع قرار است چه کارهایی انجام دهد و برای استفاده از آن تابع، باید آن را فراخوانی کنید.
هنگامی که برنامه تابعی را فراخوانی می کند، کنترل برنامه به تابع منتقل می شود. یک تابع فراخوانی شده وظایف مشخصی را انجام می دهد و هنگامی که مقادیر بازگشتی آن به دست می آید و یا زمانی که دستورات به پایان می رسند، کنترل برنامه به برنامه اصلی منتقل می شود.
تنها با استفاده از نام تابع و پارامترهای مورد نظر آن می توانید تابع را فراخوانی کنید و اگر تابع مقداری را برگرداند می توانید آن مقدار بازگشتی را ذخیره کنید. به مثال زیر توجه کنید:
 

#include 
using 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

فراخوانی با ارجاع

در این روش آدرس مرجع آرگومان در پارامتر کپی می شود. این آدری مرجع برای دسترسی به آرگومان در زمان فراخوانی مورد استفاده قرار می گیرد. هر تغییری در پارامتر بر روی آرگومان تاثیر گذار است.

برای ارسال آرگومان ها به توابع به صورت پیش فرض از فراخوانی با مقدار استفاده می شود که به معنی آن است که توابع نمی‌توانند مقدار آرگومان ها را در این حالت تغییر دهند.

مقادیر پیش فرض برای پارامتر ها

وقتی که یک تابع را تعریف می کنید می توانید یک مقدار پیش فرض برای هر یک از آخرین پارامترها را تعیین کنید. این مقدار در زمانی که آرگومان مربوطه در هنگام فراخوانی تابع خالی باشد مورد استفاده قرار می گیرد. این کار با استفاده از عملگرها و مقادیر انتسابی برای آخرین پارامترها صورت می گیرد. اگر آرگومان مشخص شود، این مقدار پیش فرض نادیده گرفته شده و مقدار مشخص شده در نظر گرفته می شود. به مثال زیر توجه کنید:
 

#include 
using 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++
زبان برنامه نویسی 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 تا زمانی که شرط داده شده درست باشد، دستوراتی را که مشخص شده است را به طور مکرر اجرا میکند.

فلوچارت حلقه while در c++

دستور while

نحوه نگارش یک حلقه while در C++ همانند زیر است:

while(condition) {
   statement(s);
}

C++

Copy

در اینجا دستورات ممکن است یک جمله و یا مجموعه ای از دستورات باشد و شرط حلقه هر عبارتی می تواند باشد به شرط آن که true بودن آن هر مقداری غیر از صفر باشد. حلقه تا زمانی که شرط true باشد اجرا می شود.
زمانی که شرط حلقه false شود، برنامه به خط بعدی حلقه منتقل می شود.

نکته مهم و اصلی حلقه while این است که ممکن است حلقه هیچ‌گاه اجرا نشود. زمانی که شرط حلقه بررسی می شود و نتیجه آن false باشد، دستورات درون حلقه نادیده گرفته شده و دستور بعد از حلقه اجرا می شود.
 

#include 
using 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 یک دستور کنترل تکرار است که شما را قادر میسازد تا دستوراتی را که نیاز دارید چند بار اجرا شوند را به طور موثرتری بنویسید.

فلوچارت حلقه for در C++

نحوه نگارش دستور حلقه for

نحوه نگارش دستور حلقه for در C++ به صورت زیر است:
 

for ( init; condition; increment ) {
   statement(s);
}

توضیح نگارش حلقه for در بالا به صورت زیر است:

  • init: در ابتدا و تنها یک بار انجام می شود. این مرحله به شما اجازه می دهد تا متغیرهایی را برای کنترل حلقه اعلان کنید. تا قبل از علامت سمیکالن نیازی به قرار دادن دستورات ندارید.
  • condition: سپس شرط حلقه بررسی می‌شود و اگر true باشد دستورات درون حلقه اجرا می شود و اگر false باشد دستورات درون حلقه اجرا نمی‌شود و جریان اجرای برنامه به دستور بعد از حلقه منتقل می شود.
  • increment: بعد از این که دستور درون حلقه اجرا شد، جریان کنترل به حالت پیش فرض منتقل می شود که این دستورات می توانند تا قبل از سمیکالن خالی بمانند و سپس گام حلقه اضافه می شود.
  • اکنون شرط دوباره بررسی می شود و اگر true باشد فرایند تکرار انجام می شود (دستورات درون حلقه، افزایش گام حلقه، بازگشت به شرط حلقه) و زمانی که شرط false شود حلقه به پایان می رسد.

جریان حلقه

فلوچارت حلقه for در c++

مثال
 

#include 
using 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

دستور حلقه  do. While

برخلاف حلقه ‌های for و while که ابتدا شرط حلقه را بررسی می کنند، دستور حلقه do. While شرط حلقه را در انتهای دستورات بررسی می‌کند.
حلقه do. while  شبیه حلقه while است با این تفاوت که دستورات حلقه do. while حداقل یکبار اجرا می شوند.

نحوه نگارش دستور  do. While

نحوه نگارش دستورات do. While به شرح زیر است:
 

do {
   statement(s);
} 
while( condition );

توجه داشته باشید که عبارت شرطی در انتهای حلقه ظاهر می شود، بنابراین دستورات در حلقه یکبار قبل از بررسی شرط اجرا می شود.
اگر شرط حلقه true باشد، جریان حلقه دوباره به دستور do منتقل می شود و این فرایند تا زمانی که شرط حلقه false شود ادامه دارد.

جربان حلقه  do.While

فلوچارت حلقه do while در c++

#include 
using 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 استفاده می کند:

#include 
using 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 وجود دارد ضروری نیست، می‌توانید یک حلقه بی نهایت را با خالی گذاشتن عبارت شرطی ایجاد کنید.
 

#include 
using 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.

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

عملگرهای بیتی بر روی بیت ها کار می کنند. جداول حقیقی برای &، |، و ^ به شرح زیر است

pqp & qp | qp ^ q
00000
01011
11110
10011

فرض کنید اگر 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 اشاره می کند

اولویت عملگرها در C++

اولویت یک عملگر ترتیب اجرای آن را در یک عبارت تعیین می‌کند که بر نتیجه عبارت تاثیر گذار است. برخی اولویت بالاتری نسبت به سایر آن ها دارند. برای مثال عملگر ضرب دارای اولویت بالاتری نسبت به عملگر به علاوه است.
برای مثال در عبارت x = 7 + 3 * 2، مقدار x برابر با ۱۳ است و مقدار آن ۲۰ نمی باشد زیرا * اولویت بالاتری نسبت به + دارد. بنابراین ابتدا 2*3 انجام می شود و سپس مقدار آن با 7 جمع می شود. در جدول زیر اولویت عملگرها به ترتیب بیشترین اولویت قرار گرفته است. آن هایی که اولویت کمتری دارند در انتهای جدول قرار داده شده‌اند. در یک عبارت ابتدا اجرای عملگری انجام می‌شود که اولویت بالاتری دارند.

دسته بندیعملگرهاترتیب
پسوند () [] -> . ++ - -  چپ به راست
یگانی + - ! ~ ++ - - (type)* & sizeof راست به چپ
ضربی  * / % چپ به راست
افزودنی  + - چپ به راست
شیفت  << >> چپ به راست
رابطه ای  < <= > >= چپ به راست
برابری یا تساوی  == != چپ به راست
بیتی AND چپ به راست
بیتی XOR چپ به راست
بیتی OR چپ به راست
منطقیAND && چپ به راست
منطقی OR || چپ به راست
شرطی ?: راست به چپ
انتسابی = += -= *= /= %=>>= <<= &= ^= |= راست به چپ
کاماچپ به راست

 

از اینکه سایت برنامه نویسان را انتخاب کردید متشکریم با تشکر از سایتilikephp.

 


یک کلاس حافظه محدوده حضور متغیر در برنامه (scope) و مدت حضور یا طول عمر متغیرها و یا توابع ( Life Time ) را در یک برنامه C++ تعیین می کند.

پس با توصیفات بالا متوجه میشوید که از این پس میتوانید برنامه ای بنویسید که اولا حافظه زیادی اشغال نکند و از منابع حافظه کامپیوتر به صورت بهینه استفاده کند و دوما سرعت اجرای بالاتری داشته باشند و سوما برنامه دارای خطای کمتر و عیب یابی سریع تری نیز میشود.


در زبان c++  5 نوع کلاس حافظه وجود دارد. کلاس های حافظه زیر را می‌توان در یک برنامه C++ استفاده کرد. 

  • auto یا خودکار
  • register یا ثبات
  • static یا ایستا
  • extern یا خارجی
  • mutable

کلاس حافظه auto

auto یک کلاس حافظه پیش فرض برای تمامی متغیر های محلی است و اگر نوع کلاس حافظه تعیین نشود، auto برای آن در نظر گرفته می شود.
 

{
   int mount;
   auto int month;
}

C++

Copy

مثال فوق دو متغیر را با یک کلاس حافظه یکسان تعریف می کند. کلاس حافظه auto فقط می تواند در داخل توابع، مانند متغیرهای محلی استفاده شود.

کلاس حافظه register

کلاس حافظه register یا ثبات برای تعریف متغیرهای محلی استفاده می‌شود که باید به جای RAM در register یا ثبات های CPU ذخیره می شوند. بنابراین سرعت انجام عملیات با آن‌ها بسیار بالاست و در نتیجه موجب افزایش سرعت اجرای برنامه می‌شود اما محدودیت هایی ر ا نیز ایجاد میکنندکه در زیر به برخی از آنها به اختصار اشاراه می کنیم.

محدودیت ها

  1. همان طور که اشاره شد، متغیر از نوع ثبات در صورت امکان در یکی از ثبات‌های CPU قرار می‌گیرد. بنابراین به دلیل کم بودن تعداد ثبات‌های CPU، تعداد محدودی متغیر می‌توانند در ثبات‌ها قرار بگیرند. پس اگر تعداد متغیرهایی که از نوع کلاس حافظه ثبات تعریف شده اند زیاد باشند، کامپایلر کلاس حافظه ثبات را از متغیرها حذف می‌کند .
  2. کلمه کلیدی register تنها می‌تواند برای متغیرهای محلی و همچنین پارامترهای تابع به کار گرفته شود .
  3. انواع متغیر که می‌توانند دارای کلاس حافظه ثبات باشند، در کامپیوترهای مختلف، متفاوت است . دلیل این امر هم این است که متغیرهای مختلف، تعداد بایت متفاوتی را به خود اختصاص می‌دهند.
  4. آدرس در مفهوم کلاس حافظه ثبات بی معنی است. زیرا متغیرها در ثبات‌های CPU قرار می‌گیرند و نه در RAM . پس در مورد آن کلاس حافظه، نمی‌توان از عملگر & برای اشاره به آدرس متغیرها استفاده کرد.
{
   register int  miles;
}

C++

Copy

 register باید تنها برای متغیرهایی که نیاز به دسترسی سریع مانند شمارنده ها دارند استفاده شود. لازم به ذکر است که تعریف register به این معنی نیست که متغیر در یک register ذخیره خواهد شد. بلکه به این معنی است که ممکن است با توجه به سخت افزار و محدودیت های پیاده سازی در یک register ذخیره شود.

کلاس حافظه static

کلاس حافظه 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 در کجا استفاده می شود فقط بدانید که برای اعلان  یک متغیر سراسری یا یک تابع در فایل دیگر استفاده می‌شود.
extern modifier اغلب زمانی مورد استفاده قرار می گیرد که دو یا چند  فایل متغیرهای سراسری و یا توابع یکسانی را اشتراک بگذارند که در زیر توضیح داده شده است. 

محتویات فایل main.c
 

#include 
int count ;
extern void write_extern();

main() {
   count = 5;
   write_extern();
}

C++

Copy

محتویات فایل support.cpp

#include 

extern 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

کلاس حافظه mutable تنها بر روی اعضای کلاس که بعدها در ادامه این آموزش ها توضیح داده خواهد شد اجرا می شود. پس از آن که یک شی را const تعریف می کنید، دیگر نمی توانید مقادیر اعضای آن را تغییر دهید. اما اگر عضوی از این کلاس را mutable تعریف کنید، می توانید حتی در حالیکه آن را const تعریف کرده اید، مقادیر آن را تغییر دهید. در جلسات بعدی بیشتر در مورد این نوع کلاس حافظه توضیح خواهیم داد.

 

از اینکه سایت برنامه نویسان را انتخاب کردید متشکریمبا تشکر از سایت ilikephp.


با استفاده از نوع داده ای اصلاح کننده ها (Data Type Modifier) های موجود در زبان برنامه نویسی C++ می توانید نوع متغیرها را تغییر دهید.
لیست انواع نوع داده ای اصلاح کننده ها در اینجا قرار گرفته است:

  • signed
  • unsigned
  • long
  • short  

اصلاح کننده های  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 بهتر است قطعه کد کوتاه زیر را اجرا کنید.
 

#include 
using 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ها در C++

Type qualifier ها اطلاعات اضافی را در مورد متغیرهای قبل از آنها ارائه می دهند. در جدول زیر انواع type qualifire ها در زبان برنامه نویسی C++ ارائه شده است.

شمارهQualifier و معنی آن
1

const

اشیا و متغیرهایی که از نوع const تعریف می شوند در حین اجرای برنامه غیر قابل تغییر هستند.

2

volatile

اصلاح کننده یا متغیر volatile به کامپایلر می گوید که مقدار متغیر ممکن است به شیوه ای که صراحتا توسط برنامه مشخص نشده تغییر نکند.

متغیرهایی از نوع volatile متغیرهایی هستند که ممکن است مقدار آنها توسط یک پردازش خارجی تغییر یابد. این پردازش می‌تواند وقوع یک وقفه، یا تغییر از طریق یک پردازش موازی باشد.

3

restrict

کلمه کلیدی restrict به کامپایلر دستور می دهد که از بارگذاری مجدد یک متغیر جلوگیری کرده و برای بهینه سازی کدها از مقدار قبلی که بارگذرای شده است، استفاده کند.

 

از اینکه سایت برنامه نویسان را انتخاب کردید متشکریم با تشکر از سایت ilikephp.


ثابت ها به مقادیر ثابت اشاره میکنند که ممکن است در طول برنامه تغییر نکنند که به آن ها لیترال (لفظ) نیز می گویند. یک ثابت می تواند از هر نوع داده ای که در زبان برنامه نویسی C++ وجود دارد باشد که شامل عدد صحیح، اعداد اعشاری، کاراکترها، رشته ها و مقادیر بولی است. ثابت ها دقیقا مانند متغیر های معمولی هستند با این تفاوت که پس از تعریف آن ها، مقادیرشان غیرقابل تغییر میشود.

لیترال های عددی در 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++

یک لیترال اعشاری تشکیل شده از یک عدد صحیح، یک نقطه اعشار، یک قسمت کسری و یک بخش توان است. لیترال های اعشاری قابل نمایش به صورتدسیمال و نمایی هستند. 
اگر بخواهید به صورت دسیمال نمایش دهید، باید از یک نقطه اعشار یا توان و یا هرد دو استفاده کنید و اگر قصد دارید آن را به صورت نمایی نشان دهید باید از بخش عدد صحیح یا بخش کسری و یا هر دو استفاده کنید.
چند مثال از لیترال های اعشاری در زیان برنامه نویسی C++ :
 

3.14159       // Legal
314159E-5L    // Legal
510E          // Illegal: incomplete exponent
210f          // Illegal: no decimal or exponent
.e55          // Illegal: missing integer or fraction

لیترال های بولی در c++

به طور کلی دو نوع لیترال بولی وجود دارد که همه آنها بخشی از کلمات کلیدی استاندارد ++C هستند.

  • true که نشان دهنده درست بودن است
  • false که نشان دهنده نادرست بودن است

توجه کنید که مقدار true برابر با یک و یا مقدار false برابر با صفر نیست.

لیترال های کاراکتری

لیترال کاراکتری در تک کوتیشن قرار می گیرد. اگر لیترال کاراکتری با L شروع شود ( تنها حروف بزرگ) مانند (L'x ') ، باید در نوع متغیر wchar_t ذخیره شود. در غیر این صورت  لیترال های کاراکتری  (مثلا "x") را می توان در یک متغیر ساده از نوع char ذخیره شود.
یک لیترال کاراکتری شامل یک کاراکتر ساده مانند ('x') ، کاراکتر کنترلی مانند ('\t') و یا کاراکتر جهانی مانند ('\u02c0')  است.
کاراکتر های به خصوصی در C++ وجود دارند که اگر قبل از آنها یک بک اسلش (\) قرار بگیرد، معنی خاصی پیدا می کنند برای مثال برای خط جدید n\، یا برای تب t\ استفاده می شود. در اینجا لیستی از این کاراکتر ها برای شما قرار گرفته است.

کاراکترهای کنترلیعملکرد
\\درج کاراکتر بک اسلش \
\'درج کاراکتر تک کوتیشن '
\"درج کاراکتر دابل کوتیشن "
\?درچ کاراکتر علامت سوال ?
\aصدای اخطار یا بیپ
\bجرکت به عقب یا Backspace
\fForm feed
\nخط جدید
\rCarriage return
\tایجاد فاصله افقی
\vایجاد فاصله عمودی
\oooدرج اعداد بر مبنای 8 از یک تا 3 عدد
\xhh . . .درج اعداد بر مبنای 16 از یک تا چند عدد

در زیر مثالی از نحوه استفاده از کاراکتر های کنترلی ارائه شده است:

#include 
using namespace std;

int main() {
   cout << "Hello\tWorld\n\n";
   return 0;
}

C++

Copy

پس از کامپایل و اجرای کد بالا نتیجه زیر نمایان خواهد شد.
 

Hello   World

لیترال های رشته ای در c++

لیترال رشته ای در داخل دو کوتیشن می گیرد و کاراکترهای آن مانند یک لیترال کاراکتری است.
شما می توانید یک خط طولانی را به چندین خط کوتاه با استفاده از لیترال رشته ای  تبدیل کنید و آنها را با استفاده از فضای خالی سفید از بقیه جدا کنید.
در اینجا مثال هایی از فرم مختلف لیترال رشته ای قرار داده شده است که هر سه فرم کاملا نتیجه یکسانی دارند:
 

"hello, dear"

"hello, \

dear"

"hello, " "d" "ear"

تعریف یک ثابت در c++

روش بسیار ساده ای در++C برای تعریف ثابت ها وجود دارد.

  • استفاده از دستور #define
  • استفاده از  کلمه کلیدی  const 

دستور #define

نحوه استفاده از دستور #define برای تعریف یک ثابت به صورت زیر است:

#define identifier value

حال به شرح آن می پردازیم:

#include 
using 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 به اعلان یک ثابت از نوع خاص بپردازید.

const type variable = value;

حال به شرح آن می پردازیم:

#include 
using 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 برای تعریف یا اعلان متغیر وجود دارد:

  • داخل یک تابع یا یک بلوک که متغیرهای محلی (local variable) نامیده می شود.
  • بعنوان پارامترهای تابع که پارامترهای رسمی (formal parameters) نامیده میشود.
  • خارج از تمام توابع که متغیرهای سراسری (global variables) نامیده میشود.

توجه:

توابع و پارامترهای آنها را در فصل های بعدی به طور کامل توضیح خواهیم  داد. در اینجا قصد داریم در مورد متغیرهای محلی و سراسری صحبت کنیم.

متغیرهای محلی (local variable)

متغیر هایی که در داخل یک تابع یا یک حوزه اعلان میشوند متغیرهای محلی نامیده می شوند. این متغیر ها تنها در محدوده ای که تعریف شده اند (تابع یا محدوده) میتوانند استفاده شوند. متغیرهای محلی برای توابعی که خارج از آنها باشد قابل شناسایی نیستند. در اینجا مثالی برای استفاده از متغیرهای محلی درC++ خواهیم داشت:
 

#include 
using 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++  ارائه خواهیم داد:
 

#include 
using 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

یک برنامه می تواند نامی یکسان و مشابه برای متغیر سراسری ومحلی داشته باشد. اما در نظر داشته باشید که متغیر محلی به متغیر سراسری اولیت دارد. برای مثال:
 

#include 
using namespace std;

// Global variable declaration:
int g = 20;

int main () {
   // Local variable declaration:
   int g = 10;

   cout << g;

   return 0;
}

C++

Copy

پس از کامپایل و اجرای کد بالا نتیجه زیر نمایش داده خواهد شد.

10


مقداردهی متغیرهای سراسری و محلی در C++

وقتی که یک متغیر محلی تعریف می شود توسط سیستم مقداردهی اولیه نمی شود و باید خودتان آن را مقدارهی کنید. اما متغیرهای سراسری به طور خودکار توسط سیستم، زمانی که آنها را تعریف می کنید مقداردهی اولیه میشوند.

در جدول زیر مقدار پیش فرضی که یک متغیر سراسری بر اساس نوع داده ای خود می گیرد را آورده ایم:

نوع دادهمقدار پیش فرض
int0
char'\0'
float0
double0
pointerNULL


این یک تمرین خوب برای این است که متغیر ها را به درستی مقداردهی کنید. در غیر این صورت در برخی موارد برنامه ها می توانند نتایج غیرمنتظرهای را تولید کند.

 

از اینکه سایت برنامه نویسان را انتخاب کردید متشکریم با تشکر از سایت 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++

هنگام تعریف یک متغیر در واقع به کامپایلر می گوید که کجا و چه مقدار از فضای حافظه برای ایجاد یک متغیر را نیاز داریم . با تعریف یک متغیر نوع آن را مشخص میکنیم که شامل یک یا چند متغیر از همان نوع است.

یک متغیر در 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 تمام متغیرهای دیگر تعریف نشده است.

 

اعلان (declare) یک متغیر در C++

در زمانیکه برنامه‌ حاوی چندین سورس فایل باشد و بخواهیم از یک متغییر سراسری در خارج از آن فایلی که تعریف شده (define) استفاده کنیم، باید آن متغییر را در جایی غیر از فایل اصلی اعلان کنیم.
اعلان یک متغیر کامپایلر را آگاه می کند که متغیری با نام و نوع داده ای خاص وجود دارد تا کامپایلر بتواند در ادامه بدون نیاز به جزئیات کامل در مورد متغیر آن را کامپایل کند. اعلان یک متغیر تنها در زمان کامپایل مفهوم دارد و کامپایلر در زمان اتصال به برنامه به متغیر واقعی تعریف شده نیاز دارد.اعلان متغیر زمانی مفید است که از چندین فایل استفاده می کنید و متغیرهای خود را در یکی از فایل هایی که در زمان اتصال برنامه در دسترس هستند، تعریف می کنید. برای اعلان یک متغیر می توانید از کلمه کلیدی extern در هر مکان استفاده منید که معمولا آن را در header برنامه استفاده می کنند. اگرچه شما می توانید یک متغیر را چند بار در برنامه C++ خود اعلان کنید، اما می توان آن را فقط یک بار در یک فایل، یک تابع یا یک بلوک از کد تعریف کرد.
مثال
مثال زیر را در نظر بگیرید که متغیر در بالا declare شده است، اما در داخل تابع اصلی تعریف شده است.
 

#include 
using 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

مفاهیم Lvalues و Rvalues

دو نوع عبارت در ++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++

++C  یک مجموعه کامل از انواع داده ای را ارائه می دهد. در جدول زیر 7 نوع داده ای اصلی در C++ را مشاهده می کنید.
 

نوع داده ایکلمه کلیدی
Booleanbool
Characterchar
Integerint
Floating pointfloat
Double floating pointdouble
Valuelessvoid
Wide characterwchar_t

توجه

بعضی از انواع داده های اصلی را می توان با استفاده از یک یا چند اصلاح کننده، اصلاح کرد.
•    signed
•    unsigned
•    short
•    long

جدول زیر نوع متغیر ها به همراه مقدار حافظه ای که برای ذخیره مقادیر آنها نیاز است، حداکثر و حداقل مقداری را که می توانند ذخیره کنند را نشان میدهد.
جدول
اندازه متغیر ها می تواند با توجه به کامپایلر و سیستمی که استفاده می کنید با آنچه که در جدول نشان داده شده است متفاوت باشد. در زیر مثالی برای نشان دادن اندازه داده های مختلف بر روی کامپیوتر شما ارائه شده است.

#include 
using 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 ارائه شده است.
 

typedef type newname; 

در مثال زیر به کامپایلر می گوییم که feet نام جدیدی برای نوع داده ای int است.
 

typedef int feet;

C++

Copy


حال با نام جدید feet که برای نوع داده ای int ایجاد کرده اید می توانید یک متغیر جدید به نام distance ایجاد کرده و مقدار دهی کنید.
 

feet distance = 12;

C++

Copy

انواع داده های شمارشی یا enum

برای تعریف مقادیر قابل شمارش از انواع داده ای شمارشی یا 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.


آخرین ارسال ها

آخرین جستجو ها


اشراق bagheblourt فرکتال هنر سایت مرجع دانلود پایان نامه - تحقیق - پروژه تجربیات یک نوجوان انجمن تخصصی سلامت و پیشگیری در مدارس قم جامع ترین وبلاگ سئو shakhehsib igolbarg وبلاگ فایل های علمی آموزشی